summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1995-12-30 19:02:48 +0000
committerpeter <peter@FreeBSD.org>1995-12-30 19:02:48 +0000
commitc3f352d4ad515968c54d216a0e53252eff8ab3ef (patch)
tree48ddeda3c6c8d8572cc34bf52ccf9cb9bd97d488 /gnu
parentab124e78b0271ddb904b761b31e5c9a0cf24e070 (diff)
downloadFreeBSD-src-c3f352d4ad515968c54d216a0e53252eff8ab3ef.zip
FreeBSD-src-c3f352d4ad515968c54d216a0e53252eff8ab3ef.tar.gz
This commit was generated by cvs2svn to compensate for changes in r13122,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/games/chess/DOCUMENTATION/ARTICLE66
-rw-r--r--gnu/games/chess/DOCUMENTATION/ARTICLE.2123
-rw-r--r--gnu/games/chess/DOCUMENTATION/CHANGES362
-rw-r--r--gnu/games/chess/DOCUMENTATION/COPYING123
-rw-r--r--gnu/games/chess/DOCUMENTATION/GENERAL34
-rw-r--r--gnu/games/chess/DOCUMENTATION/HEURISTICS122
-rw-r--r--gnu/games/chess/DOCUMENTATION/MAN-PAGE161
-rw-r--r--gnu/games/chess/Xchess/COPYING124
-rw-r--r--gnu/games/chess/Xchess/ScrollText34
-rw-r--r--gnu/games/chess/Xchess/bishop.bitmap71
-rw-r--r--gnu/games/chess/Xchess/bishop_mask.bitmap71
-rw-r--r--gnu/games/chess/Xchess/bishop_outline.bitmap71
-rw-r--r--gnu/games/chess/Xchess/bishop_small.bitmap15
-rw-r--r--gnu/games/chess/Xchess/bishop_small_outline.bitmap15
-rw-r--r--gnu/games/chess/Xchess/king.bitmap71
-rw-r--r--gnu/games/chess/Xchess/king_mask.bitmap71
-rw-r--r--gnu/games/chess/Xchess/king_outline.bitmap71
-rw-r--r--gnu/games/chess/Xchess/king_small.bitmap15
-rw-r--r--gnu/games/chess/Xchess/king_small_outline.bitmap15
-rw-r--r--gnu/games/chess/Xchess/knight.bitmap71
-rw-r--r--gnu/games/chess/Xchess/knight_mask.bitmap71
-rw-r--r--gnu/games/chess/Xchess/knight_outline.bitmap71
-rw-r--r--gnu/games/chess/Xchess/knight_small.bitmap15
-rw-r--r--gnu/games/chess/Xchess/knight_small_outline.bitmap15
-rw-r--r--gnu/games/chess/Xchess/pawn.bitmap71
-rw-r--r--gnu/games/chess/Xchess/pawn_mask.bitmap71
-rw-r--r--gnu/games/chess/Xchess/pawn_outline.bitmap71
-rw-r--r--gnu/games/chess/Xchess/pawn_small.bitmap15
-rw-r--r--gnu/games/chess/Xchess/pawn_small_outline.bitmap15
-rw-r--r--gnu/games/chess/Xchess/queen.bitmap71
-rw-r--r--gnu/games/chess/Xchess/queen_mask.bitmap71
-rw-r--r--gnu/games/chess/Xchess/queen_outline.bitmap71
-rw-r--r--gnu/games/chess/Xchess/queen_small.bitmap15
-rw-r--r--gnu/games/chess/Xchess/queen_small_outline.bitmap15
-rw-r--r--gnu/games/chess/Xchess/rook.bitmap71
-rw-r--r--gnu/games/chess/Xchess/rook_mask.bitmap71
-rw-r--r--gnu/games/chess/Xchess/rook_outline.bitmap71
-rw-r--r--gnu/games/chess/Xchess/rook_small.bitmap15
-rw-r--r--gnu/games/chess/Xchess/rook_small_outline.bitmap15
-rw-r--r--gnu/games/chess/Xchess/scrollText.h32
-rw-r--r--gnu/games/chess/Xchess/scrollText/scrollText.h32
-rw-r--r--gnu/games/chess/Xchess/shade.bitmap71
-rw-r--r--gnu/games/chess/Xchess/window.c.bm928
-rw-r--r--gnu/games/chess/Xchess/xchess.1217
-rw-r--r--gnu/games/chess/Xchess/xchess.c.150197
-rw-r--r--gnu/games/chess/Xchess/xchess.cur9
-rw-r--r--gnu/games/chess/Xchess/xchess.game8
-rw-r--r--gnu/games/chess/Xchess/xchess.h301
-rw-r--r--gnu/games/chess/Xchess/xchess.icon28
-rw-r--r--gnu/games/chess/Xchess/xchess_mask.cur7
-rw-r--r--gnu/games/chess/gnuchess.book3878
-rw-r--r--gnu/games/chess/pathnames.h36
-rw-r--r--gnu/gnu2bmake/gcc260.patch513
-rw-r--r--gnu/lib/libg++/include/regex.h272
-rw-r--r--gnu/usr.bin/awk/gawk.texi11270
-rw-r--r--gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info1659
-rw-r--r--gnu/usr.bin/cvs/cvs/config.h217
-rw-r--r--gnu/usr.bin/cvs/cvs/version.c11
-rw-r--r--gnu/usr.bin/cvs/doc/cvs.ms1073
-rw-r--r--gnu/usr.bin/cvs/lib/Makefile.in91
-rw-r--r--gnu/usr.bin/cvs/lib/regex.c4948
-rw-r--r--gnu/usr.bin/cvs/lib/y.tab.h18
-rw-r--r--gnu/usr.bin/cvs/mkmodules/xxx5320
-rw-r--r--gnu/usr.bin/dc/dc.info330
-rw-r--r--gnu/usr.bin/dc/dc.texinfo381
-rw-r--r--gnu/usr.bin/dialog/checklist.c349
-rw-r--r--gnu/usr.bin/dialog/colors.h219
-rw-r--r--gnu/usr.bin/dialog/dialog.h231
-rw-r--r--gnu/usr.bin/dialog/menubox.c310
-rw-r--r--gnu/usr.bin/dialog/msgbox.c81
-rw-r--r--gnu/usr.bin/dialog/radiolist.c353
-rw-r--r--gnu/usr.bin/dialog/rc.c375
-rw-r--r--gnu/usr.bin/dialog/rc.h223
-rw-r--r--gnu/usr.bin/dialog/textbox.c709
-rw-r--r--gnu/usr.bin/dialog/yesno.c113
-rw-r--r--gnu/usr.bin/diff/fnmatch.h69
-rw-r--r--gnu/usr.bin/diff3/COPYING339
-rw-r--r--gnu/usr.bin/diff3/diff3.c1693
-rw-r--r--gnu/usr.bin/diff3/getopt.c731
-rw-r--r--gnu/usr.bin/diff3/getopt.h129
-rw-r--r--gnu/usr.bin/diff3/getopt1.c176
-rw-r--r--gnu/usr.bin/diff3/system.h159
-rw-r--r--gnu/usr.bin/diff3/version.c3
-rw-r--r--gnu/usr.bin/grep/tests/regress.sh30
-rw-r--r--gnu/usr.bin/groff/eqn/eqn.cc1162
-rw-r--r--gnu/usr.bin/groff/eqn/eqn.tab.h67
-rw-r--r--gnu/usr.bin/groff/pic/pic.cc5166
-rw-r--r--gnu/usr.bin/groff/pic/pic.tab.h129
-rw-r--r--gnu/usr.bin/groff/refer/label.cc1593
-rw-r--r--gnu/usr.bin/gzip/zcmp67
-rw-r--r--gnu/usr.bin/man/apropos/apropos64
-rw-r--r--gnu/usr.bin/man/apropos/apropos.127
-rw-r--r--gnu/usr.bin/man/lib/config.h216
-rw-r--r--gnu/usr.bin/man/makewhatis/makewhatis79
-rw-r--r--gnu/usr.bin/man/man/man.1132
-rw-r--r--gnu/usr.bin/man/whatis/whatis66
-rw-r--r--gnu/usr.bin/man/whatis/whatis.127
-rw-r--r--gnu/usr.bin/perl/Makefile.inc5
-rw-r--r--gnu/usr.bin/perl/perl/t/op/Op.dbmx.dbbin16384 -> 0 bytes
-rw-r--r--gnu/usr.bin/perl/perl/usub/README114
-rw-r--r--gnu/usr.bin/perl/perl/usub/bsdcurses.mus699
-rw-r--r--gnu/usr.bin/perl/perl/usub/curses.mus890
-rw-r--r--gnu/usr.bin/perl/perl/usub/man2mus66
-rwxr-xr-xgnu/usr.bin/perl/perl/usub/mus135
-rw-r--r--gnu/usr.bin/perl/perl/usub/pager190
-rw-r--r--gnu/usr.bin/perl/perl/usub/usersub.c75
-rw-r--r--gnu/usr.bin/perl/x2p/a2p.c2715
-rw-r--r--gnu/usr.bin/pr/COPYING339
-rw-r--r--gnu/usr.bin/pr/getopt.h129
-rw-r--r--gnu/usr.bin/pr/version.h1
-rw-r--r--gnu/usr.bin/ptx/ptx.info496
-rw-r--r--gnu/usr.bin/ptx/ptx.texinfo554
-rw-r--r--gnu/usr.bin/tar/regex.h490
-rw-r--r--gnu/usr.bin/tar/y.tab.h18
-rw-r--r--gnu/usr.bin/texinfo/info-files/info-stnd.info1259
-rw-r--r--gnu/usr.bin/texinfo/info-files/info.info777
-rw-r--r--gnu/usr.bin/texinfo/info-files/makeinfo.info224
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi-files/info-stnd.texi1359
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi-files/info.texi861
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi-files/makeinfo.texi285
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi-files/texi.texi15626
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi-files/userdoc.texi1263
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info297
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-11131
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-101165
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-11451
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-21289
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-31262
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-41412
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-51433
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-61461
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-71307
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-81056
-rw-r--r--gnu/usr.bin/texinfo/info-files/texi.info-91210
-rw-r--r--gnu/usr.bin/texinfo/info/info-stnd.info1259
-rw-r--r--gnu/usr.bin/texinfo/info/info.info777
-rw-r--r--gnu/usr.bin/texinfo/misc/texindex.c1700
137 files changed, 0 insertions, 95321 deletions
diff --git a/gnu/games/chess/DOCUMENTATION/ARTICLE b/gnu/games/chess/DOCUMENTATION/ARTICLE
deleted file mode 100644
index b2ab331..0000000
--- a/gnu/games/chess/DOCUMENTATION/ARTICLE
+++ /dev/null
@@ -1,66 +0,0 @@
-[This article was reproduced from a GNU Bulletin.]
-
- GNU Chess
- by Stuart Cracraft
- copyright 1987 Stuart Cracraft
-
-
- GNU Chess is a communal chess program. Contributors donate their
-time and effort in order to make it a stronger, better, sleeker program.
-Contributions take many forms: interfaces to high-resolution displays,
-opening book treatises, speedups of the underlying algorithms, additions
-of extra heuristics. These contributions are then distributed to the
-large user-base so that all may enjoy the fruits of our labor. The
-original and continuing purpose of this project is to permanently end
-the rampant hoarding of computer chess software that has been the
-case for the past 20 years.
-
- Many people have contributed to GNU Chess. Their contributions have
-improved the program from being a patzer (weak program) to being a
-grandpatzer (decently strong program). In its growth since initial
-release, GNU Chess has gone from approximately class D to expert
-strength. It beats the Fidelity Excel commercial unit rather handily.
-
- GNU Chess's structure is a hybrid of the Shannon Type-A and
-Type-B methods. It conducts a full-width search to a fixed-depth
-and then continues with a quiescence search for many more ply.
-This quiescence search helps the program find positions which
-can be safely evaluated and which are not too turbulent. If
-a terminal position is too turbulent, the evaluation will be
-highly inaccurate. Additional searching by investigating series
-of captures, checks, and other potentially imbalance-producing
-moves is quite helpful.
-
- GNU Chess will sacrifice pieces in order to reach known winning
-endings. Also, it uses a trade-down bonus to encourage the stronger
-side to trade off certain types of pieces thus reaching a more
-simplified and therefore ostensibly "clearer" position.
-
- GNU Chess has certain types of knowledge regarding easier endgames.
-This allows it to play these endings somewhat better than might be
-expected.
-
- GNU Chess has time heuristics that it uses to improve its handling
-of time-controls and hasten its making of "obvious" moves.
-
- GNU Chess is interfaced to the SUN Windows and X Windows
-display protocols and can display its pieces in elaborate format,
-similar to chess diagrams.
-
- GNU Chess has an opening book which consists of many variations
-from MCO (Modern Chess Openings).
-
- For comparison purposes, GNU Chess running on a VAX 8650 is
-stronger than the famous Chess 4.5 running on a CDC 6400.
-
- We wish to acknowledge the contributions of the following
-individuals: (in alphabetical order) Jim Aspnes, Wayne Christopher,
-Steve Dougherty, David Goldberg, Richard Greenblatt, David Kittinger,
-Richard Stallman, John Stanback, and Ken Thompson.
-
- Contact information: The author may be reached by a variety of
-methods. Via U.S. mail: Stuart Cracraft, 5 Via Amistosa, Suite G,
-Rancho Santa Margarita, Ca. 92688 USA.
- By Internet: 'cracraft at wheaties.ai.mit.edu'
-The author may also be contacted via the Free Software Foundation, Inc.
-675 Massachusetts Ave.,Cambridge MA 02139.
diff --git a/gnu/games/chess/DOCUMENTATION/ARTICLE.2 b/gnu/games/chess/DOCUMENTATION/ARTICLE.2
deleted file mode 100644
index 031ae18..0000000
--- a/gnu/games/chess/DOCUMENTATION/ARTICLE.2
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
- GNU Chess: Experiences Learned
- with Communal Sharing
- by Stuart Cracraft
- (and contributors to the GNU Project)
-
-
-Limited sharing has characterized the computer chess community
-for the past two decades. Occasional research articles give hints
-and suggestions for useful features, but rarely reveal the real
-details of the critically important advances. We will here
-describe an effort underway (titled "GNU Chess") to create a more
-open and friendly environment of sharing.
-
-GNU Chess is part of Project GNU, a large-scale effort in which
-the philosophical goals are far-reaching. We will not go into any
-great depth about these goals as they relate to the larger pro-
-ject, because these are described elsewhere [1]. However, we will
-mention the basic issues and the changes we hope to encourage.
-
-The start of the GNU Chess project was a natural result of the
-experiences gleaned in writing a chess program. While the author
-was at a progressive academic location [2], he was able to con-
-ceive the idea of a communal chess program only after much heart-
-ache. During the period of writing the initial version (which
-has since undergone many improvements and whole revisions), it
-became clear that the best features and most useful hints, the
-very best of the heuristics, were hidden and difficult to find in
-the literature.
-
-Sprinkled across many books, research papers, magazine articles,
-accumulated in the community, during the past 25 years, there was
-literally a void of true, empirical programs. Locating usable
-programs was difficult. Many programs were the result of academic
-work in "ivory towers", and hence were inaccessible to the common
-man. Other programs were sequestered in research think-tanks. Na-
-turally, developers of commercial programs carefully guarded
-their source in order to protect their investment. On the other
-hand, a few chess program source listings had actually been pub-
-lished, but these were not really very strong, often written in a
-non-general language, and frequently more pedantic than practi-
-cal.
-
-The idea of a reasonably strong communal program solidified.
-When we refer to a communal program, we do not regard this as
-public-domain software. Rather, we refer to a program which is
-under the shared authority of a number of individuals, the prin-
-cipal contributors. These individuals have experienced and real-
-ized the positive results of a sharing community and the rapid
-improvements that come through contributing in such a community.
-Further, these individuals devote time and energy to coordinating
-the contributions of other individuals. While they exercise a
-certain editorial right, this is usually not exercised arbitrari-
-ly; instead, a discussion is often undertaken.
-
-Eventually, a working C program that played chess was available.
-The coordinating institution for Project GNU [3], accepted our
-suggestion of inclusion of a chess program in the GNU distribu-
-tion. Initial distribution of GNU Chess commenced in October of
-1986. Interest in the project increased rapidly.
-
-Contributions came in from many places and people. Interfaces to
-X-windows and SUN-windows were donated, thus allowing very fancy
-chess fonts on bit-mapped screens. Also, contributions involving
-large portions of opening books such as MCO and collections of
-master games were added to the distribution. Additionally,
-tree-search modifications and heuristics were provided, and occa-
-sionally even entire rewrites.
-
-The program advanced in strength by several USCF class intervals
-during a period of less than one year. During this time, many
-unusual features and enhancements were added to the program, usu-
-ally under the coordination of two or more people, with one work-
-ing in a distant-advisory capacity to the other. Frequently, gra-
-duate students would give up significant time from their thesis
-work to devote energy to contributing. Their corporate counter-
-parts would often give up project time to make their donation.
-
-Contributors would often enter the project in a very forceful way
-and then having made their contribution, learn the viability of
-communal sharing once others had stepped in and contributed to
-them, thus providing considerable reinforcement. Frequently, con-
-tributors would then go into "hibernation" for a long period of
-time, but most of them remained open to contributing and were
-helpful when asked to reprogram their particular contribution in
-a more recent version.
-
-GNU Chess has made great strides in relatively little time. It
-has run on many different hardware architectures and has been
-compiled by a number of C compilers [4]. A sampling of the com-
-puters on which the program has run is: National 32032, Vax
-11/750, 8550, 8600, 8650, Motorola 68020, CCI 5/32, CCI 6/32
-(tahoe), Cray XMP.
-
-It is our belief that GNU Chess will stimulate graduate research
-in computer chess theory and practice. When students are able to
-easily obtain a state-of-the-art program in order to test out
-their ideas, they will no longer need to reinvent the wheel. The
-students will be able to investigate their research areas much
-more thoroughly, because they will spend more time on the specif-
-ic research areas they are concerned about. Basically, GNU Chess
-"frees up" time in order to get on to more fundamental issues.
-
-We also feel that as other researchers gain trust in the GNU
-Chess project, they will be more likely to release their results
-directly and rapidly, through journal articles, or directly to
-the GNU project, and in fact become contributors and join the
-present list [5]. At the very least, a communal, ever-growing
-program will encourage the few "closeted" researchers to be some-
-what more open in their approach to disseminating advances.
-
-In whatever form it takes, the progress toward elaboration of
-machine chess is ongoing, and we hope that GNU chess will be
-helpful to the community. Copies of GNU Chess source and "book",
-as well as additional experimental code are available from the
-Free Software Foundation [3] or the author [6].
-
-
-[1] The GNU Manifesto, Richard Stallman, Free Software Foundation, Inc.
-
-[2] University of Southern California, Information Sciences Institute.
-
diff --git a/gnu/games/chess/DOCUMENTATION/CHANGES b/gnu/games/chess/DOCUMENTATION/CHANGES
deleted file mode 100644
index 9866075..0000000
--- a/gnu/games/chess/DOCUMENTATION/CHANGES
+++ /dev/null
@@ -1,362 +0,0 @@
- GNU CHESS HISTORY
- (#include "../version.h")
-
-August 1, 1989 -- Jay Scott
-He proofread the opening book and made
-corrections.
-
-June 21, 1989 -- Hes @log-se.sv
-He contributed new move generation routines (move.c move.h) to speedup
-move generation and the overall program, by about 15-30%
-
-June 9, 1989 -- Tim Radzy (unet!nplab4!radz@ames.arc.nasa.gov)
-He fixed a bug in xchess/board.c. In a post-game new-game situation,
-castling wouldn't be permitted under circumstances. Tim made
-it possible to castle again.
-
-May 12, 1989 -- Joe Garbarini (garbarini%kegger@circus.llnl.gov)
-Recommended changes to documentation vis a vis chesstool usage.
-
-May 5, 1989 -- Jouko Holopainen (jhol@tolsun.oulu.fi)
-Wrote code to support underpromotion.
-Changed interface to accept ECO/Informator style moves.
-
-April 30, 1989 -- Various GNU contributors
-setlinebuf() modification for xchess/chesstool.
-check for zero division in time printout.
-
-January 17, 1989 -- Anders Thulin
-Provided extensive addition to the opening book for his
-favorite opening the Vienna Game. This was drawn from ECO.
-
-November 23, 1988 -- Stuart Cracraft
-Installed new version of Xchess that is better debugged, works on
-the next version of X. Thanks to Wayne Christopher and Arturo Perez.
-
-August 28, 1988 -- Stuart Cracraft
-Removed a sacrifice line from the Giuoco Piano entry in the opening
-book; the program didn't seem to like the positions it got from this line.
-
-December 30, 1987 -- John Stanback
-Wrote a short blurb on the heuristics contained in GNU Chess. It resides
-in the subdirectory DOCUMENTATION as the file HEURISTICS.
-
-December 17, 1987 -- John Stanback
-Modified criteria for positional evaluation in quiescence search
-to include positions in which the estimated score lies within
-the alpha-beta window; fixed a bug in the king proximity to pawns heuristic;
-fixed a bug involving passed pawn heuristics;
-
-December 16, 1987 -- Stuart Cracraft
-Added automatic 'list' upon exit (both in display, non-display, and
-chesstool mode); command-line setting of tournament time controls
-bug fixed.
-
-December 14, 1987 -- John Stanback
-GNU defeated the commercial product 'Fidelity Excellence' 5.5-4.5 in
-a 10-game match. It was running at about 500 nodes per second (typical
-of its speed on a VAX 8650) and this would indicate its strength
-would be about USCF 1875-1900.
-
-December 4, 1987 -- John Stanback
-Man page added. Command line arguments now specify regular clock
-settings if so desired (useful for SUN players). Thinking
-on opponent's time is now disabled by default. Estimated
-rating is 1850 at 500 nodes per second.
-
-October 20, 1987 -- Stuart Cracraft
-Fixed GNU/SUN interaction. Chesstool and its features now
-seem to fully work.
-
-October 5, 1987 -- Ken Thompson
-GNU beat Belle (actually drew due to a bug, but
-Ken kept GNU playing through to the win) while
-running on a Cray XMP-48. In this 3-1 time handicap game
-Belle outsearched Cray GNU by 10-1 (even with the handicap).
-
-September 26, 1987 -- John Stanback at HP
-Hash table functioning. Thinking on opponent's
-time functioning.
-
-August 20, 1987 -- Mike Meyer at Berkeley
-Mike ran GNU Chess on a Cray 1 supercomputer.
-The system was very heavily loaded, so the
-program was not as speedy as with the Cray below.
-
-August 16, 1987 -- David Goldberg at SUN
-He added "chesstool" support so that this
-version of GNU Chess can run under the
-display manager "chesstool".
-
-August 15, 1987 -- John Stanback at HP
-Hash tables, more heuristics, a modified
-search which is more efficient. He also
-discovered a bug in the piece-exchanger. This
-would cause the program to exchange pieces suboptimally.
-With this fix, the program should play much
-more strongly.
-
-August 13, 1987 -- Ken Thompson at Bell Labs
-Ken ran GNU Chess on a Cray XMP supercomputer
- (among other processors). The program got
- about 3000-4000 chess positions per second
- which is comprable to today's fastest bit-slice
- commercial machines. Also, he had GNU Chess
- play two games against Belle.
-
-July 19, 1987 -- Jay Scott & John Stanback
- Many positional heuristics have been added.
-
-July 18, 1987 -- Stuart Cracraft
- Improvements have been made to the opening
- book. It is mostly an MCO book, containing
- major variations from many of the major openings
- and particularly in-depth on Sicilian.
-
-May 11, 1987 -- John Stanback at HP
- He donated his chess program, a fairly mature
- and strong program.
-
-May 1, 1987 -- Stuart Cracraft
- He added several bug fixes various people
- had reported. He also changed makemove() so that
- the calling syntax is makemove(movelist,index,board)
- rather than makemove(move,board). Having the latter
- tickled a bug in at least one manufacturer's C-compiler,
- so rather than write fancy code, we simplified it.
-
-April 25, 1987-- Jim Aspnes at MIT
-He added all sorts of useful capabilities,
-including positional evaluation in the tree
-search using a table-driven algorithm,
-modifying transposition table code in order
-to work properly, though it doesn't improve
-speed too much, checkmates/stalemates detected
-in the search, en passant captures allowed,
-detect repeated positions, iterative deepening,
-quicker quiescence search, tournament time controls,
-sqattacked sped up by a factor of 4, compile-time
-debugging options.
-
-January 2, 1987 -- Stuart Cracraft
- He added a few more Tal games to the collection.
-
-January 2, 1987 -- Jim Aspnes at MIT
- He contributed MCO variations for the Catalan,
- Queen's Indian, and Reti openings.
-
-December 29, 1986 -- Jim Aspnes at MIT
- He contributed all MCO variations of the Najdorf
- to the opening book. He also contributed a LISP
- macro (written in GNU Emacs Lisp) to convert
- xchess game formats to GNU Chess opening book
- format.
-
-December 14, 1986 -- Ken Thompson at Bell Labs
- He contributed almost 200 games by Tal to
- our collection of Tal-games, bringing the
- total number of Tal positions in the book
- to 10,692. Total book positions now 13,207.
- These reside in bookin, bookin.bdg, bookin.tal.
- Note that presently, only bookin and bookin.tal
- can be used. The new Tal positions came in a
- slightly different format, which we have chosen
- to adopt as our standard format. All book
- games in bookin and bookin.bdg will gradually
- change into the new standard format.
-
-December 11, 1986 -- Stuart Cracraft
- Added "averages" for node-count per move,
- cpu per move, rate per move to list_history
- and write_history.
- New version of Xchess installed.
- Started typing in Tal games into "bookin.tal".
- Added "total book positions" printout to "book"
- and "enter" statistics printout.
-
-December 10, 1986 -- Stuart Cracraft
- Implemented aspiration search in normal
- alpha-beta search. Speedups of 3% to 40%
- have been noticed in most positions.
- Occasionally a slower search will result,
- but it is thought these are worth the
- usual speedups.
-
-December 9, 1986 -- Stuart Cracraft
- Fixed minor bug in write_history()
- Added another Tal game, 2nd game of 1st world
- championship match with Botvinnik, a Benoni.
-
-December 9, 1986 -- Stuart Cracraft
- Enhanced parallelism. All parallel processors
- now communicate via a shared data file and
- are kept running (in idle loops watching the
- shared data file). This saves us a few seconds
- on each move since the 'rsh' need not be invoked
- more than once (at the beginning). Since the
- shared data file is now implemented, we will
- next work towards a "parallel anarchy" in which
- any processor can use any other processor in
- order to reduce its search. The current scheme
- with the program being only as fast as its slowest
- processor, is quite inefficient.
-
-December 1, 1986 -- Jim Aspnes at MIT
- Added a couple of Master games from
- Modern Chess Openings 12 (a Fischer game,
- and a Matanovic game).
-
-November 30, 1986 -- Stuart Cracraft
- Added parallelism. Can now handle multiple
- processors (sharing same disk). Later we will
- add the capability to use processors not sharing
- the same disk. Modified README and MAN-PAGE.
-
-November 26, 1986 -- Stuart Cracraft
- Fixed a few bugs in book-mailing mechanism.
- Fixed a bug regarding situations where only
- one move is available.
- Fixed a bug in read_history() that caused
- Black queenside castles to be mishandled.
-
-November 25, 1986 -- Stuart Cracraft
- Added two pawn heuristics. Reward pawns moving into
- a phalanx of pawns. A phalanx is two or more
- horizontally-connected pawns. Likewise, penalize
- pawns leaving a phalanx of pawns. The penalty for
- leaving is a little more than the reward for
- entering.
-
-November 24, 1986 -- Stuart Cracraft
- A user reported an unbelievable bug. Investigation
- of this bug led to the discovery that GNU Chess was
- not picking the move judged best by the tree search
- in all cases. This resulted in the bug showing
- itself which further showed that the program was
- selecting an inferior move. This may result in an
- improvement to the program's play.
-
-November 24, 1986 -- Stuart Cracraft
- Added two heuristics. Penalize king moves if
- the king hasn't castled yet. Also, penalize pawn
- moves which produce doubled pawns. Should
- probably have something for isolated pawns
- too.
-
-November 23, 1986 -- Wayne Christopher at Berkeley
- New version of X chess display front-end.
- Fixed bugs include multiple pieces, runs
- on SUNS & Bobcats, loads saved games.
-
-November 23, 1986 -- Stuart Cracraft
- Cleaned up some minor bugs regarding history.
- Added "Illegal command" error message at Wayne's
- request.
-
-November 22, 1986 -- David Goldberg at SUN Microsystems
- He complained that GNU Chess was memory-hungry.
- A few minor modifications to hash.c reduced
- uninitialized data space 87% and text space
- 12%. This should make it easier for GNU Chess
- to run on small computers.
-
-November 22, 1986 -- Stuart Cracraft
- "read" command was working, but needed
- additional tweaking so that history
- array would be printed by list_history().
-
-November 19, 1986 -- Stuart Cracraft
- Added "read" command which reads a history
- file (game listing) and restores the board
- to as if the person was still playing that.
- particular game. Generally cleaned up
- history mechanism, made it more orthogonal.
- Revised README. Added doc to MAN-PAGE.
-
-November 16, 1986 -- Stuart Cracraft
- More opening book bugs found and fixed.
- Added capability to accept abbreviated-algebraic notation
- for entering "book" games from files.
- Added approximately 2500 new positions to
- opening book from games involving the
- opening called Blackmar-Diemer Gambit,
- a hoary line developed by Diemer in
- Germany years ago.
-
-November 15, 1986 -- Wayne Christopher at Berkeley
- He modified the move generator, resulting in
- a 28% speedup.
-
-November 14, 1986 -- Stuart Cracraft
- He documented a lot of the GNU Chess modules
- with brief comments for each function. More
- extensive internal documentation may go in
- later.
-
-November 14, 1986 -- Wayne Christopher at Berkeley
- He created the Xchess interface for
- GNU Chess to have windowing with X windows.
-
-November 14, 1986 -- Stuart Cracraft
- He added a "randomization" feature to
- the opening book. This will cause the
- program to select randomly from alternate
- variations whenever -DBEST is removed
- from Makefile's CFLAGS. If this is not
- removed, the opening play selects the
- first move found in the book as it appears
- "in order" in the human-readable book.
-
-November 14, 1986 -- David Goldberg at SUN Microsystems
- He responded to a query about dbm(3) which
- eventually resulted in the fixing of a subtle
- bug in the book code which was causing the
- program to sometimes hash to the incorrect
- address and thereby produce a book move which
- didn't even exist in the book. Thanks David!
-
-November 14, 1986 -- Stuart Cracraft
- He added the "oboard" routine in util.c. This
- is the reverse of the already extant "iboard"
- (same module). These two routines translate
- between GNU Chess internal format and
- Forsythe notation.
-
-November 10, 1986 -- Stuart Cracraft
- He added the "enter" command. This causes
- the current game to be entered in the book.
- Then, GNU Chess tries to mail this new entry
- to the book maintainers (for inclusion in
- the master copy of the book).
-
-November 9, 1986 -- Stuart Cracraft
-He added code for an opening book. MAN-PAGE
-and README were modified accordingly.
-
-November 8, 1986 -- Stuart Cracraft
-Checks and mates are now noticed at ply-1.
-This is a more complete fix to the Oct 31 fix.
-
-October 31, 1986 -- Stuart Cracraft
-First attempt at fix to bug which causes
-program to check human's king when program
-itself is in check.
-
-October 31, 1986 -- Mly at MIT
-Reported a bug which caused program to crash
-when an illegal human move was played. Fixed.
-Also, program was unable to play as White. Fixed.
-
-October 22, 1986 -- Stuart Cracraft
-Pps now rewards moves which liberate bishops.
-
-October 19, 1986 -- Stuart Cracraft
-Added bitmapper routines to distribution.
-Added version notice.
-
-October 19, 1986 -- David Goldberg at SUN Microsystems
-Interfaced GNU Chess with SUN's chesstool.
-
-October 18, 1986 -- Initial release date.
-
-
diff --git a/gnu/games/chess/DOCUMENTATION/COPYING b/gnu/games/chess/DOCUMENTATION/COPYING
deleted file mode 100644
index 17847b7..0000000
--- a/gnu/games/chess/DOCUMENTATION/COPYING
+++ /dev/null
@@ -1,123 +0,0 @@
- GNU CHESS GENERAL PUBLIC LICENSE
-
- Copyright (C) 1986,1987 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license, but changing it is not allowed.
-
- The license agreements of most software companies keep you at the
-mercy of those companies. By contrast, our general public license is
-intended to give everyone the right to share GNU Chess. To make
-sure that you get the rights we want you to have, we need to make
-restrictions that forbid anyone to deny you these rights or to ask you
-to surrender the rights. Hence this license agreement.
-
- Specifically, we want to make sure that you have the right to give
-away copies of GNU Chess, that you receive source code or else can get it
-if you want it, that you can change GNU Chess or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To make sure that everyone has such rights, we have to forbid you to
-deprive anyone else of these rights. For example, if you distribute
-copies of GNU Chess, you must give the recipients all the rights that you
-have. You must make sure that they, too, receive or can get the
-source code. And you must tell them their rights.
-
- Also, for our own protection, we must make certain that everyone
-finds out that there is no warranty for GNU Chess. If GNU Chess is
-modified by someone else and passed on, we want its recipients to know
-that what they have is not what we distributed, so that any problems
-introduced by others will not reflect on our reputation.
-
- Therefore the Free Software Foundation, Inc. makes the following
-terms which say what you must do to be allowed to distribute or change
-GNU Chess.
-
- COPYING POLICIES
-
- 1. You may copy and distribute verbatim copies of GNU Chess source
-code as you receive it, in any medium, provided that you conspicuously
-and appropriately publish on each file a valid copyright notice
-"Copyright (C) 1986,1987 Free Software Foundation, Inc.", containing the
-year of last change for the file in question; keep intact the notices
-on all files that refer to this License Agreement and to the absence
-of any warranty; and give any other recipients of the GNU Chess
-program a copy of this License Agreement along with the program.
-
- 2. You may modify your copy or copies of GNU Chess source code or
-any portion of it, and copy and distribute such modifications under
-the terms of Paragraph 1 above, provided that you also do the following:
-
- a) cause the modified files to carry prominent notices stating
- who last changed such files and the date of any change; and
-
- b) cause the whole of any work that you distribute or publish,
- that in whole or in part contains or is a derivative of GNU Chess
- or any part thereof, to be freely distributed
- and licensed to all third parties on terms identical to those
- contained in this License Agreement (except that you may choose
- to grant more extensive warranty protection to third parties,
- at your option).
-
- c) if the modified program serves as a text editor, cause it
- when started running in the simplest and usual way, to print
- an announcement including a valid copyright notice ("Copyright
- (C)", the year of authorship, and all copyright owners' names),
- saying that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of
- this License Agreement.
-
- 3. You may copy and distribute GNU Chess or any portion of it in
-compiled, executable or object code form under the terms of Paragraphs
-1 and 2 above provided that you do the following:
-
- a) cause each such copy of GNU Chess to be accompanied by the
- corresponding machine-readable source code; or
-
- b) cause each such copy of GNU Chess to be accompanied by a
- written offer, with no time limit, to give any third party
- free (except for a nominal shipping charge) machine readable
- copy of the corresponding source code; or
-
- c) in the case of a recipient of GNU Chess in compiled, executable
- or object code form (without the corresponding source code) you
- shall cause copies you distribute to be accompanied by a copy
- of the written offer of source code which you received along
- with the copy of GNU Chess.
-
- 4. You may not copy, sublicense, distribute or transfer GNU Chess
-except as expressly provided under this License Agreement. Any attempt
-otherwise to copy, sublicense, distribute or transfer GNU Chess is void and
-your rights to use GNU Chess under this License agreement shall be
-automatically terminated. However, parties who have received computer
-software programs from you with this License Agreement will not have
-their licenses terminated so long as such parties remain in full compliance.
-
-Your comments and suggestions about our licensing policies and our
-software are welcome! Please contact the Free Software Foundation, Inc.,
-1000 Mass Ave, Cambridge, MA 02138, or call (617) 876-3296.
-
- NO WARRANTY
-
- BECAUSE GNU CHESS IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
-NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
-WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
-AND/OR OTHER PARTIES PROVIDE GNU CHESS "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-PROGRAM IS WITH YOU. SHOULD THE GNU CHESS PROGRAM PROVE DEFECTIVE,
-YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL FREE SOFTWARE
-FOUNDATION, INC., AND/OR ANY OTHER PARTY WHO MAY MODIFY AND
-REDISTRIBUTE GNU CHESS AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
-DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL,
-INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
-BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A
-FAILURE OF THE PROGRAM TO OPERATE WITH PROGRAMS NOT DISTRIBUTED BY
-FREE SOFTWARE FOUNDATION, INC.) THE PROGRAM, EVEN IF YOU HAVE BEEN
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY
-OTHER PARTY.
-======================================================================
diff --git a/gnu/games/chess/DOCUMENTATION/GENERAL b/gnu/games/chess/DOCUMENTATION/GENERAL
deleted file mode 100644
index aafb7ed..0000000
--- a/gnu/games/chess/DOCUMENTATION/GENERAL
+++ /dev/null
@@ -1,34 +0,0 @@
- GNU Chess
-
-Copyright (C) 1987 Stuart Cracraft
- (Copying permission notice at the end.)
-
-GNU Chess is your program (as long as you follow the copyright and
-licensing rules listed in the file COPYING). Your contributioinspire current and future software
-developers.
-
-This document
--------------
-This document is not meant to be a an introduction to computer chess.
-The following books are excellent introductions and treatises.
-They are listed in order of difficulty:
-
- Computer Chess (2nd edition), by David Welsh and Boris Bazcynski
- The Joy of Computer Chess, by David Levy
- Chess Skill in Man and Machine (2nd edition), by Peter Frey
-
-
-Current Distribution
---------------------
-The most recent distribution of GNU Chess contains the following
-main-level files and directories:
-
- Filename Purpose
- ------------------------------------------------------
- README Pointer to main README below.
- gnuchess.c Most recent version of GNU Chess
- nondsp.c Non-display interface, and chesstool/xchess interface
- uxdsp.c Unix (curses) display interface
- ansidsp.c ANSI display interface
- gnuchess.book Most recent version of opening book
-
diff --git a/gnu/games/chess/DOCUMENTATION/HEURISTICS b/gnu/games/chess/DOCUMENTATION/HEURISTICS
deleted file mode 100644
index 254b344..0000000
--- a/gnu/games/chess/DOCUMENTATION/HEURISTICS
+++ /dev/null
@@ -1,122 +0,0 @@
-This file contains a description of GNU's heuristics.
- Copyright (C) 1986, 1987 Free Software Foundation, Inc.
-
-This file is part of CHESS.
-
-CHESS is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY. No author or distributor
-accepts responsibility to anyone for the consequences of using it
-or for whether it serves any particular purpose or works at all,
-unless he says so in writing. Refer to the CHESS General Public
-License for full details.
-
-Everyone is granted permission to copy, modify and redistribute
-CHESS, but only under the conditions described in the
-CHESS General Public License. A copy of this license is
-supposed to have been given to you along with CHESS so you
-can know your rights and responsibilities. It should be in a
-file named COPYING. Among other things, the copyright notice
-and this notice must be preserved on all copies. */
-
- -- requested by main author
-Heuristic descriptions for CHESS.
-
-Revision: 12-16-87
-
-Copyright (c) 1987 by John Stanback
-
- Here is a brief description of the heuristics used in the positional
- evaluator of the GNU Chess program. Many heuristics are functions of the
- stage of the game which is based on the total non-pawn material remaining
- for both sides.
-
-
-PAWNS
- The material value of a pawn is 100 points. Isolated pawns get a
- penalty depending on which file they occupy:
- (12,14,16,20,20,16,14,12) for files (a..h).
- Doubled pawns (which are not also isolated) get a penalty of 12
- points. Backward pawns (defined simply as not being defended by a
- pawn with the square in front also not defended by a a pawn) are
- penalized 6 points. A 4 point penalty is also invoked for each attack
- by the opponent to a backward pawn and for a backward pawn on a
- half-open file. Pawn Advancement in the centre is given a bonus of
- about 4 points per rank in the opening increasing to about 8 points
- per rank in the ending. Advancement on the edges is given a lower
- bonus. Pawns on the e and d files and on the 2nd rank are given a 10
- point penalty. An additional penalty of 15 points is invoked if these
- pawns are also blocked. Pawns within 2 squares of the king are given
- a 10 point bonus. Passed pawns are given a bonus for increasing rank
- which is a function of stage of the game and of whether the opponent
- blocks or attacks one or more squares in front of the pawn or if the
- opponents king is in the square of the pawn. This bonus ranges from
- about 15 points for a pawn on the second rank up to about 300 points
- for a passed pawn on the 7th rank which can't be stopped from
- queening.
-
-
-KNIGHTS
- The material value of a knight is 330 points. The main heuristic for
- knights is a bonus for proximity to the centre. This varies from 0
- points in the corners to 30 points in the centre. Knights are also
- given a bonus for being within 2 squares of each enemy piece. This
- bonus is a function of the stage of the game, equalling 4 points in
- the end game. A penalty of 1 point per square is given for distance
- from either king. A bonus of up to 8 points (depends on stage) is
- given for knights which can't be driven away by enemy pawns.
-
-
-BISHOPS
- The material value of a bishop is 330 points. Bishops are given a
- bonus as material falls off the board equalling 10 points in the end
- game. Bishops get a bonus for mobility and Xray mobility thru pieces
- but not pawns. This bonus ranges from -4 points for a totally blocked
- bishop up to 18 points for a bishop attacking 12 or more squares.
- Xray attacks on an enemy R,Q,K or any undefended piece are given an 8
- point bonus. Bishops are given a bonus of 14 points if they lie on
- the edge of the board up to 22 points if the lie in the centre. A
- bishop is given a bonus of up to 5 points for each attack to a square
- adjacent to the enemy king.
-
-
-ROOKS
- The material value of a rook is 520 points. Rook mobility is handled
- similiarly to bishops with a bonus of 0 points if blocked up to 20
- points if attacking 12 squares or more. A bonus of 8 points for Xray
- attacks is handled as it is for bishops. Rooks are given a bonus of
- 10 points for occupying a file with no friendly pawns and a bonus of
- 4 points if no enemy pawns lie on that file. After the opening Rooks
- are penalized slightly depending on "taxicab" distance to the enemy
- king.
-
-
-QUEENS
- The material value of a queen is 980 points. The only heuristic for a
- queen is that after the opening it is penalized slightly for
- "taxicab" distance to the enemy king.
-
-
-KINGS
- Kings are given a penalty for proximity to the centre in the opening
- and a bonus for proximity to the centre in the endgame. The penalty
- is about 24 points for being in the centre in the opening with a
- bonus of about 36 points for being in the centre in the endgame.
- Kings are penalized for lying on an open or half-open file or if the
- adjacent file closest to the corner is open or half-open. This
- penalty is up to 23 points in the opening and goes to zero in the end
- game. The King is penalized up to 8 points if there are no pawns
- immediately adjacent. A penalty is invoked depending on the number of
- "safe" checks available by the opponent. This penalty ranges from 6
- points for one such check to 50 points for 4 or more. Depending on
- game stage, Kings are given up to 10 points for castling and a
- penalty of up to 40 points for moving before castling.
-
-
-SPECIAL
- If more than one piece is "hung" (attacked and not defended or
- attacked by an enemy piece of lower value) an extra penalty of 10
- points is invoked for that side and the search may be extended one
- ply. Pinned or trapped pieces are treated similarly. A special mating
- routine is used if one side has only a king and the other has mating
- material.
-
diff --git a/gnu/games/chess/DOCUMENTATION/MAN-PAGE b/gnu/games/chess/DOCUMENTATION/MAN-PAGE
deleted file mode 100644
index bbf0aa4..0000000
--- a/gnu/games/chess/DOCUMENTATION/MAN-PAGE
+++ /dev/null
@@ -1,161 +0,0 @@
-.TH Chess GNU
-.SH NAME
-Chess \- GNU Chess
-.SH SYNOPSIS
-.B Chess
-[
-.B arg1 arg2
-]
-.SH DESCRIPTION
-.I Chess
-plays a game of chess against the user or it plays against itself.
-.PP
-.I Chess
-has a simple alpha-numeric board display or it can be compiled for
-use with the CHESSTOOL program on a SUN workstation.
-The program gets its opening moves from the file gnuchess.book which
-should be located in the same directory as gnuchess.
-To invoke the prgram, type 'gnuchess' or type 'chesstool gnuchess'
-on a SUN workstation where 'CHESSTOOL' is installed.
-The 'gnuchess' command can be followed by up to 2 command line arguments.
-If one argument is given it determines the programs search time in
-seconds. If two arguments are given, they will be used to set tournament
-time controls with the first argument being the number of moves and the second
-being the total clock time in minutes. Thus, entering 'chess 60 5' will set
-the clocks for 5 minutes (300 seconds) for the first 60 moves.
-If no argument is given the program will prompt the user for level of
-play.
-For use with CHESSTOOL, see the documentation on that program.
-.PP
-Once
-.I Chess
-is invoked, the program will display the board and prompt the user
-for a move. To enter a move, use the notation 'e2e4' where the first
-letter-number pair indicates the origination square
-and the second letter-number pair indicates the destination square.
-An alternative is to use the notation 'nf3' where
-the first letter indicates the piece type (p,n,b,r,q,k).
-To castle, type the origin and destination squares
-of the king just as you would do for a regular move, or type
-"o-o" for kingside castling and "o-o-o" for queenside.
-.SH COMMANDS
-.PP
-In addition to legal moves, the following commands are available as responses.
-.PP
-.I beep
--- causes the program to beep after each move.
-.PP
-.I bd
--- updates the current board position on the display.
-.PP
-.I book
--- turns off use of the opening library.
-.PP
-.I both
--- causes the computer to play both sides of a chess game.
-.PP
-.I black
--- causes the computer to take the black pieces with the move
-and begin searching.
-.PP
-.I level
--- allows the user to set time controls such as
-60 moves in 5 minutes etc. In tournament mode, the program will
-vary the time it takes for each
-move depending on the situation. If easy mode is disabled (using
-the 'easy' command), the program
-will often respond with its move immediately, saving time on
-its clock for use later on.
-.PP
-.I depth
--- allows the user to change the
-search depth of the program. The maximum depth is 29 ply.
-Normally the depth is set to 29 and the computer terminates
-its search based on elapsed time rather than depth.
-Using the depth command allows setting depth to say
-4 ply and setting response time to a large number such as
-9999 seconds. The program will then search until all moves
-have been examined to a depth of 4 ply (with extensions up
-to 11 additional ply for sequences of checks and captures).
-.PP
-.I easy
--- toggles easy mode (thinking on opponents time)
-on and off. The default is easy mode ON. If easy mode is disabled,
-the user must enter a 'break' or '^C' to get the programs
-attention before entering each move.
-.PP
-.I edit
--- allows the user to set up a board position.
-In this mode, the '#' command will clear the board, the 'c'
-command will toggle piece color, and the '.' command will exit
-setup mode. Pieces are entered by typing a letter (p,n,b,r,q,k) for
-the piece followed by the coordinate. For example "pb3" would
-place a pawn on square b3.
-.PP
-.I force
--- allows the user to enter moves for both
-sides. To get the program to play after a sequence of moves
-has been entered use the 'white' or 'black' commands.
-.PP
-.I get
--- retrieves a game from disk. The program will
-prompt the user for a file name.
-.PP
-.I help
--- displays a short description of the commands.
-.PP
-.I hint
--- causes the program to supply the user with
-its predicted move.
-.PP
-.I list
--- writes the game moves and some statistics
-on search depth, nodes, and time to the file 'chess.lst'.
-.PP
-.I new
--- starts a new game.
-.PP
-.I post
--- causes the program to display the principle
-variation and the score during the search. A score of
-100 is equivalent to a 1 pawn advantage for the computer.
-.PP
-.I random
--- causes the program to randomize its move
-selection slightly.
-.PP
-.I reverse
--- causes the board display to be reversed. That
-is, the white pieces will now appear at the top of the board.
-.PP
-.I quit
--- exits the game.
-.PP
-.I save
--- saves a game to disk. The program will prompt
-the user for a file name.
-.PP
-.I switch
--- causes the program to switch places with
-the opponent and begin searching.
-.PP
-.I undo
--- undoes the last move whether it was the computer's
-or the human's. You may also type "remove". This is equivalent
-to two "undo's" (e.g. retract one move for each side).
-.PP
-.I white
--- causes the computer to take the white pieces
-with the move and begin searching.
-.SH BUGS
-.PP
-Pawn promotion to pieces other than a queen is not allowed.
-En-Passant does not work properly with CHESSTOOOL.
-The transposition table may not work properly in some
-positions so the default is to turn this off.
-.fi
-.SH SEE ALSO
-.nf
-chesstool(6)
-.fi
-
diff --git a/gnu/games/chess/Xchess/COPYING b/gnu/games/chess/Xchess/COPYING
deleted file mode 100644
index 5905c32..0000000
--- a/gnu/games/chess/Xchess/COPYING
+++ /dev/null
@@ -1,124 +0,0 @@
-
- GNU X-CHESS GENERAL PUBLIC LICENSE
-
- Copyright (C) 1986 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license, but changing it is not allowed.
-
- The license agreements of most software companies keep you at the
-mercy of those companies. By contrast, our general public license is
-intended to give everyone the right to share GNU X-Chess. To make
-sure that you get the rights we want you to have, we need to make
-restrictions that forbid anyone to deny you these rights or to ask you
-to surrender the rights. Hence this license agreement.
-
- Specifically, we want to make sure that you have the right to give
-away copies of GNU X-Chess, that you receive source code or else can get it
-if you want it, that you can change GNU X-Chess or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To make sure that everyone has such rights, we have to forbid you to
-deprive anyone else of these rights. For example, if you distribute
-copies of GNU X-Chess, you must give the recipients all the rights that you
-have. You must make sure that they, too, receive or can get the
-source code. And you must tell them their rights.
-
- Also, for our own protection, we must make certain that everyone
-finds out that there is no warranty for GNU X-Chess. If GNU X-Chess is
-modified by someone else and passed on, we want its recipients to know
-that what they have is not what we distributed, so that any problems
-introduced by others will not reflect on our reputation.
-
- Therefore the Free Software Foundation, Inc. makes the following
-terms which say what you must do to be allowed to distribute or change
-GNU X-Chess.
-
- COPYING POLICIES
-
- 1. You may copy and distribute verbatim copies of GNU X-Chess source
-code as you receive it, in any medium, provided that you conspicuously
-and appropriately publish on each file a valid copyright notice
-"Copyright (C) 1986 Free Software Foundation, Inc.", containing the
-year of last change for the file in question; keep intact the notices
-on all files that refer to this License Agreement and to the absence
-of any warranty; and give any other recipients of the GNU X-Chess
-program a copy of this License Agreement along with the program.
-
- 2. You may modify your copy or copies of GNU X-Chess source code or
-any portion of it, and copy and distribute such modifications under
-the terms of Paragraph 1 above, provided that you also do the following:
-
- a) cause the modified files to carry prominent notices stating
- who last changed such files and the date of any change; and
-
- b) cause the whole of any work that you distribute or publish,
- that in whole or in part contains or is a derivative of GNU X-Chess
- or any part thereof, to be freely distributed
- and licensed to all third parties on terms identical to those
- contained in this License Agreement (except that you may choose
- to grant more extensive warranty protection to third parties,
- at your option).
-
- c) if the modified program serves as a text editor, cause it
- when started running in the simplest and usual way, to print
- an announcement including a valid copyright notice ("Copyright
- (C)", the year of authorship, and all copyright owners' names),
- saying that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of
- this License Agreement.
-
- 3. You may copy and distribute GNU X-Chess or any portion of it in
-compiled, executable or object code form under the terms of Paragraphs
-1 and 2 above provided that you do the following:
-
- a) cause each such copy of GNU X-Chess to be accompanied by the
- corresponding machine-readable source code; or
-
- b) cause each such copy of GNU X-Chess to be accompanied by a
- written offer, with no time limit, to give any third party
- free (except for a nominal shipping charge) machine readable
- copy of the corresponding source code; or
-
- c) in the case of a recipient of GNU X-Chess in compiled, executable
- or object code form (without the corresponding source code) you
- shall cause copies you distribute to be accompanied by a copy
- of the written offer of source code which you received along
- with the copy of GNU X-Chess.
-
- 4. You may not copy, sublicense, distribute or transfer GNU X-Chess
-except as expressly provided under this License Agreement. Any attempt
-otherwise to copy, sublicense, distribute or transfer GNU X-Chess is void and
-your rights to use GNU X-Chess under this License agreement shall be
-automatically terminated. However, parties who have received computer
-software programs from you with this License Agreement will not have
-their licenses terminated so long as such parties remain in full compliance.
-
-Your comments and suggestions about our licensing policies and our
-software are welcome! Please contact the Free Software Foundation, Inc.,
-1000 Mass Ave, Cambridge, MA 02138, or call (617) 876-3296.
-
- NO WARRANTY
-
- BECAUSE GNU X-CHESS IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
-NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
-WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
-AND/OR OTHER PARTIES PROVIDE GNU X-CHESS "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-PROGRAM IS WITH YOU. SHOULD THE GNU X-CHESS PROGRAM PROVE DEFECTIVE,
-YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL FREE SOFTWARE
-FOUNDATION, INC., AND/OR ANY OTHER PARTY WHO MAY MODIFY AND
-REDISTRIBUTE GNU X-CHESS AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
-DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL,
-INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
-BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A
-FAILURE OF THE PROGRAM TO OPERATE WITH PROGRAMS NOT DISTRIBUTED BY
-FREE SOFTWARE FOUNDATION, INC.) THE PROGRAM, EVEN IF YOU HAVE BEEN
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY
-OTHER PARTY.
-======================================================================
diff --git a/gnu/games/chess/Xchess/ScrollText b/gnu/games/chess/Xchess/ScrollText
deleted file mode 100644
index 782a54f..0000000
--- a/gnu/games/chess/Xchess/ScrollText
+++ /dev/null
@@ -1,34 +0,0 @@
-Subject: File: scrollText.h
-
-/*
- * Scrollable Text Window Header File
- *
- * David Harrison
- * University of California, Berkeley
- * 1986
- *
- * This file contains definitions for a scrollable text window
- * with scroll bar support.
- */
-
-int TxtGrab();
- /* Take hold of a previously created window */
-
-#define TXT_NO_COLOR -1
-
-int TxtAddFont();
- /* Loads a new font for use later */
-int TxtWinP();
- /* Returns non-zero value if the window is text window */
-int TxtClear();
- /* Clears text window and resets text buffer */
-
-int TxtWriteStr();
- /* Writes a string to window with immediate update */
-int TxtJamStr();
- /* Write a string without causing update to screen */
-
-int TxtRepaint();
- /* Repaints entire scrollable text window */
-int TxtFilter();
- /* Handles events related to text window */
diff --git a/gnu/games/chess/Xchess/bishop.bitmap b/gnu/games/chess/Xchess/bishop.bitmap
deleted file mode 100644
index dc068dd..0000000
--- a/gnu/games/chess/Xchess/bishop.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define bishop_width 80
-#define bishop_height 80
-static char bishop_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f,
- 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f, 0x0f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f, 0x0f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x0f, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x9f,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x10, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0xff, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
- 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x23, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x67, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0xff, 0xf8, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0x1f, 0xc0, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0xc0,
- 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0xc0, 0x5f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xf8, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xf8,
- 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xf8, 0x7f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfe, 0xfd, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xf8,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x70, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x70, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfa, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xfd, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f,
- 0xfc, 0xfd, 0xc1, 0xff, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xfd,
- 0xff, 0xff, 0x07, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0xc0, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x80,
- 0x0f, 0xf0, 0x0f, 0xc0, 0x7f, 0x00, 0x1f, 0x00, 0x00, 0xc0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/bishop_mask.bitmap b/gnu/games/chess/Xchess/bishop_mask.bitmap
deleted file mode 100644
index ca17bb3..0000000
--- a/gnu/games/chess/Xchess/bishop_mask.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define bishop_mask_width 80
-#define bishop_mask_height 80
-static char bishop_mask_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xdf, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf,
- 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf, 0x1f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf, 0x1f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x3f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xc0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff,
- 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x7f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff,
- 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0x3f, 0xfc, 0xff, 0xe3, 0xff, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x01, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x01,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x01, 0x00, 0xe0,
- 0xff, 0xff, 0x7f, 0xf8, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0x1f, 0xf8,
- 0x1f, 0xe0, 0xff, 0x80, 0xff, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/bishop_outline.bitmap b/gnu/games/chess/Xchess/bishop_outline.bitmap
deleted file mode 100644
index 9772328..0000000
--- a/gnu/games/chess/Xchess/bishop_outline.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define bishop_outline_width 80
-#define bishop_outline_height 80
-static char bishop_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8d,
- 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x88, 0x08, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8d, 0x0d, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x0f, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x98,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x10, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x18, 0xc0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0c, 0x80, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80,
- 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x66, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0x01, 0x05, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xe0, 0x3d, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x20,
- 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xe0, 0x3d, 0x50, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x05, 0x70, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x00, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x05,
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x05, 0x40, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xc0, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
- 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x30, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
- 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8d, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8d, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f,
- 0x0c, 0x85, 0xc1, 0xff, 0x01, 0x00, 0x00, 0x00, 0x0e, 0xf0, 0x87, 0x0d,
- 0x7f, 0x00, 0x07, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x08, 0x00, 0x00,
- 0x3c, 0x00, 0x00, 0x70, 0x00, 0x00, 0xe0, 0x18, 0x00, 0x00, 0xe0, 0x00,
- 0x00, 0xc0, 0xf8, 0x1f, 0x38, 0x70, 0xc0, 0xff, 0x31, 0x00, 0x00, 0x80,
- 0x0f, 0xf0, 0x0f, 0xc0, 0x7f, 0x00, 0x1f, 0x00, 0x00, 0xc0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/bishop_small.bitmap b/gnu/games/chess/Xchess/bishop_small.bitmap
deleted file mode 100644
index 5525ecd..0000000
--- a/gnu/games/chess/Xchess/bishop_small.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define bishop_small_width 32
-#define bishop_small_height 32
-static char bishop_small_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x70, 0x1c, 0x00,
- 0x00, 0x70, 0x1c, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x60, 0x16, 0x00,
- 0x00, 0x60, 0x22, 0x00, 0x00, 0xf0, 0x23, 0x00, 0x00, 0xf0, 0x21, 0x00,
- 0x00, 0xf8, 0x21, 0x00, 0x00, 0xf8, 0x23, 0x00, 0x00, 0xf8, 0x23, 0x00,
- 0x00, 0xf8, 0x27, 0x00, 0x00, 0x38, 0x27, 0x00, 0x00, 0x3c, 0x2f, 0x00,
- 0x00, 0x0c, 0x2c, 0x00, 0x00, 0x0e, 0x3c, 0x00, 0x00, 0x3e, 0x3f, 0x00,
- 0x00, 0x3e, 0x3f, 0x00, 0x00, 0x3e, 0x3f, 0x00, 0x00, 0x3e, 0x3f, 0x00,
- 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xfe, 0x7f, 0x00,
- 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xfe, 0x7f, 0x00,
- 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0xe0, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/bishop_small_outline.bitmap b/gnu/games/chess/Xchess/bishop_small_outline.bitmap
deleted file mode 100644
index 8d29a81..0000000
--- a/gnu/games/chess/Xchess/bishop_small_outline.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define bishop_small_outline_width 32
-#define bishop_small_outline_height 32
-static char bishop_small_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x50, 0x14, 0x00,
- 0x00, 0x70, 0x1c, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x60, 0x16, 0x00,
- 0x00, 0x60, 0x22, 0x00, 0x00, 0xf0, 0x23, 0x00, 0x00, 0x10, 0x21, 0x00,
- 0x00, 0x18, 0x21, 0x00, 0x00, 0x08, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00,
- 0x00, 0x08, 0x26, 0x00, 0x00, 0x08, 0x24, 0x00, 0x00, 0xcc, 0x2c, 0x00,
- 0x00, 0xc4, 0x28, 0x00, 0x00, 0xf6, 0x3b, 0x00, 0x00, 0xf2, 0x23, 0x00,
- 0x00, 0xc2, 0x20, 0x00, 0x00, 0xc2, 0x20, 0x00, 0x00, 0xc2, 0x20, 0x00,
- 0x00, 0xc2, 0x60, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00,
- 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00,
- 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0xe0, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/king.bitmap b/gnu/games/chess/Xchess/king.bitmap
deleted file mode 100644
index dd9178a..0000000
--- a/gnu/games/chess/Xchess/king.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define king_width 80
-#define king_height 80
-static char king_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x30, 0x18, 0x00, 0xfc, 0x1f, 0x00,
- 0x00, 0xfe, 0x7f, 0x00, 0xb8, 0x3b, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff,
- 0xff, 0x00, 0xb8, 0x3b, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x03,
- 0xb8, 0x3b, 0xe0, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0x0f, 0xb8, 0x3b,
- 0xf0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x1f, 0xb8, 0x3b, 0xf8, 0xff,
- 0xf8, 0x07, 0xe0, 0x1f, 0xc0, 0x3f, 0xb8, 0x3b, 0xfc, 0x07, 0xe2, 0x07,
- 0xf0, 0xcf, 0x9f, 0x7f, 0x30, 0x18, 0xfe, 0xf3, 0xcf, 0x0f, 0xf0, 0xe7,
- 0x3f, 0xfe, 0xf0, 0x1f, 0x7e, 0xfc, 0xdf, 0x0f, 0xf0, 0xf3, 0xff, 0xfc,
- 0xf1, 0x1f, 0x3f, 0xff, 0x9f, 0x0f, 0xf8, 0xfb, 0xff, 0xfd, 0xf3, 0x9f,
- 0xbf, 0xff, 0xbf, 0x1f, 0xf8, 0xf9, 0xff, 0xf9, 0xe3, 0x8f, 0xdf, 0xff,
- 0x3f, 0x1f, 0xf8, 0xfd, 0xff, 0xf3, 0xef, 0xcf, 0xcf, 0xff, 0x7f, 0x1f,
- 0xf8, 0xfd, 0xff, 0xe7, 0xef, 0xef, 0xef, 0xff, 0x7f, 0x1f, 0xfc, 0xfd,
- 0xff, 0xcf, 0xff, 0xff, 0xe7, 0x3f, 0x7c, 0x3f, 0xfc, 0x3c, 0xfc, 0xdf,
- 0xff, 0xfe, 0xf3, 0x3d, 0x7c, 0x3f, 0xfc, 0x3e, 0xfc, 0x9e, 0x7f, 0xfc,
- 0xf9, 0x39, 0x7c, 0x3f, 0xfc, 0x3e, 0x7c, 0xbe, 0x3f, 0xf8, 0xf9, 0x3b,
- 0x7c, 0x3f, 0xfc, 0x3e, 0x78, 0x3f, 0x7f, 0xfc, 0xfc, 0x3b, 0x7f, 0x3f,
- 0xfc, 0xfe, 0x7b, 0x7f, 0xff, 0xfe, 0xfe, 0x9b, 0x7f, 0x3f, 0xf8, 0xfe,
- 0xbb, 0x7f, 0xfe, 0x7f, 0xfe, 0xdb, 0x79, 0x1f, 0xf8, 0xfe, 0xb3, 0xff,
- 0xfe, 0x7f, 0xff, 0xcb, 0x7c, 0x1f, 0xf8, 0x9e, 0xb7, 0xff, 0xfe, 0x7f,
- 0xff, 0x2b, 0x3e, 0x1f, 0xf8, 0x3e, 0xa6, 0xff, 0xfc, 0x7f, 0xff, 0xa3,
- 0xbf, 0x1f, 0xf8, 0xfe, 0xa8, 0xff, 0xfd, 0x3e, 0xff, 0xd3, 0xbf, 0x1f,
- 0xf8, 0xfd, 0x83, 0xff, 0x7d, 0xbc, 0xff, 0xc3, 0xbf, 0x1f, 0xf0, 0xfd,
- 0x8f, 0xff, 0x39, 0xb8, 0xff, 0xe3, 0xbf, 0x1f, 0xf0, 0xfd, 0x9f, 0xff,
- 0x7b, 0xbc, 0xff, 0xf1, 0x9f, 0x0f, 0xf0, 0xf9, 0xbf, 0xff, 0xfb, 0xbe,
- 0xff, 0xfd, 0xdf, 0x0f, 0xf0, 0xfb, 0x3f, 0xff, 0xf3, 0x9f, 0xff, 0xfd,
- 0xdf, 0x0f, 0xf0, 0xf3, 0x7f, 0xff, 0xf7, 0xdf, 0xff, 0xfc, 0xdf, 0x0f,
- 0xe0, 0xf7, 0x7f, 0xfe, 0xf7, 0xdf, 0xff, 0xfe, 0xdf, 0x07, 0xe0, 0xf7,
- 0xff, 0xfe, 0xf7, 0xdf, 0x7f, 0xfe, 0xcf, 0x07, 0xe0, 0xe7, 0xff, 0xfe,
- 0xf7, 0xdf, 0x7f, 0xff, 0xef, 0x07, 0xc0, 0xef, 0xff, 0xfc, 0xef, 0xee,
- 0x7f, 0xff, 0xe7, 0x03, 0xc0, 0xcf, 0xff, 0xfd, 0x6f, 0xec, 0x3f, 0xff,
- 0xf7, 0x03, 0x80, 0xdf, 0xff, 0xf9, 0xef, 0xee, 0xbf, 0xff, 0xf3, 0x01,
- 0x80, 0x9f, 0xff, 0xfb, 0xef, 0xef, 0x9f, 0xff, 0xfb, 0x01, 0x00, 0xbf,
- 0xff, 0xfb, 0xef, 0xef, 0xdf, 0xff, 0xf9, 0x00, 0x00, 0x7e, 0xff, 0xf3,
- 0xef, 0xef, 0xdf, 0xff, 0x7e, 0x00, 0x00, 0x7e, 0xfe, 0xff, 0xef, 0xef,
- 0xff, 0x7f, 0x7e, 0x00, 0x00, 0xfc, 0xfc, 0xff, 0xef, 0xef, 0xff, 0x7f,
- 0x3f, 0x00, 0x00, 0xfc, 0xf9, 0xff, 0xef, 0xef, 0xff, 0x3f, 0x1f, 0x00,
- 0x00, 0xf8, 0xfb, 0x03, 0xe0, 0x0f, 0x00, 0x9f, 0x1f, 0x00, 0x00, 0xf0,
- 0x03, 0xf8, 0xff, 0xff, 0x7f, 0xc0, 0x0f, 0x00, 0x00, 0xe0, 0xff, 0xbf,
- 0xf7, 0xde, 0xfb, 0xff, 0x07, 0x00, 0x00, 0xc0, 0xff, 0x1d, 0x63, 0x8c,
- 0x71, 0xff, 0x03, 0x00, 0x00, 0x80, 0xef, 0xb8, 0xf7, 0xde, 0x3b, 0xee,
- 0x01, 0x00, 0x00, 0x00, 0xc7, 0xfd, 0xff, 0xff, 0x7f, 0xc7, 0x00, 0x00,
- 0x00, 0x00, 0xee, 0xff, 0x00, 0x00, 0xfc, 0x6f, 0x00, 0x00, 0x00, 0x00,
- 0xfe, 0x03, 0xfe, 0xff, 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf8,
- 0x7f, 0xfc, 0x7f, 0x60, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x1f, 0xf0,
- 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xff, 0x07, 0xc0, 0xff, 0x63,
- 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x1f, 0xf0, 0xff, 0x60, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0xfc, 0x7f, 0xfc, 0x3f, 0x60, 0x00, 0x00, 0x00, 0x00,
- 0x06, 0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xff,
- 0x00, 0x00, 0xfc, 0x63, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0xfe, 0xff,
- 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf8, 0xff, 0xff, 0x7f, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/king_mask.bitmap b/gnu/games/chess/Xchess/king_mask.bitmap
deleted file mode 100644
index e1bb523..0000000
--- a/gnu/games/chess/Xchess/king_mask.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define king_mask_width 80
-#define king_mask_height 80
-static char king_mask_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xfe,
- 0x3f, 0x00, 0x00, 0xff, 0xff, 0x00, 0xfc, 0x3f, 0x80, 0xff, 0x7f, 0x00,
- 0x80, 0xff, 0xff, 0x01, 0xfc, 0x7f, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff,
- 0xff, 0x07, 0xfc, 0x7f, 0xe0, 0xff, 0xff, 0x01, 0xe0, 0xff, 0xff, 0x1f,
- 0xfc, 0x7f, 0xf8, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x3f, 0xfc, 0x7f,
- 0xfc, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0x7f, 0xfc, 0x7f, 0xfe, 0xff,
- 0xff, 0x0f, 0xf8, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0x1f,
- 0xf8, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
- 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
- 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x1f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x07, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
- 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x03, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
- 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/king_outline.bitmap b/gnu/games/chess/Xchess/king_outline.bitmap
deleted file mode 100644
index 173651c..0000000
--- a/gnu/games/chess/Xchess/king_outline.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define king_outline_width 80
-#define king_outline_height 80
-static char king_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3c,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x0c, 0x60, 0x00, 0xfc, 0x1f, 0x00,
- 0x00, 0x0e, 0x70, 0x00, 0x84, 0x43, 0x00, 0x07, 0x70, 0x00, 0x00, 0x03,
- 0xc0, 0x00, 0xc4, 0x46, 0x80, 0x01, 0xc0, 0x00, 0x80, 0x01, 0x80, 0x03,
- 0x44, 0x44, 0xe0, 0x00, 0x80, 0x01, 0xc0, 0x00, 0x00, 0x0e, 0x44, 0x44,
- 0x30, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x18, 0x44, 0x44, 0x18, 0x00,
- 0x07, 0x06, 0x20, 0xe0, 0x3f, 0x30, 0xc4, 0x46, 0x0c, 0xf8, 0x1d, 0x04,
- 0x30, 0x30, 0x60, 0x60, 0x8c, 0x63, 0x06, 0x0c, 0x30, 0x0c, 0x10, 0x18,
- 0xc0, 0xc1, 0x08, 0x20, 0x82, 0x03, 0x20, 0x0c, 0x10, 0x0c, 0x00, 0x83,
- 0x09, 0x20, 0xc3, 0x00, 0x60, 0x08, 0x18, 0x04, 0x00, 0x02, 0x8b, 0xa3,
- 0x41, 0x00, 0x40, 0x18, 0x08, 0x06, 0x00, 0x06, 0x7a, 0xb6, 0x20, 0x00,
- 0xc0, 0x10, 0x08, 0x02, 0x00, 0x0c, 0x3e, 0x7c, 0x30, 0x00, 0x80, 0x10,
- 0x08, 0x02, 0x00, 0x18, 0x18, 0x18, 0x10, 0x00, 0x80, 0x10, 0x0c, 0x02,
- 0x00, 0x30, 0x00, 0x00, 0x18, 0xc0, 0x83, 0x30, 0x04, 0xc3, 0x03, 0x20,
- 0x00, 0x01, 0x0c, 0xc2, 0x83, 0x20, 0x04, 0xc1, 0x03, 0x61, 0x80, 0x03,
- 0x06, 0xc6, 0x83, 0x20, 0x04, 0xc1, 0x83, 0x41, 0xc0, 0x07, 0x06, 0xc4,
- 0x83, 0x20, 0x04, 0xc1, 0x87, 0xc0, 0x80, 0x03, 0x03, 0xc4, 0x80, 0x20,
- 0x0c, 0x01, 0x84, 0x80, 0x00, 0x01, 0x01, 0x64, 0x80, 0x30, 0x08, 0x01,
- 0x44, 0x80, 0x01, 0x80, 0x01, 0x24, 0x86, 0x10, 0x08, 0x01, 0x4c, 0x00,
- 0x01, 0x80, 0x00, 0x34, 0x83, 0x10, 0x08, 0x61, 0x48, 0x00, 0x01, 0x80,
- 0x00, 0xd4, 0xc1, 0x10, 0x08, 0xc1, 0x59, 0x00, 0x03, 0x80, 0x00, 0x5c,
- 0x40, 0x10, 0x08, 0x01, 0x57, 0x00, 0x02, 0xc1, 0x00, 0x2c, 0x40, 0x10,
- 0x18, 0x02, 0x7c, 0x00, 0x82, 0x43, 0x00, 0x3c, 0x40, 0x18, 0x10, 0x02,
- 0x70, 0x00, 0xc6, 0x47, 0x00, 0x1c, 0x40, 0x18, 0x10, 0x02, 0x60, 0x00,
- 0x84, 0x43, 0x00, 0x0e, 0x60, 0x08, 0x10, 0x06, 0x40, 0x00, 0x04, 0x41,
- 0x00, 0x02, 0x20, 0x08, 0x10, 0x04, 0xc0, 0x00, 0x0c, 0x60, 0x00, 0x02,
- 0x20, 0x0c, 0x30, 0x0c, 0x80, 0x00, 0x08, 0x20, 0x00, 0x03, 0x20, 0x0c,
- 0x20, 0x08, 0x80, 0x01, 0x08, 0x20, 0x00, 0x01, 0x20, 0x04, 0x20, 0x08,
- 0x00, 0x01, 0x08, 0x20, 0x80, 0x01, 0x30, 0x04, 0x60, 0x18, 0x00, 0x01,
- 0x08, 0x20, 0x80, 0x00, 0x10, 0x06, 0x40, 0x10, 0x00, 0x03, 0x10, 0x11,
- 0x80, 0x00, 0x18, 0x02, 0xc0, 0x30, 0x00, 0x02, 0x90, 0x13, 0xc0, 0x00,
- 0x08, 0x03, 0x80, 0x20, 0x00, 0x06, 0x10, 0x11, 0x40, 0x00, 0x04, 0x01,
- 0x80, 0x61, 0x00, 0x04, 0x10, 0x10, 0x60, 0x00, 0x84, 0x01, 0x00, 0x41,
- 0x00, 0x04, 0x10, 0x10, 0x20, 0x00, 0xc6, 0x00, 0x00, 0x83, 0x00, 0x0c,
- 0x10, 0x10, 0x20, 0x00, 0x41, 0x00, 0x00, 0x82, 0x01, 0x00, 0x10, 0x10,
- 0x00, 0x80, 0x61, 0x00, 0x00, 0x06, 0x01, 0x00, 0x10, 0x10, 0x00, 0x80,
- 0x30, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x10, 0x10, 0x00, 0xc0, 0x10, 0x00,
- 0x00, 0x18, 0x02, 0xff, 0x1f, 0xf0, 0xff, 0x60, 0x18, 0x00, 0x00, 0x30,
- 0xfe, 0x01, 0x00, 0x00, 0x80, 0x3f, 0x0c, 0x00, 0x00, 0x20, 0x00, 0x40,
- 0x08, 0x21, 0x04, 0x00, 0x06, 0x00, 0x00, 0xc0, 0x00, 0xe2, 0x9c, 0x73,
- 0x8e, 0x00, 0x03, 0x00, 0x00, 0x80, 0x11, 0x47, 0x08, 0x21, 0xc4, 0x11,
- 0x01, 0x00, 0x00, 0x00, 0x3b, 0x02, 0x00, 0x00, 0x80, 0xb8, 0x00, 0x00,
- 0x00, 0x00, 0x12, 0x00, 0xff, 0xff, 0x03, 0x90, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0xfc, 0x01, 0x00, 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x07,
- 0x80, 0x03, 0x80, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe0, 0x0f,
- 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0xf8, 0x3f, 0x00, 0x5c,
- 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0xe0, 0x0f, 0x00, 0x5f, 0x00, 0x00,
- 0x00, 0x00, 0xfa, 0x03, 0x80, 0x03, 0xc0, 0x5f, 0x00, 0x00, 0x00, 0x00,
- 0xfa, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00,
- 0xff, 0xff, 0x03, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfc, 0x01, 0x00,
- 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x07, 0x00, 0x00, 0x80, 0x5f,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/king_small.bitmap b/gnu/games/chess/Xchess/king_small.bitmap
deleted file mode 100644
index 38bb2b7..0000000
--- a/gnu/games/chess/Xchess/king_small.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define king_small_width 32
-#define king_small_height 32
-static char king_small_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0x00, 0x00, 0x80, 0x9f, 0x00, 0x00, 0x70, 0x20, 0x00,
- 0x00, 0x0c, 0x40, 0x00, 0x00, 0x02, 0x80, 0x01, 0x80, 0x01, 0x00, 0x03,
- 0x40, 0x00, 0x00, 0x06, 0x40, 0x60, 0x30, 0x08, 0x20, 0x60, 0x30, 0x10,
- 0x20, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x80,
- 0x10, 0x00, 0x02, 0x80, 0x10, 0x00, 0x01, 0x80, 0x10, 0x01, 0x01, 0x80,
- 0x10, 0x03, 0x1f, 0x84, 0x10, 0x02, 0x00, 0x84, 0x10, 0x06, 0x00, 0x86,
- 0x20, 0x1c, 0x00, 0x42, 0x20, 0xf0, 0xff, 0x43, 0x20, 0x00, 0x00, 0x40,
- 0x40, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x20, 0x80, 0x01, 0x00, 0x18,
- 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/king_small_outline.bitmap b/gnu/games/chess/Xchess/king_small_outline.bitmap
deleted file mode 100644
index 18d569e..0000000
--- a/gnu/games/chess/Xchess/king_small_outline.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define king_small_outline_width 32
-#define king_small_outline_height 32
-static char king_small_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x90, 0x00, 0x06, 0x10, 0xb1, 0x00,
- 0x22, 0x12, 0xe1, 0x00, 0x24, 0x92, 0x9f, 0x00, 0x40, 0x72, 0xa0, 0x50,
- 0x04, 0x0e, 0x40, 0x50, 0x40, 0x02, 0x80, 0x71, 0xc8, 0x01, 0x00, 0x73,
- 0xd8, 0x00, 0x00, 0x46, 0xd8, 0x60, 0x30, 0x08, 0xa0, 0x60, 0x30, 0x10,
- 0x20, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x80,
- 0x10, 0x00, 0x02, 0x80, 0x10, 0x00, 0x01, 0x80, 0x10, 0x01, 0x01, 0x80,
- 0x10, 0x03, 0x1f, 0x84, 0x10, 0x02, 0x00, 0x84, 0x10, 0x06, 0x00, 0x86,
- 0x20, 0x1c, 0x00, 0x42, 0x20, 0xf0, 0xff, 0x43, 0x20, 0x00, 0x00, 0x40,
- 0x40, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x20, 0x80, 0x01, 0x00, 0x18,
- 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/knight.bitmap b/gnu/games/chess/Xchess/knight.bitmap
deleted file mode 100644
index c5b1de1..0000000
--- a/gnu/games/chess/Xchess/knight.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define knight_width 80
-#define knight_height 80
-static char knight_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
- 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbf, 0xff,
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0xfe, 0x0f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xf8, 0xff, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0x0f, 0xfc, 0xe3, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xe1, 0xf3, 0xcf, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfd,
- 0xff, 0x1f, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0xfe, 0x7f,
- 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0xfe, 0xff, 0xfc, 0x07,
- 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x7f, 0x00, 0x00,
- 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x1f, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0x03, 0x00, 0x00, 0xf0, 0xff, 0xff,
- 0xff, 0xff, 0x9f, 0x3f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff,
- 0x3f, 0xff, 0x07, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0x07, 0x00,
- 0x00, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xfd, 0x01, 0x00, 0x00, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0xff, 0xfb, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0xff, 0xbf, 0xff, 0xf3, 0x03, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x9f,
- 0xff, 0xf7, 0x3f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xef,
- 0x07, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x7f, 0xf3, 0xff, 0xcf, 0x7f, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0x1f, 0xfd, 0xff, 0xdf, 0x07, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0x83, 0xff, 0xf3, 0x9f, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x7f,
- 0x80, 0xff, 0xf9, 0xbf, 0x0f, 0x00, 0xf0, 0xff, 0xff, 0x00, 0x80, 0x7f,
- 0xfc, 0x7f, 0xff, 0x01, 0xf8, 0x3f, 0x7f, 0x00, 0x80, 0x81, 0xff, 0x7f,
- 0x1e, 0x00, 0x18, 0x9f, 0x3f, 0x00, 0xc0, 0xff, 0xff, 0x7f, 0xfe, 0x07,
- 0x98, 0x8f, 0x1f, 0x00, 0xc0, 0xff, 0xcf, 0x7f, 0x3e, 0x00, 0xf8, 0x87,
- 0x0f, 0x00, 0xe0, 0xff, 0xe3, 0xff, 0xfe, 0x07, 0xf0, 0xc3, 0x07, 0x00,
- 0xf0, 0x1f, 0xfc, 0xff, 0x3c, 0x00, 0xf0, 0xe1, 0x03, 0x00, 0xf0, 0xc0,
- 0xff, 0xff, 0xfc, 0x0f, 0x60, 0xe0, 0x01, 0x00, 0xf8, 0xff, 0xff, 0xff,
- 0x7c, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0x0f,
- 0x00, 0x70, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xf9, 0x0f, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0xff, 0xff, 0xf9, 0x0f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x1f,
- 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x01, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x3f, 0x00, 0x00, 0x00, 0xf0,
- 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xf3, 0x01, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x3f,
- 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x00, 0x00,
- 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0x00, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf3, 0x01, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x3f,
- 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf3, 0x01, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x3f,
- 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x00, 0x00,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf3, 0x01, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/knight_mask.bitmap b/gnu/games/chess/Xchess/knight_mask.bitmap
deleted file mode 100644
index 97d288c..0000000
--- a/gnu/games/chess/Xchess/knight_mask.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define knight_mask_width 80
-#define knight_mask_height 80
-static char knight_mask_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x0f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xc0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x7f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf8, 0xff, 0xff, 0xff,
- 0xc7, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xc1, 0xff,
- 0xff, 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0xff,
- 0xff, 0x0f, 0xfc, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xfc, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xdf,
- 0x3f, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xef, 0x1f, 0x00,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xf7, 0x0f, 0x00, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xfb, 0x07, 0x00, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0x1f, 0xf0, 0xf9, 0x03, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x1f,
- 0x00, 0xf8, 0x01, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xf8,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x1f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
- 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xc0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
- 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
- 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
- 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/knight_outline.bitmap b/gnu/games/chess/Xchess/knight_outline.bitmap
deleted file mode 100644
index a1ab938..0000000
--- a/gnu/games/chess/Xchess/knight_outline.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define knight_outline_width 80
-#define knight_outline_height 80
-static char knight_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
- 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf9, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x0f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x80,
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x08, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xf0, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x30, 0x58, 0x07, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x18, 0x4c,
- 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x78, 0x07, 0x00,
- 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x23, 0xe0, 0x01, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,
- 0x00, 0xc0, 0x08, 0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0x00, 0x00, 0x60,
- 0x04, 0x00, 0x00, 0x40, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x30, 0x02, 0x00,
- 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x20,
- 0x00, 0xe0, 0x07, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80,
- 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x07, 0x00,
- 0x00, 0x26, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x13,
- 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x1f, 0x00, 0x00, 0x09, 0x40, 0x00,
- 0x00, 0x18, 0x08, 0x00, 0x02, 0x00, 0x80, 0x05, 0xc0, 0x00, 0x00, 0x0c,
- 0x0c, 0x00, 0x3e, 0x00, 0x80, 0x00, 0x80, 0x00, 0xc0, 0x03, 0x06, 0x00,
- 0x04, 0x00, 0xc0, 0x00, 0x80, 0x01, 0x70, 0x01, 0xc3, 0x00, 0x7c, 0x00,
- 0x60, 0x00, 0x00, 0x03, 0x1e, 0x81, 0x41, 0x00, 0x04, 0x00, 0x20, 0x00,
- 0x00, 0xce, 0x83, 0x61, 0x60, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x80, 0x7f,
- 0x80, 0x1c, 0x30, 0x00, 0x08, 0x00, 0x10, 0xe0, 0xc1, 0x00, 0x80, 0x07,
- 0x10, 0x00, 0xf8, 0x01, 0x18, 0x30, 0x61, 0x00, 0x80, 0x00, 0x08, 0x00,
- 0x10, 0x00, 0x08, 0x98, 0x31, 0x00, 0xc0, 0x00, 0x0c, 0x00, 0xf0, 0x07,
- 0x08, 0x8c, 0x18, 0x00, 0x40, 0x00, 0x03, 0x00, 0x20, 0x00, 0x18, 0x86,
- 0x0c, 0x00, 0x60, 0xc0, 0x01, 0x00, 0xe0, 0x07, 0x10, 0xc3, 0x06, 0x00,
- 0x30, 0x30, 0x00, 0x00, 0x20, 0x00, 0xf0, 0x61, 0x02, 0x00, 0x10, 0x1e,
- 0x00, 0x00, 0xe0, 0x0f, 0x60, 0x30, 0x02, 0x00, 0x98, 0x03, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x10, 0x02, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc0, 0x0f,
- 0x00, 0xb0, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xc0,
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
- 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
- 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x30,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
- 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x20, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/knight_small.bitmap b/gnu/games/chess/Xchess/knight_small.bitmap
deleted file mode 100644
index 77c7451..0000000
--- a/gnu/games/chess/Xchess/knight_small.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define knight_small_width 32
-#define knight_small_height 32
-static char knight_small_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0xee, 0x7f, 0x02,
- 0x00, 0xfe, 0x7f, 0x01, 0x00, 0xff, 0xff, 0x04, 0x00, 0xff, 0xff, 0x02,
- 0x80, 0xff, 0xff, 0x09, 0xc0, 0xfc, 0xff, 0x07, 0xe0, 0xfc, 0xff, 0x11,
- 0xe0, 0xff, 0xff, 0x0d, 0xe0, 0xff, 0xff, 0x03, 0xf0, 0xff, 0xff, 0x3f,
- 0xf0, 0xff, 0xff, 0x03, 0xf0, 0xff, 0xff, 0x7f, 0xf8, 0xff, 0xff, 0x07,
- 0xfc, 0xc7, 0xff, 0x7f, 0xfe, 0xc1, 0xff, 0x07, 0xfa, 0xc1, 0xff, 0x7f,
- 0xce, 0xc0, 0xff, 0x07, 0x6c, 0xc0, 0xff, 0x7f, 0x28, 0xe0, 0xff, 0x07,
- 0x00, 0xe0, 0xff, 0x7f, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0x7f,
- 0x00, 0xf0, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0xf8, 0xff, 0x0f,
- 0x00, 0xf8, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0xff, 0xff, 0x7f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/knight_small_outline.bitmap b/gnu/games/chess/Xchess/knight_small_outline.bitmap
deleted file mode 100644
index c0e738c..0000000
--- a/gnu/games/chess/Xchess/knight_small_outline.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define knight_small_outline_width 32
-#define knight_small_outline_height 32
-static char knight_small_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0xee, 0x7f, 0x02,
- 0x00, 0x3a, 0x40, 0x01, 0x00, 0x03, 0xc0, 0x04, 0x00, 0x01, 0x80, 0x02,
- 0x80, 0x01, 0x80, 0x09, 0xc0, 0x0c, 0x00, 0x07, 0x60, 0x0c, 0x00, 0x11,
- 0x20, 0x00, 0x00, 0x0d, 0x20, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x3e,
- 0x10, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x7e, 0x18, 0x7c, 0x00, 0x04,
- 0x0c, 0x47, 0x00, 0x7c, 0x06, 0x41, 0x00, 0x04, 0xf2, 0x41, 0x00, 0x7c,
- 0xde, 0x40, 0x00, 0x04, 0x6c, 0x40, 0x00, 0x7c, 0x28, 0x60, 0x00, 0x04,
- 0x00, 0x20, 0x00, 0x7c, 0x00, 0x20, 0x00, 0x08, 0x00, 0x30, 0x00, 0x78,
- 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x78, 0x00, 0x18, 0x00, 0x08,
- 0x00, 0x08, 0x00, 0x78, 0x00, 0x0c, 0x00, 0x08, 0x00, 0xff, 0xff, 0x7f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/pawn.bitmap b/gnu/games/chess/Xchess/pawn.bitmap
deleted file mode 100644
index 5c3ff76..0000000
--- a/gnu/games/chess/Xchess/pawn.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define pawn_width 80
-#define pawn_height 80
-static char pawn_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff,
- 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff,
- 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x03, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00,
- 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00,
- 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xfe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/pawn_mask.bitmap b/gnu/games/chess/Xchess/pawn_mask.bitmap
deleted file mode 100644
index 724875c..0000000
--- a/gnu/games/chess/Xchess/pawn_mask.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define pawn_mask_width 80
-#define pawn_mask_height 80
-static char pawn_mask_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff,
- 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
- 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff,
- 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff,
- 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff,
- 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x0f,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/pawn_outline.bitmap b/gnu/games/chess/Xchess/pawn_outline.bitmap
deleted file mode 100644
index 0c4a3a1..0000000
--- a/gnu/games/chess/Xchess/pawn_outline.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define pawn_outline_width 80
-#define pawn_outline_height 80
-static char pawn_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x70,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x20, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
- 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
- 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x30, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x78, 0xc0, 0x81, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xc0, 0x7f, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/pawn_small.bitmap b/gnu/games/chess/Xchess/pawn_small.bitmap
deleted file mode 100644
index 88ff7bb..0000000
--- a/gnu/games/chess/Xchess/pawn_small.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define pawn_small_width 32
-#define pawn_small_height 32
-static char pawn_small_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf0, 0x0f, 0x00,
- 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00,
- 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xf0, 0x0f, 0x00,
- 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x80, 0xff, 0xff, 0x01,
- 0x80, 0xff, 0xff, 0x01, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
- 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
- 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
- 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
- 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xfc, 0x3f, 0x00,
- 0x00, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x0f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/pawn_small_outline.bitmap b/gnu/games/chess/Xchess/pawn_small_outline.bitmap
deleted file mode 100644
index e860f43..0000000
--- a/gnu/games/chess/Xchess/pawn_small_outline.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define pawn_small_outline_width 32
-#define pawn_small_outline_height 32
-static char pawn_small_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x30, 0x0c, 0x00,
- 0x00, 0x18, 0x18, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x08, 0x10, 0x00,
- 0x00, 0x08, 0x10, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x30, 0x0c, 0x00,
- 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00, 0x80, 0x3f, 0xfc, 0x01,
- 0x80, 0x3f, 0xfc, 0x01, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00,
- 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00,
- 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00,
- 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00,
- 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x0c, 0x30, 0x00,
- 0x00, 0x07, 0xe0, 0x00, 0xe0, 0x01, 0x80, 0x07, 0xf0, 0xff, 0xff, 0x0f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/queen.bitmap b/gnu/games/chess/Xchess/queen.bitmap
deleted file mode 100644
index ab3817a..0000000
--- a/gnu/games/chess/Xchess/queen.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define queen_width 80
-#define queen_height 80
-static char queen_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x80, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x80, 0x01, 0x00, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x80, 0x01, 0x80, 0x0f, 0x00, 0x00,
- 0x00, 0x00, 0xf0, 0x01, 0xc0, 0x03, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0x00, 0xc0, 0x03, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0xc0, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x03,
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x03, 0x00, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x03, 0x00, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,
- 0xe0, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0xe0, 0x07,
- 0xc0, 0x03, 0x00, 0x00, 0x1c, 0x00, 0xc0, 0x03, 0xe0, 0x07, 0xc0, 0x03,
- 0x00, 0x00, 0x3e, 0x00, 0xc0, 0x03, 0xe0, 0x07, 0xc0, 0x03, 0x00, 0x0e,
- 0x3e, 0x00, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0x00, 0x1f, 0x3e, 0x00,
- 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0x00, 0x1f, 0x3c, 0x00, 0xc0, 0x07,
- 0xe0, 0x07, 0xe0, 0x03, 0x00, 0x1f, 0x70, 0x00, 0xc0, 0x0f, 0xe0, 0x07,
- 0xf0, 0x03, 0x00, 0x0e, 0x60, 0x00, 0xc0, 0x0f, 0xe0, 0x07, 0xf0, 0x03,
- 0x00, 0x03, 0xe0, 0x00, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x03, 0x80, 0x03,
- 0xc0, 0x01, 0xc0, 0x1f, 0xf0, 0x0f, 0xf8, 0x03, 0x80, 0x01, 0xc0, 0x01,
- 0xc0, 0x1f, 0xf0, 0x0f, 0xf8, 0x03, 0xc0, 0x01, 0xc0, 0x03, 0xc0, 0x1f,
- 0xf0, 0x0f, 0xf8, 0x03, 0xe0, 0x01, 0xc0, 0x07, 0xc0, 0x1f, 0xf0, 0x0f,
- 0xf8, 0x03, 0xe0, 0x01, 0xc0, 0x07, 0xc0, 0x3f, 0xf0, 0x0f, 0xfc, 0x03,
- 0xf0, 0x01, 0xc0, 0x0f, 0xc0, 0x3f, 0xf0, 0x0f, 0xfc, 0x03, 0xf8, 0x01,
- 0x80, 0x1f, 0xc0, 0x3f, 0xf0, 0x0f, 0xfc, 0x03, 0xf8, 0x01, 0x80, 0x1f,
- 0xc0, 0x7f, 0xf0, 0x0f, 0xfe, 0x03, 0xfc, 0x01, 0x80, 0x3f, 0xc0, 0x7f,
- 0xf8, 0x1f, 0xfe, 0x03, 0xfc, 0x00, 0x80, 0x3f, 0xc0, 0x7f, 0xf8, 0x1f,
- 0xfe, 0x03, 0xfe, 0x00, 0x80, 0x7f, 0xc0, 0xff, 0xf8, 0x1f, 0xff, 0x03,
- 0xff, 0x00, 0x80, 0xff, 0xc0, 0xff, 0xf8, 0x1f, 0xff, 0x03, 0xff, 0x00,
- 0x00, 0xff, 0xc0, 0xff, 0xf8, 0x1f, 0xff, 0x83, 0xff, 0x00, 0x00, 0xff,
- 0xc1, 0xff, 0xf9, 0x9f, 0xff, 0x83, 0xff, 0x00, 0x00, 0xff, 0xc3, 0xff,
- 0xf9, 0x9f, 0xff, 0xc3, 0xff, 0x00, 0x00, 0xff, 0xc3, 0xff, 0xf9, 0x9f,
- 0xff, 0xe3, 0x7f, 0x00, 0x00, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xe3,
- 0x7f, 0x00, 0x00, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x7f, 0x00,
- 0x00, 0xfe, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0x00, 0x00, 0xfe,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x7f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x80,
- 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0x03, 0xfc, 0x3f, 0xc0, 0xff,
- 0x1f, 0x00, 0x00, 0xf0, 0x01, 0xf8, 0x7f, 0xfe, 0x1f, 0x80, 0x1f, 0x00,
- 0x00, 0x30, 0xfc, 0xff, 0x1f, 0xf8, 0xff, 0x3f, 0x0c, 0x00, 0x00, 0xe0,
- 0xe7, 0xff, 0x07, 0xe0, 0xff, 0xe7, 0x07, 0x00, 0x00, 0xc0, 0x81, 0xff,
- 0x1f, 0xf8, 0xff, 0x81, 0x03, 0x00, 0x00, 0x80, 0x00, 0xfe, 0x7f, 0xfe,
- 0x7f, 0x00, 0x03, 0x00, 0x00, 0x80, 0x81, 0xff, 0xff, 0xff, 0xff, 0x81,
- 0x01, 0x00, 0x00, 0x00, 0xe7, 0xff, 0x01, 0x80, 0xff, 0xe7, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0x03, 0xfc, 0x3f, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x80,
- 0x01, 0xf8, 0xff, 0xff, 0x1f, 0x80, 0x01, 0x00, 0x00, 0x80, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x01, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x03, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
- 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/queen_mask.bitmap b/gnu/games/chess/Xchess/queen_mask.bitmap
deleted file mode 100644
index 76a5904..0000000
--- a/gnu/games/chess/Xchess/queen_mask.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define queen_mask_width 80
-#define queen_mask_height 80
-static char queen_mask_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x60, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01,
- 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0xc0, 0x03,
- 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0xc0, 0x03, 0xc0, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0xe0, 0x07, 0xc0, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0x03, 0xe0, 0x07, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0x01, 0xe0, 0x07, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01,
- 0xe0, 0x07, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xe0, 0x07,
- 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xe0, 0x07, 0x80, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0xe0, 0x07, 0x80, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0x03, 0xf0, 0x0f, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0x07, 0xf0, 0x0f, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
- 0xf0, 0x0f, 0xc0, 0x07, 0x00, 0x00, 0x7e, 0x00, 0xe0, 0x07, 0xf0, 0x0f,
- 0xe0, 0x07, 0x00, 0x00, 0x7f, 0x00, 0xe0, 0x0f, 0xf0, 0x0f, 0xe0, 0x07,
- 0x00, 0x1f, 0x7f, 0x00, 0xe0, 0x0f, 0xf0, 0x0f, 0xe0, 0x07, 0x80, 0x3f,
- 0x7f, 0x00, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x07, 0x80, 0x3f, 0x7f, 0x00,
- 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x07, 0x80, 0x3f, 0xff, 0x00, 0xe0, 0x1f,
- 0xf0, 0x0f, 0xf0, 0x07, 0x80, 0x3f, 0xfe, 0x00, 0xe0, 0x1f, 0xf0, 0x0f,
- 0xf8, 0x07, 0x80, 0x1f, 0xfc, 0x01, 0xe0, 0x1f, 0xf8, 0x1f, 0xf8, 0x07,
- 0x80, 0x1f, 0xf0, 0x03, 0xe0, 0x3f, 0xf8, 0x1f, 0xf8, 0x07, 0xc0, 0x0f,
- 0xf0, 0x07, 0xe0, 0x3f, 0xf8, 0x1f, 0xfc, 0x07, 0xe0, 0x03, 0xe0, 0x07,
- 0xe0, 0x3f, 0xf8, 0x1f, 0xfc, 0x07, 0xf0, 0x03, 0xe0, 0x0f, 0xe0, 0x7f,
- 0xf8, 0x1f, 0xfc, 0x07, 0xf0, 0x03, 0xe0, 0x1f, 0xe0, 0x7f, 0xf8, 0x1f,
- 0xfc, 0x07, 0xf8, 0x03, 0xe0, 0x1f, 0xe0, 0x7f, 0xf8, 0x1f, 0xfe, 0x07,
- 0xf8, 0x03, 0xe0, 0x3f, 0xe0, 0x7f, 0xf8, 0x1f, 0xfe, 0x07, 0xfc, 0x03,
- 0xe0, 0x3f, 0xe0, 0xff, 0xf8, 0x1f, 0xfe, 0x07, 0xfe, 0x03, 0xc0, 0x7f,
- 0xe0, 0xff, 0xfc, 0x3f, 0xff, 0x07, 0xfe, 0x03, 0xc0, 0xff, 0xe0, 0xff,
- 0xfd, 0x3f, 0xff, 0x07, 0xff, 0x03, 0xc0, 0xff, 0xe1, 0xff, 0xfd, 0xff,
- 0xff, 0x87, 0xff, 0x03, 0xc0, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0x87,
- 0xff, 0x01, 0xc0, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x01,
- 0xc0, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x01, 0x80, 0xff,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0x01, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe7, 0xff, 0x01, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0xff, 0x01, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
- 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x7f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x07, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
- 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xc0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xf0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/queen_outline.bitmap b/gnu/games/chess/Xchess/queen_outline.bitmap
deleted file mode 100644
index 2527216..0000000
--- a/gnu/games/chess/Xchess/queen_outline.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define queen_outline_width 80
-#define queen_outline_height 80
-static char queen_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x80, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x80, 0x01, 0x00, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x80, 0x01, 0x80, 0x0d, 0x00, 0x00,
- 0x00, 0x00, 0xb0, 0x01, 0xc0, 0x03, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0x00, 0x40, 0x02, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x40, 0x02, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x02,
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x02, 0x00, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x02, 0x00, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0x01, 0x40, 0x02, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x01, 0x40, 0x02, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01,
- 0x60, 0x06, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x03, 0x20, 0x04,
- 0xc0, 0x02, 0x00, 0x00, 0x1c, 0x00, 0x40, 0x02, 0x20, 0x04, 0x40, 0x02,
- 0x00, 0x00, 0x36, 0x00, 0x40, 0x02, 0x20, 0x04, 0x40, 0x02, 0x00, 0x0e,
- 0x22, 0x00, 0x40, 0x06, 0x20, 0x04, 0x60, 0x02, 0x00, 0x1b, 0x36, 0x00,
- 0x40, 0x04, 0x20, 0x04, 0x20, 0x02, 0x00, 0x11, 0x3c, 0x00, 0x40, 0x04,
- 0x20, 0x04, 0x20, 0x02, 0x00, 0x1b, 0x70, 0x00, 0x40, 0x0c, 0x20, 0x04,
- 0x30, 0x02, 0x00, 0x0e, 0x60, 0x00, 0x40, 0x08, 0x20, 0x04, 0x10, 0x02,
- 0x00, 0x03, 0xe0, 0x00, 0x40, 0x08, 0x30, 0x0c, 0x10, 0x02, 0x80, 0x03,
- 0xc0, 0x01, 0x40, 0x18, 0x10, 0x08, 0x18, 0x02, 0x80, 0x01, 0x40, 0x01,
- 0x40, 0x10, 0x10, 0x08, 0x08, 0x02, 0xc0, 0x01, 0x40, 0x03, 0x40, 0x10,
- 0x10, 0x08, 0x08, 0x02, 0x60, 0x01, 0x40, 0x06, 0x40, 0x10, 0x10, 0x08,
- 0x08, 0x02, 0x20, 0x01, 0x40, 0x04, 0x40, 0x30, 0x10, 0x08, 0x0c, 0x02,
- 0x30, 0x01, 0xc0, 0x0c, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x18, 0x01,
- 0x80, 0x18, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x08, 0x01, 0x80, 0x10,
- 0x40, 0x60, 0x10, 0x08, 0x06, 0x02, 0x8c, 0x01, 0x80, 0x30, 0x40, 0x40,
- 0x18, 0x18, 0x02, 0x02, 0x84, 0x00, 0x80, 0x20, 0x40, 0x40, 0x08, 0x10,
- 0x02, 0x02, 0x86, 0x00, 0x80, 0x60, 0x40, 0xc0, 0x08, 0x10, 0x03, 0x02,
- 0x83, 0x00, 0x80, 0xc1, 0x40, 0x80, 0x08, 0x10, 0x01, 0x02, 0x81, 0x00,
- 0x00, 0x81, 0x40, 0x80, 0x08, 0x10, 0x01, 0x82, 0x81, 0x00, 0x00, 0x81,
- 0x41, 0x80, 0x09, 0x90, 0x01, 0x82, 0x80, 0x00, 0x00, 0x01, 0x43, 0x00,
- 0x09, 0x90, 0x00, 0xc2, 0xc0, 0x00, 0x00, 0x01, 0x42, 0x00, 0x09, 0x90,
- 0x00, 0x62, 0x40, 0x00, 0x00, 0x01, 0x46, 0x00, 0x0f, 0xf0, 0x00, 0x22,
- 0x40, 0x00, 0x00, 0x03, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x32, 0x40, 0x00,
- 0x00, 0x02, 0x48, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x40, 0x00, 0x00, 0x02,
- 0x58, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x40, 0x00, 0x00, 0x02, 0x70, 0x00,
- 0x00, 0x00, 0x00, 0x0e, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x60, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xfe, 0x7f,
- 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0xfc, 0x03, 0xc0, 0x3f, 0x00,
- 0x10, 0x00, 0x00, 0x10, 0xfe, 0x07, 0x80, 0x01, 0xe0, 0x7f, 0x18, 0x00,
- 0x00, 0x30, 0x03, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x0c, 0x00, 0x00, 0x60,
- 0x18, 0x00, 0xf8, 0x1f, 0x00, 0x18, 0x06, 0x00, 0x00, 0x40, 0x7e, 0x00,
- 0xe0, 0x07, 0x00, 0x7e, 0x02, 0x00, 0x00, 0x40, 0xff, 0x01, 0x80, 0x01,
- 0x80, 0xff, 0x02, 0x00, 0x00, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x7e,
- 0x02, 0x00, 0x00, 0xc0, 0x18, 0x00, 0xfe, 0x7f, 0x00, 0x18, 0x03, 0x00,
- 0x00, 0x80, 0x00, 0xfc, 0x03, 0xc0, 0x3f, 0x00, 0x01, 0x00, 0x00, 0x80,
- 0xfe, 0x07, 0x00, 0x00, 0xe0, 0x7f, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/queen_small.bitmap b/gnu/games/chess/Xchess/queen_small.bitmap
deleted file mode 100644
index d7ee50e..0000000
--- a/gnu/games/chess/Xchess/queen_small.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define queen_small_width 32
-#define queen_small_height 32
-static char queen_small_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
- 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00,
- 0x80, 0x81, 0xc0, 0x00, 0x80, 0x81, 0xc0, 0x00, 0x00, 0xc1, 0x41, 0x00,
- 0x00, 0xc1, 0x41, 0x00, 0x02, 0xc3, 0x61, 0x20, 0x06, 0xc3, 0x61, 0x30,
- 0x04, 0xc3, 0x61, 0x10, 0x0c, 0xc3, 0x61, 0x18, 0x08, 0xc7, 0x71, 0x08,
- 0x18, 0xc6, 0x31, 0x0c, 0x38, 0xc6, 0x31, 0x0e, 0x30, 0xce, 0x39, 0x06,
- 0x70, 0xce, 0x39, 0x07, 0x60, 0xee, 0x3b, 0x03, 0xe0, 0xee, 0xbb, 0x03,
- 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0x01,
- 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0xff, 0x7f, 0x00,
- 0x80, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/queen_small_outline.bitmap b/gnu/games/chess/Xchess/queen_small_outline.bitmap
deleted file mode 100644
index 0b624b9..0000000
--- a/gnu/games/chess/Xchess/queen_small_outline.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define queen_small_outline_width 32
-#define queen_small_outline_height 32
-static char queen_small_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
- 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00,
- 0x80, 0x81, 0xc0, 0x00, 0x80, 0x81, 0xc0, 0x00, 0x00, 0xc1, 0x41, 0x00,
- 0x00, 0x41, 0x41, 0x00, 0x02, 0x43, 0x61, 0x20, 0x06, 0x43, 0x61, 0x30,
- 0x04, 0x43, 0x61, 0x10, 0x0c, 0x43, 0x61, 0x18, 0x08, 0x47, 0x71, 0x08,
- 0x18, 0x46, 0x31, 0x0c, 0x38, 0x46, 0x31, 0x0e, 0x30, 0x4e, 0x39, 0x06,
- 0x70, 0x4e, 0x29, 0x07, 0x60, 0x6a, 0x2b, 0x03, 0xe0, 0x2a, 0xab, 0x03,
- 0xe0, 0x3b, 0xee, 0x03, 0x40, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x80, 0x01,
- 0x80, 0xfc, 0x9f, 0x00, 0x80, 0x01, 0xc0, 0x00, 0x00, 0x01, 0x40, 0x00,
- 0x80, 0xfd, 0xdf, 0x00, 0xf0, 0x00, 0x80, 0x07, 0xf0, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/rook.bitmap b/gnu/games/chess/Xchess/rook.bitmap
deleted file mode 100644
index f274614..0000000
--- a/gnu/games/chess/Xchess/rook.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define rook_width 80
-#define rook_height 80
-static char rook_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xf8, 0xff, 0x00, 0x3c,
- 0x00, 0x00, 0x00, 0x80, 0xff, 0x01, 0xf8, 0xff, 0x00, 0xfc, 0x0f, 0x00,
- 0x00, 0xc0, 0xff, 0x01, 0xf8, 0xff, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xc0,
- 0xff, 0x01, 0xf8, 0xff, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0x01,
- 0xf8, 0xff, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0x01, 0xff, 0xff,
- 0x07, 0xfc, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0x01, 0x00, 0xfc, 0xfd,
- 0x1f, 0x00, 0x00, 0xc0, 0xff, 0x07, 0xfc, 0xff, 0x01, 0xff, 0x1f, 0x00,
- 0x00, 0xc0, 0x1f, 0xf0, 0xff, 0xff, 0x7f, 0xc0, 0x1f, 0x00, 0x00, 0x40,
- 0xc0, 0xff, 0x07, 0x00, 0xff, 0x1f, 0x10, 0x00, 0x00, 0xc0, 0xff, 0x1f,
- 0xf0, 0x7f, 0xc0, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x7f, 0xc0, 0xfd, 0xff,
- 0x1d, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff,
- 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x7f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0xff, 0xfe, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfe,
- 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfe, 0xff, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfe, 0xff, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0xff, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0xff, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfe,
- 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfe, 0xff, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfe, 0xff, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0xff, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0x0f, 0x80, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xe0, 0x3f,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff,
- 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0xfd, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfd, 0xff, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfd, 0xff, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfd, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0xff, 0xfd, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0xff, 0xfd, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfd,
- 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfd, 0xff, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfd, 0xff, 0x1f, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfd, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0xff, 0xfd, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0xff, 0xfd, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xfd,
- 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x07, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
- 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/rook_mask.bitmap b/gnu/games/chess/Xchess/rook_mask.bitmap
deleted file mode 100644
index c044416..0000000
--- a/gnu/games/chess/Xchess/rook_mask.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define rook_mask_width 80
-#define rook_mask_height 80
-static char rook_mask_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xfc, 0xff,
- 0x01, 0x7e, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03, 0xfc, 0xff, 0x01, 0xfe,
- 0x1f, 0x00, 0x00, 0xe0, 0xff, 0x03, 0xfc, 0xff, 0x01, 0xfe, 0x3f, 0x00,
- 0x00, 0xe0, 0xff, 0x03, 0xfc, 0xff, 0x01, 0xfe, 0x3f, 0x00, 0x00, 0xe0,
- 0xff, 0x03, 0xfc, 0xff, 0x1f, 0xfe, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0x83,
- 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/rook_outline.bitmap b/gnu/games/chess/Xchess/rook_outline.bitmap
deleted file mode 100644
index f30107a..0000000
--- a/gnu/games/chess/Xchess/rook_outline.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define rook_outline_width 80
-#define rook_outline_height 80
-static char rook_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x08, 0x80, 0x00, 0x3c,
- 0x00, 0x00, 0x00, 0x80, 0x3f, 0x01, 0x08, 0x80, 0x00, 0xe4, 0x0f, 0x00,
- 0x00, 0xc0, 0x00, 0x01, 0x08, 0x80, 0x00, 0x04, 0x18, 0x00, 0x00, 0x40,
- 0x00, 0x01, 0x08, 0x80, 0x00, 0x04, 0x10, 0x00, 0x00, 0x40, 0x00, 0x01,
- 0x08, 0x80, 0x00, 0x04, 0x10, 0x00, 0x00, 0x40, 0x00, 0x01, 0x0f, 0x80,
- 0x07, 0x04, 0x10, 0x00, 0x00, 0x40, 0x00, 0xfd, 0x01, 0x00, 0xfc, 0x05,
- 0x10, 0x00, 0x00, 0x40, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x10, 0x00,
- 0x00, 0x40, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x10, 0x00, 0x00, 0x40,
- 0x00, 0xf0, 0x07, 0x00, 0x7f, 0x00, 0x10, 0x00, 0x00, 0x40, 0xc0, 0x1f,
- 0x00, 0x00, 0xc0, 0x1f, 0x10, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x02, 0x00,
- 0x02, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00,
- 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x80, 0xff, 0xff, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0x00, 0x01, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0xf0, 0x7f, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0xc0,
- 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00,
- 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x02, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
- 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x07, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
- 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/rook_small.bitmap b/gnu/games/chess/Xchess/rook_small.bitmap
deleted file mode 100644
index ddee756..0000000
--- a/gnu/games/chess/Xchess/rook_small.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define rook_small_width 32
-#define rook_small_height 32
-static char rook_small_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x73, 0xce, 0x03, 0xc0, 0x73, 0xce, 0x03, 0xc0, 0x73, 0xce, 0x03,
- 0xc0, 0x73, 0xce, 0x03, 0xc0, 0xff, 0xff, 0x03, 0x00, 0xff, 0xff, 0x00,
- 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
- 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
- 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
- 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
- 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
- 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
- 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/rook_small_outline.bitmap b/gnu/games/chess/Xchess/rook_small_outline.bitmap
deleted file mode 100644
index 523521b..0000000
--- a/gnu/games/chess/Xchess/rook_small_outline.bitmap
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#define rook_small_outline_width 32
-#define rook_small_outline_height 32
-static char rook_small_outline_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x73, 0xce, 0x03, 0x40, 0x52, 0x4a, 0x02, 0x40, 0x52, 0x4a, 0x02,
- 0x40, 0x52, 0x4a, 0x02, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x01, 0x80, 0x00,
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
- 0xe0, 0xff, 0xff, 0x07, 0x20, 0x00, 0x00, 0x04, 0xe0, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/scrollText.h b/gnu/games/chess/Xchess/scrollText.h
deleted file mode 100644
index d9d05b0..0000000
--- a/gnu/games/chess/Xchess/scrollText.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Scrollable Text Window Header File
- *
- * David Harrison
- * University of California, Berkeley
- * 1986
- *
- * This file contains definitions for a scrollable text window
- * with scroll bar support.
- */
-
-int TxtGrab();
- /* Take hold of a previously created window */
-
-#define TXT_NO_COLOR -1
-
-int TxtAddFont();
- /* Loads a new font for use later */
-int TxtWinP();
- /* Returns non-zero value if the window is text window */
-int TxtClear();
- /* Clears text window and resets text buffer */
-
-int TxtWriteStr();
- /* Writes a string to window with immediate update */
-int TxtJamStr();
- /* Write a string without causing update to screen */
-
-int TxtRepaint();
- /* Repaints entire scrollable text window */
-int TxtFilter();
- /* Handles events related to text window */
diff --git a/gnu/games/chess/Xchess/scrollText/scrollText.h b/gnu/games/chess/Xchess/scrollText/scrollText.h
deleted file mode 100644
index d9d05b0..0000000
--- a/gnu/games/chess/Xchess/scrollText/scrollText.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Scrollable Text Window Header File
- *
- * David Harrison
- * University of California, Berkeley
- * 1986
- *
- * This file contains definitions for a scrollable text window
- * with scroll bar support.
- */
-
-int TxtGrab();
- /* Take hold of a previously created window */
-
-#define TXT_NO_COLOR -1
-
-int TxtAddFont();
- /* Loads a new font for use later */
-int TxtWinP();
- /* Returns non-zero value if the window is text window */
-int TxtClear();
- /* Clears text window and resets text buffer */
-
-int TxtWriteStr();
- /* Writes a string to window with immediate update */
-int TxtJamStr();
- /* Write a string without causing update to screen */
-
-int TxtRepaint();
- /* Repaints entire scrollable text window */
-int TxtFilter();
- /* Handles events related to text window */
diff --git a/gnu/games/chess/Xchess/shade.bitmap b/gnu/games/chess/Xchess/shade.bitmap
deleted file mode 100644
index a32ac80..0000000
--- a/gnu/games/chess/Xchess/shade.bitmap
+++ /dev/null
@@ -1,71 +0,0 @@
-
-#define shade_width 80
-#define shade_height 80
-static char shade_bits[] = {
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88};
diff --git a/gnu/games/chess/Xchess/window.c.bm b/gnu/games/chess/Xchess/window.c.bm
deleted file mode 100644
index 19134d0..0000000
--- a/gnu/games/chess/Xchess/window.c.bm
+++ /dev/null
@@ -1,928 +0,0 @@
-/* This file contains code for X-CHESS.
- Copyright (C) 1986 Free Software Foundation, Inc.
-
-This file is part of X-CHESS.
-
-X-CHESS is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY. No author or distributor
-accepts responsibility to anyone for the consequences of using it
-or for whether it serves any particular purpose or works at all,
-unless he says so in writing. Refer to the X-CHESS General Public
-License for full details.
-
-Everyone is granted permission to copy, modify and redistribute
-X-CHESS, but only under the conditions described in the
-X-CHESS General Public License. A copy of this license is
-supposed to have been given to you along with X-CHESS so you
-can know your rights and responsibilities. It should be in a
-file named COPYING. Among other things, the copyright notice
-and this notice must be preserved on all copies. */
-
-
-/* RCS Info: $Revision: 1.5 $ on $Date: 86/11/26 12:11:15 $
- * $Source: /users/faustus/xchess/RCS/window.c,v $
- * Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
- * Permission is granted to do anything with this code except sell it
- * or remove this message.
- *
- * Deal with the two (or one) windows.
- */
-
-#include "xchess.h"
-#include <sys/time.h>
-
-#include "pawn.bitmap"
-#include "rook.bitmap"
-#include "knight.bitmap"
-#include "bishop.bitmap"
-#include "queen.bitmap"
-#include "king.bitmap"
-
-#include "pawn_outline.bitmap"
-#include "rook_outline.bitmap"
-#include "knight_outline.bitmap"
-#include "bishop_outline.bitmap"
-#include "queen_outline.bitmap"
-#include "king_outline.bitmap"
-
-#include "pawn_mask.bitmap"
-#include "rook_mask.bitmap"
-#include "knight_mask.bitmap"
-#include "bishop_mask.bitmap"
-#include "queen_mask.bitmap"
-#include "king_mask.bitmap"
-
-#include "shade.bitmap"
-
-#include "xchess.cur"
-#include "xchess_mask.cur"
-
-#include "xchess.icon"
-
-windata *win1, *win2;
-bool win_flashmove = false;
-
-extern bool setup();
-extern void service(), drawgrid(), icon_refresh();
-
-bool
-win_setup(disp1, disp2)
- char *disp1, *disp2;
-{
- win1 = alloc(windata);
- if (!oneboard)
- win2 = alloc(windata);
-
- if (!setup(disp1, win1) || (!oneboard && !setup(disp2, win2)))
- return (false);
-
- if (blackflag) {
- win1->color = BLACK;
- win1->flipped = true;
- } else
- win1->color = WHITE;
- win_drawboard(win1);
-
- if (!oneboard) {
- win2->color = BLACK;
- win2->flipped = true;
- win_drawboard(win2);
- }
-
- return(true);
-}
-
-/* Draw the chess board... */
-
-void
-win_drawboard(win)
- windata *win;
-{
- int i, j;
-
- drawgrid(win);
-
- /* Now toss on the squares... */
- for (i = 0; i < SIZE; i++)
- for (j = 0; j < SIZE; j++)
- win_erasepiece(j, i, win->color);
-
- return;
-}
-
-/* Draw one piece. */
-
-void
-win_drawpiece(p, y, x, wnum)
- piece *p;
- int y, x;
- color wnum;
-{
- char *bits, *maskbits, *outline;
- windata *win;
- char buf[BSIZE];
- XImage *tmpImage;
- Pixmap tmpPM, maskPM;
- XGCValues gc;
-
- if (oneboard || (wnum == win1->color))
- win = win1;
- else
- win = win2;
-
- if (win->flipped) {
- y = SIZE - y - 1;
- x = SIZE - x - 1;
- }
-
- /*
- if (debug)
- fprintf(stderr, "draw a %s at (%d, %d) on board %d\n",
- piecenames[(int) p->type], y, x, wnum);
- */
-
- if ((x < 0) || (x > 7) || (y < 0) || (y > 7)) exit(1);
-
- switch (p->type) {
- case PAWN:
- bits = pawn_bits;
- maskbits = pawn_mask_bits;
- outline = pawn_outline_bits;
- break;
-
- case ROOK:
- bits = rook_bits;
- maskbits = rook_mask_bits;
- outline = rook_outline_bits;
- break;
-
- case KNIGHT:
- bits = knight_bits;
- maskbits = knight_mask_bits;
- outline = knight_outline_bits;
- break;
-
- case BISHOP:
- bits = bishop_bits;
- maskbits = bishop_mask_bits;
- outline = bishop_outline_bits;
- break;
-
- case QUEEN:
- bits = queen_bits;
- maskbits = queen_mask_bits;
- outline = queen_outline_bits;
- break;
-
- case KING:
- bits = king_bits;
- maskbits = king_mask_bits;
- outline = king_outline_bits;
- break;
-
- default:
- fprintf(stderr,
- "Internal Error: win_drawpiece: bad piece type %d\n",
- p->type);
- }
-
- /* There are two things we can do... If this is a black and white
- * display, we have to shade the square and use an outline if the piece
- * is white. We also have to use a mask... Since we don't want
- * to use up too many bitmaps, create the mask bitmap, put the bits,
- * and then destroy it.
- */
- if (win->bnw && (p->color == WHITE))
- bits = outline;
- if (win->bnw && !iswhite(win, x, y)) {
- XSetState(win->display, DefaultGC(win->display, 0),
- BlackPixel(win->display, 0),
- WhitePixel(win->display, 0), GXcopy, AllPlanes);
-
- tmpPM = XCreateBitmapFromData(win->display, win->boardwin,
- shade_bits, SQUARE_WIDTH, SQUARE_HEIGHT);
-
- XCopyPlane(win->display, tmpPM, win->boardwin, DefaultGC(win->display, 0),
- 0, 0, SQUARE_WIDTH, SQUARE_HEIGHT,
- x * (SQUARE_WIDTH + BORDER_WIDTH),
- y * (SQUARE_HEIGHT + BORDER_WIDTH), 1);
-
- XFreePixmap(win->display, tmpPM);
-
- XSetFunction(win->display, DefaultGC(win->display, 0),
- GXandInverted);
- maskPM = XCreateBitmapFromData(win->display, win->boardwin,
- maskbits, SQUARE_WIDTH, SQUARE_HEIGHT);
- XCopyPlane(win->display, maskPM, win->boardwin, DefaultGC(win->display, 0),
- 0, 0, SQUARE_WIDTH, SQUARE_HEIGHT,
- x * (SQUARE_WIDTH + BORDER_WIDTH),
- y * (SQUARE_HEIGHT + BORDER_WIDTH), 1);
- XFreePixmap(win->display, maskPM);
-
- XSetFunction(win->display, DefaultGC(win->display, 0),
- GXor);
- tmpPM = XCreateBitmapFromData(win->display, win->boardwin,
- bits, SQUARE_WIDTH, SQUARE_HEIGHT);
- XCopyPlane(win->display, tmpPM, win->boardwin, DefaultGC(win->display, 0),
- 0, 0, SQUARE_WIDTH, SQUARE_HEIGHT,
- x * (SQUARE_WIDTH + BORDER_WIDTH),
- y * (SQUARE_HEIGHT + BORDER_WIDTH), 1);
- XFreePixmap(win->display, tmpPM);
-
- XSetFunction(win->display, DefaultGC(win->display, 0), GXcopy);
-
- } else if (win->bnw){
- XSetState(win->display, DefaultGC(win->display, 0),
- BlackPixel(win->display, 0),
- WhitePixel(win->display, 0), GXcopy, AllPlanes);
-
- tmpPM = XCreateBitmapFromData(win->display, win->boardwin,
- bits, SQUARE_WIDTH, SQUARE_HEIGHT);
- XCopyPlane(win->display, tmpPM, win->boardwin, DefaultGC(win->display, 0),
- 0, 0, SQUARE_WIDTH, SQUARE_HEIGHT,
- x * (SQUARE_WIDTH + BORDER_WIDTH),
- y * (SQUARE_HEIGHT + BORDER_WIDTH), 1);
- XFreePixmap(win->display, tmpPM);
- } else {
- XSetState(win->display, DefaultGC(win->display, 0),
- ((p->color == WHITE) ? win->whitepiece.pixel :
- win->blackpiece.pixel),
- (iswhite(win, x, y) ? win->whitesquare.pixel :
- win->blacksquare.pixel),
- GXcopy, AllPlanes);
- tmpPM = XCreateBitmapFromData(win->display, win->boardwin,
- bits, SQUARE_WIDTH, SQUARE_HEIGHT);
- XCopyPlane(win->display, tmpPM, win->boardwin, DefaultGC(win->display, 0),
- 0, 0, SQUARE_WIDTH, SQUARE_HEIGHT,
- x * (SQUARE_WIDTH + BORDER_WIDTH),
- y * (SQUARE_HEIGHT + BORDER_WIDTH), 1);
- XFreePixmap(win->display, tmpPM);
- }
-
- if (!record_english) {
- gc.foreground = win->textcolor.pixel;
- if (iswhite(win, x, y) || win->bnw)
- gc.background = win->whitesquare.pixel;
- else
- gc.background = win->blacksquare.pixel;
-
- gc.font = win->small->fid;
-
- XChangeGC(win->display, DefaultGC(win->display, 0),
- GCForeground | GCBackground | GCFont, &gc);
-
- if (!x) {
- sprintf(buf, " %d", SIZE - y);
- XDrawImageString(win->display, win->boardwin,
- DefaultGC(win->display, 0),
- 1, (y + 1) * (SQUARE_HEIGHT +
- BORDER_WIDTH) - BORDER_WIDTH +
- win->small->max_bounds.ascent - 1, buf, 2);
- }
- if (y == SIZE - 1) {
- sprintf(buf, "%c", 'A' + x);
- XDrawImageString(win->display, win->boardwin,
- DefaultGC(win->display, 0),
- x * (SQUARE_WIDTH + BORDER_WIDTH) + 1,
- SIZE * (SQUARE_HEIGHT + BORDER_WIDTH) - BORDER_WIDTH +
- win->small->max_bounds.ascent - 1, buf, 1);
- }
- }
- return;
-}
-
-void
-win_erasepiece(y, x, wnum)
- int y, x;
- color wnum;
-{
- windata *win;
- char buf[BSIZE];
- XGCValues gc;
- Pixmap tmpPM;
-
- if (oneboard || (wnum == win1->color))
- win = win1;
- else
- win = win2;
-
- if (win->flipped) {
- y = SIZE - y - 1;
- x = SIZE - x - 1;
- }
-
- /*
- if (debug)
- fprintf(stderr, "erase square (%d, %d) on board %d\n", y, x,
- wnum);
- */
-
- if ((x < 0) || (x > 7) || (y < 0) || (y > 7)) exit(1);
-
- if (win->bnw && !iswhite(win, x, y)) {
- XSetState(win->display, DefaultGC(win->display, 0),
- BlackPixel(win->display, 0),
- WhitePixel(win->display, 0), GXcopy, AllPlanes);
- tmpPM = XCreateBitmapFromData(win->display, win->boardwin,
- shade_bits, SQUARE_WIDTH, SQUARE_HEIGHT);
-
- XCopyPlane(win->display, tmpPM, win->boardwin, DefaultGC(win->display, 0),
- 0, 0, SQUARE_WIDTH, SQUARE_HEIGHT,
- x * (SQUARE_WIDTH + BORDER_WIDTH),
- y * (SQUARE_HEIGHT + BORDER_WIDTH), 1);
-
- XFreePixmap(win->display, tmpPM);
- } else {
- XSetFillStyle(win->display, DefaultGC(win->display, 0),
- FillSolid);
- XSetForeground(win->display, DefaultGC(win->display, 0),
- iswhite(win, x, y) ? win->whitesquare.pixel :
- win->blacksquare.pixel);
- XFillRectangle(win->display, win->boardwin,
- DefaultGC(win->display, 0),
- x * (SQUARE_WIDTH + BORDER_WIDTH),
- y * (SQUARE_HEIGHT + BORDER_WIDTH),
- SQUARE_WIDTH, SQUARE_HEIGHT);
- }
-
- if (!record_english) {
- gc.foreground = win->textcolor.pixel;
- if (iswhite(win, x, y) || win->bnw)
- gc.background = win->whitesquare.pixel;
- else
- gc.background = win->blacksquare.pixel;
-
- gc.font = win->small->fid;
-
- XChangeGC(win->display, DefaultGC(win->display, 0),
- GCForeground | GCBackground | GCFont, &gc);
-
- if (!x) {
- sprintf(buf, " %d", SIZE - y);
- XDrawImageString(win->display, win->boardwin,
- DefaultGC(win->display, 0),
- 1, (y + 1) * (SQUARE_HEIGHT +
- BORDER_WIDTH) - BORDER_WIDTH +
- win->small->max_bounds.ascent - 1, buf, 2);
- }
- if (y == SIZE - 1) {
- sprintf(buf, "%c", 'A' + x);
- XDrawImageString(win->display, win->boardwin,
- DefaultGC(win->display, 0),
- x * (SQUARE_WIDTH + BORDER_WIDTH) + 1,
- SIZE * (SQUARE_HEIGHT + BORDER_WIDTH) - BORDER_WIDTH +
- win->small->max_bounds.ascent - 1, buf, 1);
- }
- }
-
-
- return;
-}
-
-void
-win_flash(m, wnum)
- move *m;
- color wnum;
-{
- windata *win;
- int sx, sy, ex, ey, i;
-
- if (oneboard || (wnum == win1->color))
- win = win1;
- else
- win = win2;
-
- if (win->flipped) {
- sx = SIZE - m->fromx - 1;
- sy = SIZE - m->fromy - 1;
- ex = SIZE - m->tox - 1;
- ey = SIZE - m->toy - 1;
- } else {
- sx = m->fromx;
- sy = m->fromy;
- ex = m->tox;
- ey = m->toy;
- }
- sx = sx * (SQUARE_WIDTH + BORDER_WIDTH) + SQUARE_WIDTH / 2;
- sy = sy * (SQUARE_HEIGHT + BORDER_WIDTH) + SQUARE_HEIGHT / 2;
- ex = ex * (SQUARE_WIDTH + BORDER_WIDTH) + SQUARE_WIDTH / 2;
- ey = ey * (SQUARE_HEIGHT + BORDER_WIDTH) + SQUARE_HEIGHT / 2;
-
- for (i = 0; i < num_flashes * 2; i++)
- XDrawLine(win->display,win->boardwin,
- DefaultGC(win->display, 0),
- sx, sy, ex, ey);
- return;
-}
-
-/* Handle input from the players. */
-
-void
-win_process(quick)
- bool quick;
-{
- int i, rfd = 0, wfd = 0, xfd = 0;
- struct timeval timeout;
-
- timeout.tv_sec = 0;
- timeout.tv_usec = (quick ? 0 : 500000);
-
- if (XPending(win1->display))
- service(win1);
- if (!oneboard) {
- if (XPending(win1->display))
- service(win2);
- }
-
- if (oneboard)
- rfd = 1 << win1->display->fd;
- else
- rfd = (1 << win1->display->fd) | (1 << win2->display->fd);
- if (!(i = select(32, &rfd, &wfd, &xfd, &timeout)))
- return;
- if (i == -1) {
- perror("select");
- exit(1);
- }
- if (rfd & (1 << win1->display->fd))
- service(win1);
- if (!oneboard && (rfd & (1 << win2->display->fd)))
- service(win2);
-
- return;
-}
-
-static void
-service(win)
- windata *win;
-{
- XEvent ev;
-
- while(XPending(win->display)) {
- XNextEvent(win->display, &ev);
- if (TxtFilter(win->display, &ev))
- continue;
-
- if (ev.xany.window == win->boardwin) {
- switch (ev.type) {
- case ButtonPress:
- button_pressed(&ev, win);
- break;
-
- case ButtonRelease:
- button_released(&ev, win);
- break;
-
- case Expose:
- /* Redraw... */
- win_redraw(win, &ev);
- break;
-
- case 0:
- case NoExpose:
- break;
- default:
- fprintf(stderr, "Bad event type %d\n", ev.type);
- exit(1);
- }
- } else if (ev.xany.window == win->wclockwin) {
- switch (ev.type) {
- case Expose:
- clock_draw(win, WHITE);
- break;
-
- case 0:
- case NoExpose:
- break;
- default:
- fprintf(stderr, "Bad event type %d\n", ev.type);
- exit(1);
- }
- } else if (ev.xany.window == win->bclockwin) {
- switch (ev.type) {
- case Expose:
- clock_draw(win, BLACK);
- break;
-
- case 0:
- case NoExpose:
- break;
- default:
- fprintf(stderr, "Bad event type %d\n", ev.type);
- exit(1);
- }
- } else if (ev.xany.window == win->jailwin) {
- switch (ev.type) {
- case Expose:
- jail_draw(win);
- break;
-
- case 0:
- case NoExpose:
- break;
- default:
- fprintf(stderr, "Bad event type %d\n", ev.type);
- exit(1);
- }
- } else if (ev.xany.window == win->buttonwin) {
- switch (ev.type) {
- case ButtonPress:
- button_service(win, &ev);
- break;
-
- case Expose:
- button_draw(win);
- break;
-
- case 0:
- case NoExpose:
- break;
- default:
- fprintf(stderr, "Bad event type %d\n", ev.type);
- exit(1);
- }
- } else if (ev.xany.window == win->icon) {
- icon_refresh(win);
- } else if (ev.xany.window == win->basewin) {
- message_send(win, &ev);
- } else {
- fprintf(stderr, "Internal Error: service: bad win\n");
- fprintf(stderr, "window = %d, event = %d\n", ev.xany.window,
- ev.type);
- }
- }
- return;
-}
-
-void
-win_redraw(win, event)
- windata *win;
- XEvent *event;
-{
- XExposeEvent *ev = &event->xexpose;
- int x1, y1, x2, y2, i, j;
-
- drawgrid(win);
- if (ev) {
- x1 = ev->x / (SQUARE_WIDTH + BORDER_WIDTH);
- y1 = ev->y / (SQUARE_HEIGHT + BORDER_WIDTH);
- x2 = (ev->x + ev->width) / (SQUARE_WIDTH + BORDER_WIDTH);
- y2 = (ev->y + ev->height) / (SQUARE_HEIGHT + BORDER_WIDTH);
- } else {
- x1 = 0;
- y1 = 0;
- x2 = SIZE - 1;
- y2 = SIZE - 1;
- }
-
- if (x1 < 0) x1 = 0;
- if (y1 < 0) y1 = 0;
- if (x2 < 0) x2 = 0;
- if (y2 < 0) y2 = 0;
- if (x1 > SIZE - 1) x1 = SIZE - 1;
- if (y1 > SIZE - 1) y1 = SIZE - 1;
- if (x2 > SIZE - 1) x2 = SIZE - 1;
- if (y2 > SIZE - 1) y2 = SIZE - 1;
-
- if (win->flipped) {
- y1 = SIZE - y2 - 1;
- y2 = SIZE - y1 - 1;
- x1 = SIZE - x2 - 1;
- x2 = SIZE - x1 - 1;
- }
-
- for (i = x1; i <= x2; i++)
- for (j = y1; j <= y2; j++) {
- if (chessboard->square[j][i].color == NONE)
- win_erasepiece(j, i, WHITE);
- else
- win_drawpiece(&chessboard->square[j][i], j, i,
- WHITE);
- if (!oneboard) {
- if (chessboard->square[j][i].color == NONE)
- win_erasepiece(j, i, BLACK);
- else
- win_drawpiece(&chessboard->square[j][i],
- j, i, BLACK);
- }
- }
-
- return;
-}
-
-static bool
-setup(dispname, win)
- char *dispname;
- windata *win;
-{
- char buf[BSIZE], *s;
- Pixmap bm, bmask;
- Cursor cur;
- extern char *program, *recfile;
-
-
- if (!(win->display = XOpenDisplay(dispname)))
- return (false);
-
-
- /* Now get boolean defaults... */
- if ((s = XGetDefault(win->display, program, "noisy")) && eq(s, "on"))
- noisyflag = true;
- if ((s = XGetDefault(win->display, program, "savemoves")) && eq(s, "on"))
- saveflag = true;
- if ((s = XGetDefault(win->display, program, "algebraic")) && eq(s, "on"))
- record_english = false;
- if ((s = XGetDefault(win->display, program, "blackandwhite")) && eq(s, "on"))
- bnwflag = true;
- if ((s = XGetDefault(win->display, program, "quickrestore")) && eq(s, "on"))
- quickflag = true;
- if ((s = XGetDefault(win->display, program, "flash")) && eq(s, "on"))
- win_flashmove = true;
-
- /* ... numeric variables ... */
- if (s = XGetDefault(win->display, program, "numflashes"))
- num_flashes = atoi(s);
- if (s = XGetDefault(win->display, program, "flashsize"))
- flash_size = atoi(s);
-
- /* ... and strings. */
- if (s = XGetDefault(win->display, program, "progname"))
- progname = s;
- if (s = XGetDefault(win->display, program, "proghost"))
- proghost = s;
- if (s = XGetDefault(win->display, program, "recordfile"))
- recfile = s;
- if (s = XGetDefault(win->display, program, "blackpiece"))
- black_piece_color = s;
- if (s = XGetDefault(win->display, program, "whitepiece"))
- white_piece_color = s;
- if (s = XGetDefault(win->display, program, "blacksquare"))
- black_square_color = s;
- if (s = XGetDefault(win->display, program, "whitesquare"))
- white_square_color = s;
- if (s = XGetDefault(win->display, program, "bordercolor"))
- border_color = s;
- if (s = XGetDefault(win->display, program, "textcolor"))
- text_color = s;
- if (s = XGetDefault(win->display, program, "textback"))
- text_back = s;
- if (s = XGetDefault(win->display, program, "errortext"))
- error_text = s;
- if (s = XGetDefault(win->display, program, "playertext"))
- player_text = s;
- if (s = XGetDefault(win->display, program, "cursorcolor"))
- cursor_color = s;
-
- if ((DisplayPlanes(win->display, 0) == 1) || bnwflag)
- win->bnw = true;
-
- /* Allocate colors... */
- if (win->bnw) {
- win->blackpiece.pixel = BlackPixel (win->display, 0);
- win->whitepiece.pixel = WhitePixel (win->display, 0);
- win->blacksquare.pixel = BlackPixel (win->display, 0);
- win->whitesquare.pixel = WhitePixel (win->display, 0);
- win->border.pixel = BlackPixel (win->display, 0);
- win->textcolor.pixel = BlackPixel (win->display, 0);
- win->textback.pixel = WhitePixel (win->display, 0);
- win->playertext.pixel = BlackPixel (win->display, 0);
- win->errortext.pixel = BlackPixel (win->display, 0);
- win->cursorcolor.pixel = BlackPixel (win->display, 0) ;
- } else {
- if (!XParseColor(win->display,
- DefaultColormap(win->display, 0),
- black_piece_color, &win->blackpiece) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- white_piece_color, &win->whitepiece) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- black_square_color, &win->blacksquare) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- white_square_color, &win->whitesquare) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- border_color, &win->border) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- text_color, &win->textcolor) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- text_back, &win->textback) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- error_text, &win->errortext) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- player_text, &win->playertext) ||
- !XParseColor(win->display,
- DefaultColormap(win->display, 0),
- cursor_color, &win->cursorcolor) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->blackpiece) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->whitepiece) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->blacksquare) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->whitesquare) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->border) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->textcolor) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->textback) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->errortext) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->playertext) ||
- !XAllocColor(win->display,
- DefaultColormap(win->display, 0),
- &win->cursorcolor))
- fprintf(stderr, "Can't get color...\n");
- }
-
- /* Get fonts... */
- win->small = XLoadQueryFont(win->display,SMALL_FONT);
- win->medium = XLoadQueryFont(win->display,MEDIUM_FONT);
- win->large = XLoadQueryFont(win->display,LARGE_FONT);
-
- /* Create the windows... */
-
- win->basewin =
- XCreateSimpleWindow(win->display,DefaultRootWindow(win->display),
- BASE_XPOS, BASE_YPOS,
- BASE_WIDTH, BASE_HEIGHT, 0,
- BlackPixel(win->display, 0),
- WhitePixel(win->display, 0));
- win->boardwin = XCreateSimpleWindow(win->display,win->basewin,
- BOARD_XPOS, BOARD_YPOS,
- BOARD_WIDTH, BOARD_HEIGHT,
- BORDER_WIDTH,
- win->border.pixel,
- WhitePixel(win->display, 0));
- win->recwin = XCreateSimpleWindow(win->display,win->basewin,
- RECORD_XPOS, RECORD_YPOS,
- RECORD_WIDTH, RECORD_HEIGHT,
- BORDER_WIDTH, win->border.pixel,
- win->textback.pixel);
- win->jailwin = XCreateSimpleWindow(win->display,win->basewin,
- JAIL_XPOS, JAIL_YPOS,
- JAIL_WIDTH, JAIL_HEIGHT,
- BORDER_WIDTH,
- win->border.pixel,
- win->textback.pixel);
- win->wclockwin = XCreateSimpleWindow(win->display,win->basewin,
- WCLOCK_XPOS, WCLOCK_YPOS,
- CLOCK_WIDTH, CLOCK_HEIGHT,
- BORDER_WIDTH, win->border.pixel,
- win->textback.pixel);
- win->bclockwin = XCreateSimpleWindow(win->display,win->basewin,
- BCLOCK_XPOS, BCLOCK_YPOS,
- CLOCK_WIDTH, CLOCK_HEIGHT,
- BORDER_WIDTH, win->border.pixel,
- win->textback.pixel);
- win->messagewin = XCreateSimpleWindow(win->display,win->basewin,
- MESS_XPOS, MESS_YPOS,
- MESS_WIDTH, MESS_HEIGHT,
- BORDER_WIDTH, win->border.pixel,
- win->textback.pixel);
- win->buttonwin = XCreateSimpleWindow(win->display,win->basewin,
- BUTTON_XPOS, BUTTON_YPOS,
- BUTTON_WIDTH, BUTTON_HEIGHT,
- BORDER_WIDTH, win->border.pixel,
- win->textback.pixel);
-
- /* Let's define an icon... */
- win->iconpixmap = XCreatePixmapFromBitmapData(win->display,
- win->basewin, icon_bits,
- icon_width, icon_height,
- win->blacksquare.pixel,
- win->whitesquare.pixel,
- 1);
-
- bm = XCreateBitmapFromData(win->display,
- win->basewin, xchess_bits,
- xchess_width, xchess_height);
- bmask = XCreateBitmapFromData(win->display,
- win->basewin, xchess_mask_bits,
- xchess_width, xchess_height);
- cur = XCreatePixmapCursor(win->display, bm, bmask,
- &win->cursorcolor,
- &WhitePixel(win->display, 0),
- xchess_x_hot, xchess_y_hot);
- XFreePixmap(win->display, bm);
- XFreePixmap(win->display, bmask);
-
- XDefineCursor(win->display,win->basewin, cur);
-
- XMapSubwindows(win->display,win->basewin);
- XMapRaised(win->display,win->basewin);
-
- XSelectInput(win->display,win->basewin, KeyPressMask);
- XSelectInput(win->display,win->boardwin,
- ButtonPressMask | ButtonReleaseMask | ExposureMask);
- XSelectInput(win->display,win->recwin,
- ButtonReleaseMask | ExposureMask);
- XSelectInput(win->display,win->jailwin, ExposureMask);
- XSelectInput(win->display,win->wclockwin, ExposureMask);
- XSelectInput(win->display,win->bclockwin, ExposureMask);
- XSelectInput(win->display,win->messagewin,
- ButtonReleaseMask | ExposureMask);
- XSelectInput(win->display,win->buttonwin,
- ButtonPressMask | ExposureMask);
-
- message_init(win);
- record_init(win);
- button_draw(win);
- jail_init(win);
- clock_init(win, WHITE);
- clock_init(win, BLACK);
- if (timeunit) {
- if (timeunit > 1800)
- sprintf(buf, "%d moves every %.2lg hours.\n",
- movesperunit, ((double) timeunit) / 3600);
- else if (timeunit > 30)
- sprintf(buf, "%d moves every %.2lg minutes.\n",
- movesperunit, ((double) timeunit) / 60);
- else
- sprintf(buf, "%d moves every %d seconds.\n",
- movesperunit, timeunit);
- message_add(win, buf, false);
- }
-
- return (true);
-}
-
-static void
-drawgrid(win)
- windata *win;
-{
- int i;
- XGCValues gc;
-
- gc.function = GXcopy;
- gc.plane_mask = AllPlanes;
- gc.foreground = win->border.pixel;
- gc.line_width = 0;
- gc.line_style = LineSolid;
-
- XChangeGC(win->display,
- DefaultGC(win->display, 0),
- GCFunction | GCPlaneMask | GCForeground |
- GCLineWidth | GCLineStyle, &gc);
-
- /* Draw the lines... horizontal, */
- for (i = 1; i < SIZE; i++)
- XDrawLine(win->display, win->boardwin,
- DefaultGC(win->display, 0), 0,
- i * (SQUARE_WIDTH + BORDER_WIDTH) -
- BORDER_WIDTH / 2,
- SIZE * (SQUARE_WIDTH + BORDER_WIDTH),
- i * (SQUARE_WIDTH + BORDER_WIDTH) -
- BORDER_WIDTH / 2);
-
- /* and vertical... */
- for (i = 1; i < SIZE; i++)
- XDrawLine(win->display, win->boardwin,
- DefaultGC(win->display, 0),
- i * (SQUARE_WIDTH + BORDER_WIDTH) -
- BORDER_WIDTH / 2, 0,
- i * (SQUARE_WIDTH + BORDER_WIDTH) -
- BORDER_WIDTH / 2,
- SIZE * (SQUARE_WIDTH + BORDER_WIDTH));
- return;
-}
-
-void
-win_restart()
-{
- win1->flipped = false;
- win_redraw(win1, (XEvent *) NULL);
- if (!oneboard) {
- win2->flipped = true;
- win_redraw(win2, (XEvent *) NULL);
- }
- return;
-}
-
-static void
-icon_refresh(win)
- windata *win;
-{
- XCopyArea(win->display, win->iconpixmap, win->icon,
- DefaultGC(win->display, 0),
- 0, 0, icon_width, icon_height, 0, 0);
- return;
-}
-
diff --git a/gnu/games/chess/Xchess/xchess.1 b/gnu/games/chess/Xchess/xchess.1
deleted file mode 100644
index e687513..0000000
--- a/gnu/games/chess/Xchess/xchess.1
+++ /dev/null
@@ -1,217 +0,0 @@
-
-.TH XCHESS 1 "14 Nov 1986" "X Version 10"
-.SH NAME
-xchess \- X chess display
-.SH SYNOPSIS
-.B xchess
-[ option ... ] [ white-display ] [ black-display ]
-.SH DESCRIPTION
-.PP
-.B xchess
-is a chess display program which allows players to play a game on either
-one or two displays, or play a chess-playing program. It uses the
-.B X
-window system. If one or no display names are given, it will open up one
-window and both black and white at the same board. If two displays are
-given,
-.B xchess
-will accept moves from each player in his turn. Black's board will be drawn
-with his pieces at the bottom.
-.PP
-.B xchess
-will not allow a player to make an illegal move. It accepts all legal moves,
-including castling and pawn capture \fIen passant\fR.
-.SH OPTIONS
-.TP 8
-.B -d
-Turn on debugging.
-.TP 8
-.B -f record-file
-Use \fBrecord-file\fR for saving the game when the \fBSave\fR button is
-selected, or if the \fB-s\fR flag is given. The default is "xchess.game".
-.TP 8
-.B -r saved-game
-Start with the position at the end of the saved game in the named file.
-This file may be the result of the \fBSave\fR command, and may be in
-either English or International format. When reading moves, one move
-it made per second.
-.TP 8
-.B -q
-Don't pause for a second every time a move is made when a game is being
-restored.
-.TP 8
-.B -v
-Whenever a piece is moved, outline the path with a "lightning bolt".
-This option and the \fB-n\fR option are useful if you don't want to miss
-an opponent's move when he makes it.
-.TP 8
-.B -i
-Use International format for recording moves (squares numbered 1-8, a-h)
-as opposed to English (e.g, \fIp/k4xp/q5\fR).
-.TP 8
-.B -t moves/timeunit
-Allows \fBtimeunit\fR seconds for every \fBmoves\fR moves. If either player
-exceeds this allowance both recieve a message saying informing them of
-this fact.
-.TP 8
-.B -c
-Play the computer.
-.B xchess
-will start up a chess-playing program (currently the only one it knows
-how to talk to is \fBGNU Chess\fR).
-.TP 8
-.B -p program
-The name of the program to use if the \fB-c\fR option is given. The
-default is "/usr/public/gnuchess". Note that \fBgnuchess\fR must be
-compiled with the \fIcompat\fR flag (in the file "main.c") set to 1.
-.TP 8
-.B -b
-If the \fB-c\fR flag was given, have the computer play white.
-.TP 8
-.B -bnw
-If the display has more than one display plane (i.e, is color), pretend
-it's black and white.
-.TP 8
-.B -s
-Save the moves in the record file as they are made. This is useful if
-you don't want your game to be lost when \fBxchess\fR core dumps.
-.TP 8
-.B -n
-Be noisy \- beep after every move is made.
-.TP 8
-.B -h host
-Run GNU Chess on the specified \fBhost\fR.
-.TP 8
-.B -R
-Randomly chose who plays white and who plays black, if two displays are
-given.
-.SH CONTROLS
-.PP
-The window is divided up into several sub-windows. The pieces are moved by
-pushing down any mouse button on top of the piece, moving to the destination
-square, and releasing it. Castling is done by moving the king to the
-right square. If you push down on a piece and then let the button
-up without moving it, you must move that piece. ("Touch it, move it.")
-.PP
-The progress of the game is listed in the "Game Record" window. Error
-messages and such things are printed in the "Message" window. Both these
-windows have scroll bars that you can use to move around.
-There are also windows for clocks and for a record of the pieces captured.
-.PP
-If you type any keys in the window, the text will go into the message
-window of both players. This provides a simple communication facility.
-.PP
-There are 9 buttons in the control window. They are as follows:
-.TP 8
-.B Draw
-Both players must push this button to agree on a draw (just one is ok
-if only one display is being used).
-.TP 8
-.B Resign
-The player whose turn it is to move resigns.
-.TP 8
-.B Reset
-Start over from the beginning.
-.TP 8
-.B Back
-Retract a move. If two displays are being used the other player will be
-asked to confirm this.
-.TP 8
-.B Fwd
-This will re-play the most recently retracted move. This button in conjunction
-with \fBBack\fR is useful for "scrolling around" in a saved game.
-.TP 8
-.B Save
-Save the game in the record file.
-.TP 8
-.B Flip
-Rotate the board so that Black will have his pieces at the bottom.
-.TP 8
-.B Switch
-Change the mapping of boards to players.
-.TP 8
-.B Pause
-This button has two functions. When a game is being restored, pieces will
-be moved once a second. Hitting \fBPause\fR will stop this process, and
-hitting it again will restart it. During the time that it is stopped no
-other action can be made except restarting it. While a game is being played,
-\fBPause\fR will stop the clock and restart it.
-.SH DEFAULTS
-.PP
-\fBxchess\fR uses the following \fI.Xdefaults\fR:
-.TP 8
-.B Noisy
-The -n flag.
-.TP 8
-.B SaveMoves
-The -s flag.
-.TP 8
-.B Algebraic
-The -i flag.
-.TP 8
-.B BlackAndWhite
-The -bnw flag.
-.TP 8
-.B QuickRestore
-The -q flag.
-.TP 8
-.B Flash
-The -v flag.
-.TP 8
-.B NumFlashes
-How many times to flash the move. The default is 5.
-.TP 8
-.B FlashWidth
-How big to make the lightning bolt. The default is 10 pixels.
-.TP 8
-.B ProgName
-The -p option. This may also be changed in the Makefile (-DDEF_PROG_NAME).
-.TP 8
-.B ProgHost
-The -h option.
-.TP 8
-.B RecordFile
-The -f option.
-.TP 8
-.B BlackPiece
-The color of the black pieces.
-.TP 8
-.B WhitePiece
-The color of the white pieces.
-.TP 8
-.B BorderColor
-The color of the borders.
-.TP 8
-.B BlackSquare
-The color of the black squares.
-.TP 8
-.B WhiteSquare
-The color of the white squares.
-.TP 8
-.B TextColor
-The color of routine messages and the move record text.
-.TP 8
-.B ErrorText
-The color of error messages.
-.TP 8
-.B PlayerText
-The color of player-entered text.
-.TP 8
-.B TextBack
-The background color for the two text windows.
-.TP 8
-.B CursorColor
-The color of the mouse and the text cursors.
-.SH "SEE ALSO"
-X(8), gnuchess(1), chess(5)
-.SH AUTHOR
-Wayne A. Christopher (faustus@ic.berkeley.edu)
-.SH BUGS
-.PP
-Checkmate and stalemate are not detected, so the appropriate player must resign
-or agree to a draw respectively.
-.PP
-\fBSwitch\fR doesn't work.
-.PP
-If you are playing \fBgnuchess\fR, and you select Undo a few times so that it
-is \fBgnuchess\fR's turn to move, it won't do anything.
diff --git a/gnu/games/chess/Xchess/xchess.c.150 b/gnu/games/chess/Xchess/xchess.c.150
deleted file mode 100644
index 2c17906..0000000
--- a/gnu/games/chess/Xchess/xchess.c.150
+++ /dev/null
@@ -1,197 +0,0 @@
-
-/* This file contains code for X-CHESS.
- Copyright (C) 1986 Free Software Foundation, Inc.
-
-This file is part of X-CHESS.
-
-X-CHESS is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY. No author or distributor
-accepts responsibility to anyone for the consequences of using it
-or for whether it serves any particular purpose or works at all,
-unless he says so in writing. Refer to the X-CHESS General Public
-License for full details.
-
-Everyone is granted permission to copy, modify and redistribute
-X-CHESS, but only under the conditions described in the
-X-CHESS General Public License. A copy of this license is
-supposed to have been given to you along with X-CHESS so you
-can know your rights and responsibilities. It should be in a
-file named COPYING. Among other things, the copyright notice
-and this notice must be preserved on all copies. */
-
-
-/* RCS Info: $Revision: 1.5 $ on $Date: 86/11/26 12:11:32 $
- * $Source: /users/faustus/xchess/RCS/xchess.c,v $
- * Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
- * Permission is granted to do anything with this code except sell it
- * or remove this message.
- */
-
-#define USAGE "xchess [ -d ] [ -f recordfile ] [ -r savedfile ] [ -i ]\n\
-\t[ -t moves/timeunit ] [ -c ] [ -p program ] [ -b ] [ -bnw ] [ -s ]\n\
-\t[ -n ] [ -h host ] [ -v ] [ -R ] [ whitedisplay ] [ blackdisplay ]"
-
-#include <signal.h>
-#include "xchess.h"
-
-bool debug = false;
-bool oneboard = false;
-bool bnwflag = false;
-bool progflag = false;
-bool blackflag = false;
-bool quickflag = false;
-
-char *progname = DEF_PROGRAM;
-char *proghost = NULL;
-char *piecenames[] = { "pawn", "rook", "knight", "bishop", "queen", "king" } ;
-char *colornames[] = { "white", "black", "none" } ;
-char *movetypenames[] = { "move", "qcastle", "kcastle", "capture" } ;
-char *dispname1 = NULL, *dispname2 = NULL;
-
-char *black_piece_color = BLACK_PIECE_COLOR;
-char *white_piece_color = WHITE_PIECE_COLOR;
-char *black_square_color = BLACK_SQUARE_COLOR;
-char *white_square_color = WHITE_SQUARE_COLOR;
-char *border_color = BORDER_COLOR;
-char *text_color = TEXT_COLOR;
-char *text_back = TEXT_BACK;
-char *error_text = ERROR_TEXT;
-char *player_text = PLAYER_TEXT;
-char *cursor_color = CURSOR_COLOR;
-
-int num_flashes = NUM_FLASHES;
-int flash_size = FLASH_SIZE;
-char *program;
-char *recfile = NULL;
-
-die () {
-fprintf(stderr, "child proc changed status?!\n");
-}
-
-void
-main(ac, av)
- char **av;
-{
- bool randflag = false;
- move *m;
- char *s;
-
- program = av[0];
-
- signal(SIGCHLD, die);
- /* Process args. */
- av++; ac--;
- while (ac > 0 && **av == '-') {
- if (eq(*av, "-d")) {
- debug = true;
- } else if (eq(*av, "-f")) {
- av++; ac--;
- if (*av)
- record_file = *av;
- else
- goto usage;
- } else if (eq(*av, "-r")) {
- av++; ac--;
- if (*av)
- recfile = *av;
- else
- goto usage;
- } else if (eq(*av, "-i")) {
- record_english = false;
- } else if (eq(*av, "-R")) {
- randflag = true;
- } else if (eq(*av, "-v")) {
- win_flashmove = true;
- } else if (eq(*av, "-q")) {
- quickflag = true;
- } else if (eq(*av, "-t")) {
- av++; ac--;
- if (*av) {
- movesperunit = atoi(*av);
- if (s = index(*av, '/'))
- timeunit = atoi(s + 1) * 60;
- else
- timeunit = 60;
- } else
- goto usage;
- } else if (eq(*av, "-p")) {
- av++; ac--;
- if (*av)
- progname = *av;
- else
- goto usage;
- } else if (eq(*av, "-h")) {
- av++; ac--;
- if (*av)
- proghost = *av;
- else
- goto usage;
- } else if (eq(*av, "-b")) {
- blackflag = true;
- } else if (eq(*av, "-c")) {
- progflag = true;
- } else if (eq(*av, "-bnw")) {
- bnwflag = true;
- } else if (eq(*av, "-s")) {
- saveflag = true;
- } else if (eq(*av, "-n")) {
- noisyflag = true;
- } else
- goto usage;
- av++; ac--;
- }
- if (ac > 0)
- dispname1 = av[0];
- if (ac > 1)
- dispname2 = av[1];
- if (ac > 2)
- goto usage;
-
- if (!dispname2)
- oneboard = true;
-
- srandom(getpid());
-
- if (!oneboard && randflag && (random() % 2)) {
- s = dispname1;
- dispname1 = dispname2;
- dispname2 = s;
- }
-
- if (!dispname1)
- dispname1 = getenv("DISPLAY");
-
- /* Set up the board. */
- board_setup();
-
- /* Create the windows. */
- win_setup(dispname1, dispname2);
-
- board_drawall();
-
- /* Start the program if necessary. */
- if (progflag)
- if (!program_init(progname))
- exit(1);
-
- if (recfile)
- load_game(recfile);
-
- /* Go into a loop of prompting players alternately for moves, checking
- * them, and updating things.
- */
- for (;;) {
- win_process(false);
- clock_update();
- if (progflag && ((!blackflag && (nexttomove == BLACK)) ||
- (blackflag && (nexttomove == WHITE)))) {
- m = program_get();
- if (m)
- prog_move(m);
- }
- }
-
-usage: fprintf(stderr, "Usage: %s\n", USAGE);
- exit(1);
-}
-
diff --git a/gnu/games/chess/Xchess/xchess.cur b/gnu/games/chess/Xchess/xchess.cur
deleted file mode 100644
index ef3750d..0000000
--- a/gnu/games/chess/Xchess/xchess.cur
+++ /dev/null
@@ -1,9 +0,0 @@
-
-#define xchess_width 16
-#define xchess_height 16
-#define xchess_x_hot 9
-#define xchess_y_hot 8
-static char xchess_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xf8, 0x00, 0xfe, 0x80, 0xff,
- 0xc0, 0xff, 0x60, 0xff, 0xb0, 0xfd, 0xd8, 0x66, 0x6c, 0x3b, 0x76, 0x1d,
- 0x98, 0x1d, 0xcc, 0x0c, 0x60, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/Xchess/xchess.game b/gnu/games/chess/Xchess/xchess.game
deleted file mode 100644
index 2302334..0000000
--- a/gnu/games/chess/Xchess/xchess.game
+++ /dev/null
@@ -1,8 +0,0 @@
-
-X Chess -- Sun Sep 18 18:01:17 EDT 1988
- Game played on pitcairn:0
- english
- 1. P/kb2-kb4 P/k2-k3
- 2. P/k2-k4
-Draw agreed.
-Time: white: 6s, black: 43s
diff --git a/gnu/games/chess/Xchess/xchess.h b/gnu/games/chess/Xchess/xchess.h
deleted file mode 100644
index 355731d..0000000
--- a/gnu/games/chess/Xchess/xchess.h
+++ /dev/null
@@ -1,301 +0,0 @@
-
-/* This file contains code for X-CHESS.
- Copyright (C) 1986 Free Software Foundation, Inc.
-
-This file is part of X-CHESS.
-
-X-CHESS is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY. No author or distributor
-accepts responsibility to anyone for the consequences of using it
-or for whether it serves any particular purpose or works at all,
-unless he says so in writing. Refer to the X-CHESS General Public
-License for full details.
-
-Everyone is granted permission to copy, modify and redistribute
-X-CHESS, but only under the conditions described in the
-X-CHESS General Public License. A copy of this license is
-supposed to have been given to you along with X-CHESS so you
-can know your rights and responsibilities. It should be in a
-file named COPYING. Among other things, the copyright notice
-and this notice must be preserved on all copies. */
-
-
-/* RCS Info: $Revision: 1.5 $ on $Date: 86/11/26 12:11:39 $
- * $Source: /users/faustus/xchess/RCS/xchess.h,v $
- * Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
- * Permission is granted to do anything with this code except sell it
- * or remove this message.
- *
- * Definitions for the X chess program.
- */
-
-#include "std.h"
-#include <X11/Xlib.h>
-#include "scrollText/scrollText.h"
-
-#define SIZE 8
-
-typedef enum piecetype { PAWN, ROOK, KNIGHT, BISHOP, QUEEN, KING } piecetype;
-typedef enum movetype { MOVE, QCASTLE, KCASTLE, CAPTURE } movetype;
-typedef enum color { WHITE, BLACK, NONE } color;
-
-typedef struct piece {
- enum piecetype type;
- enum color color;
-} piece;
-
-/* The board has y=0 and black at the top... This probably isn't the best
- * place to keep track of who can castle, but it's part of the game state...
- */
-
-typedef struct board {
- piece square[SIZE][SIZE];
- bool white_cant_castle_k;
- bool white_cant_castle_q;
- bool black_cant_castle_k;
- bool black_cant_castle_q;
-} board;
-
-typedef struct move {
- movetype type;
- piece piece;
- piece taken;
- int fromx, fromy;
- int tox, toy;
- struct move *next;
- bool enpassant;
- bool check;
-} move;
-
-#define iswhite(win, i, j) (!(((i) + (j)) % 2))
-
-/* Stuff for the display. */
-
-typedef struct windata {
- Display *display;
- Window basewin;
- Window boardwin;
- Window recwin;
- Window wclockwin;
- Window bclockwin;
- Window messagewin;
- Window buttonwin;
- Window jailwin;
- Window icon;
- Pixmap iconpixmap;
- XColor blackpiece;
- XColor whitepiece;
- XColor blacksquare;
- XColor whitesquare;
- XColor border;
- XColor textcolor;
- XColor textback;
- XColor errortext;
- XColor playertext;
- XColor cursorcolor;
- XFontStruct *small;
- XFontStruct *medium;
- XFontStruct *large;
- bool bnw;
- color color;
- bool flipped;
- double whitehands[3];
- double blackhands[3];
- char *txtassoc;
-} windata;
-
-#define SMALL_FONT "6x10"
-#define MEDIUM_FONT "8x13"
-#define LARGE_FONT "9x15"
-#define JAIL_FONT "6x10"
-
-#define SQUARE_WIDTH 80
-#define SQUARE_HEIGHT 80
-
-#define BORDER_WIDTH 3
-
-#define BOARD_WIDTH 8 * SQUARE_WIDTH + 7 * BORDER_WIDTH
-#define BOARD_HEIGHT 8 * SQUARE_HEIGHT + 7 * BORDER_WIDTH
-#define BOARD_XPOS 0
-#define BOARD_YPOS 0
-
-#define RECORD_WIDTH 265 /* 40 chars * 6 pixels / character. */
-#define RECORD_HEIGHT 433
-#define RECORD_XPOS BOARD_WIDTH + BORDER_WIDTH
-#define RECORD_YPOS 0
-
-#define JAIL_WIDTH RECORD_WIDTH
-#define JAIL_HEIGHT 163
-#define JAIL_XPOS RECORD_XPOS
-#define JAIL_YPOS RECORD_YPOS + RECORD_HEIGHT + BORDER_WIDTH
-
-#define CLOCK_WIDTH 131
-#define CLOCK_HEIGHT 131 + BORDER_WIDTH + 20
-#define WCLOCK_XPOS RECORD_XPOS
-#define WCLOCK_YPOS RECORD_HEIGHT + JAIL_HEIGHT + BORDER_WIDTH * 2
-#define BCLOCK_XPOS WCLOCK_XPOS + CLOCK_WIDTH + BORDER_WIDTH
-#define BCLOCK_YPOS WCLOCK_YPOS
-
-#define MESS_WIDTH 329
-#define MESS_HEIGHT 92
-#define MESS_XPOS 0
-#define MESS_YPOS BOARD_HEIGHT + BORDER_WIDTH
-
-#define BUTTON_WIDTH MESS_WIDTH
-#define BUTTON_HEIGHT MESS_HEIGHT
-#define BUTTON_XPOS MESS_WIDTH + BORDER_WIDTH
-#define BUTTON_YPOS MESS_YPOS
-
-#define BASE_WIDTH BOARD_WIDTH + RECORD_WIDTH + BORDER_WIDTH * 3
-#define BASE_HEIGHT BOARD_HEIGHT + MESS_HEIGHT + BORDER_WIDTH * 3
-
-#define BASE_XPOS 50
-#define BASE_YPOS 50
-
-#define BLACK_PIECE_COLOR "#202020"
-#define WHITE_PIECE_COLOR "#FFFFCC"
-#define BLACK_SQUARE_COLOR "#77A26D"
-#define WHITE_SQUARE_COLOR "#C8C365"
-#define BORDER_COLOR "#902E39"
-#define TEXT_COLOR "#006D6D"
-#define TEXT_BACK "#FFFFDD"
-#define ERROR_TEXT "Red"
-#define PLAYER_TEXT "Blue"
-#define CURSOR_COLOR "#FF606F"
-
-#define DEF_RECORD_FILE "xchess.game"
-
-#define NUM_FLASHES 5
-#define FLASH_SIZE 10
-
-/* xchess.c */
-
-extern void main();
-extern bool debug;
-extern char *progname;
-extern char *proghost;
-extern char *piecenames[];
-extern char *colornames[];
-extern char *movetypenames[];
-extern char *dispname1, *dispname2;
-extern bool oneboard;
-extern bool bnwflag;
-extern bool progflag;
-extern bool blackflag;
-extern bool quickflag;
-extern int num_flashes;
-extern int flash_size;
-extern char *black_piece_color;
-extern char *white_piece_color;
-extern char *black_square_color;
-extern char *white_square_color;
-extern char *border_color;
-extern char *text_color;
-extern char *text_back;
-extern char *error_text;
-extern char *player_text;
-extern char *cursor_color;
-
-/* board.c */
-
-extern void board_setup();
-extern void board_drawall();
-extern void board_move();
-extern board *chessboard;
-extern void board_init();
-
-/* window.c */
-
-extern bool win_setup();
-extern void win_redraw();
-extern void win_restart();
-extern void win_drawboard();
-extern void win_drawpiece();
-extern void win_erasepiece();
-extern void win_process();
-extern void win_flash();
-extern windata *win1, *win2;
-extern bool win_flashmove;
-
-/* control.c */
-
-extern void button_pressed();
-extern void button_released();
-extern void move_piece();
-extern void prog_move();
-extern move *moves;
-extern move *foremoves;
-extern color nexttomove;
-extern void replay();
-extern void forward();
-extern void cleanup();
-extern void restart();
-extern bool noisyflag;
-
-/* valid.c */
-
-extern bool valid_move();
-
-/* record.c */
-
-extern void record_move();
-extern void record_reset();
-extern void record_save();
-extern void record_back();
-extern void record_init();
-extern void record_end();
-extern bool record_english;
-extern char *record_file;
-extern int movenum;
-extern bool saveflag;
-
-/* message.c */
-
-extern void message_init();
-extern void message_add();
-extern void message_send();
-
-/* clock.c */
-
-extern void clock_init();
-extern void clock_draw();
-extern void clock_update();
-extern void clock_switch();
-extern bool clock_started;
-extern int movesperunit;
-extern int timeunit;
-extern int whiteseconds;
-extern int blackseconds;
-
-/* button.c */
-
-extern void button_draw();
-extern void button_service();
-
-/* jail.c */
-
-extern void jail_init();
-extern void jail_draw();
-extern void jail_add();
-extern void jail_remove();
-
-/* program.c */
-extern bool program_init();
-extern void program_end();
-extern void program_send();
-extern void program_undo();
-extern move *program_get();
-
-/* parse.c */
-
-extern void load_game();
-extern move *parse_file();
-extern move *parse_move();
-extern move *parse_imove();
-extern bool loading_flag;
-extern bool loading_paused;
-
-/* popup.c */
-
-extern bool pop_question();
-
diff --git a/gnu/games/chess/Xchess/xchess.icon b/gnu/games/chess/Xchess/xchess.icon
deleted file mode 100644
index 78c68f1..0000000
--- a/gnu/games/chess/Xchess/xchess.icon
+++ /dev/null
@@ -1,28 +0,0 @@
-
-#define icon_width 48
-#define icon_height 48
-static char icon_bits[] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xc1, 0xff, 0xff, 0xff, 0xff, 0x83, 0x41, 0x00, 0x00, 0x00, 0x00, 0x82,
- 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82, 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82,
- 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82, 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82,
- 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82, 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82,
- 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82, 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82,
- 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82, 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82,
- 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82, 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82,
- 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82, 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82,
- 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82, 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82,
- 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82, 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82,
- 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82, 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82,
- 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82, 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82,
- 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82, 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82,
- 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82, 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82,
- 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82, 0x41, 0xf0, 0xf0, 0xf0, 0xf0, 0x82,
- 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82, 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82,
- 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82, 0x41, 0x0f, 0x0f, 0x0f, 0x0f, 0x82,
- 0x41, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x83,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0xc4, 0x89, 0x3c, 0xcf, 0x83,
- 0x41, 0x24, 0x88, 0x04, 0x41, 0x80, 0x81, 0x22, 0x88, 0x04, 0x41, 0x80,
- 0x01, 0x21, 0xf8, 0x1c, 0xcf, 0x83, 0x81, 0x22, 0x88, 0x04, 0x08, 0x82,
- 0x41, 0x24, 0x88, 0x04, 0x08, 0x82, 0x41, 0xc4, 0x89, 0x3c, 0xcf, 0x83,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
diff --git a/gnu/games/chess/Xchess/xchess_mask.cur b/gnu/games/chess/Xchess/xchess_mask.cur
deleted file mode 100644
index 6408b7e..0000000
--- a/gnu/games/chess/Xchess/xchess_mask.cur
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#define xchess_mask_width 16
-#define xchess_mask_height 16
-static char xchess_mask_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xf8, 0x00, 0xfe, 0x80, 0xff,
- 0xc0, 0xff, 0x60, 0xff, 0xb0, 0xfd, 0xd8, 0x66, 0x6c, 0x3b, 0x76, 0x1d,
- 0x98, 0x1d, 0xcc, 0x0c, 0x60, 0x00, 0x00, 0x00};
diff --git a/gnu/games/chess/gnuchess.book b/gnu/games/chess/gnuchess.book
deleted file mode 100644
index 7e8a3b5..0000000
--- a/gnu/games/chess/gnuchess.book
+++ /dev/null
@@ -1,3878 +0,0 @@
-!
-! Opening Library for CHESS
-!
-! Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
-! Copyright (c) 1987 by Stuart Cracraft and John Stanback
-!
-! This file is part of CHESS.
-!
-! CHESS is distributed in the hope that it will be useful,
-! but WITHOUT ANY WARRANTY. No author or distributor
-! accepts responsibility to anyone for the consequences of using it
-! or for whether it serves any particular purpose or works at all,
-! unless he says so in writing. Refer to the CHESS General Public
-! License for full details.
-!
-! Everyone is granted permission to copy, modify and redistribute
-! CHESS, but only under the conditions described in the
-! CHESS General Public License. A copy of this license is
-! supposed to have been given to you along with CHESS so you
-! can know your rights and responsibilities. It should be in a
-! file named COPYING. Among other things, the copyright notice
-! and this notice must be preserved on all copies.
-!
-!
-!
-! Four Knight's Game
-e2e4 e7e5
-g1f3 b8c6
-b1c3 g8f6
-f1b5 f8b4
-o-o o-o
-d2d3 b4c3
-b2c3 d7d6
-c1g5 d8e7
-f1e1 c6d8
-d3d4 d8e6
-! Giuoco Piano
-e2e4 e7e5
-g1f3 b8c6
-f1c4 f8c5
-d2d3 g8f6
-b1c3 d7d6
-c1g5 h7h6
-g5f6 d8f6
-c3d5 f6d8
-! Two Knights Defence
-e2e4 e7e5
-g1f3 b8c6
-f1c4 g8f6
-f3g5 d7d5
-e4d5 c6a5
-c4b5 c7c6
-d5c6 b7c6
-b5e2 h7h6
-! Two Knights Defence -- Max Lange Attack
-e2e4 e7e5
-g1f3 b8c6
-f1c4 g8f6
-d2d4 e5d4
-o-o f8c5
-e4e5 d7d5
-e5f6 d5c4
-f6g7 h8g8
-! Petrov's Defence
-e2e4 e7e5
-g1f3 g8f6
-f3e5 d7d6
-e5f3 f6e4
-d2d4 d6d5
-f1d3 f8d6
-o-o o-o
-c2c4 c8g4
-c4d5 f7f5
-b1c3 b8d7
-! Petrov's Defence
-e2e4 e7e5
-g1f3 g8f6
-d2d4 e5d4
-e4e5 f6e4
-d1d4 d7d5
-!
-! Vienna Game
-e2e4 e7e5
-b1c3 f8c5
-g1f3 d7d6
-d2d4 e5d4
-f3d4 g8f6
-c1g5 h7h6
-g5h4 b1c3
-!
-e2e4 e7e5
-b1c3 b8c6
-g1f3 g7g6
-d2d4 e5d4
-c3d5 f8g7
-c1g5 c6e7
-f3d4 c7c6
-d5c3 h7h6
-! - - - - - -
-! ECO C25/1-2
-e2e4 e7e5
-b1c3 f8c5
-f1c4 d7d6
-d2d3 c8e6
-c4e6 f7f6
-d1h5 e7d7
-c1e3 c5b6
-g1e2 b8c6
-o-o g8f6
-h5h3 d8e8
-!
-e2e4 e7e5
-b1c3 f8c5
-g1f3 d7d6
-d2d4 e5d4
-f3d4 g8f6
-c1g5 h7h6
-g5h4 b8c6
-d4c6 b7c6
-f1d3 e8e7
-o-o g7g5
-! ECO C25/3-9
-e2e4 e7e5
-b1c3 b8c6
-f2f4 e5f4
-g1f3 g7g5
-h2h4 g5g4
-f3g5 h7h6
-g5f7 e7f7
-d2d4 d7d5
-c1f4 f8b4
-f1e2 b4c3
-b2c3 g8f6
-!
-e2e4 e7e5
-b1c3 b8c6
-f2f4 e5f4
-g1f3 g7g5
-d2d4 g5g4
-f1c4 g4f3
-o-o d7d5
-e4d5 c8g4
-d1d2 c6e7
-d2f4 g8h6
-!
-e2e4 e7e5
-b1c3 b8c6
-f2f4 e5f4
-d2d4 d8h4
-e1e2 d7d5
-e4d5 c8g4
-g1f3 o-o-o
-d5c6 f8c5
-d1e1 h4h5
-c6b7 e8b8
-e2d2 g4f3
-!
-e2e4 e7e5
-b1c3 b8c6
-f2f4 e5f4
-d2d4 d8h4
-e1e2 d7d6
-g1f3 c8g4
-c1f4 o-o-o
-e2e3 h4h5
-f1e2 g7g5
-f3g5 f7f5
-h2h3 g4e2
-!
-e2e4 e7e5
-b1c3 b8c6
-g2g3 f8c5
-f1g2 a7a6
-g1e2 d7d6
-d1d3 c8g4
-h2h3 g4e6
-o-o g8e7
-c3d5 o-o
-c2c3 c5a7
-g1h2 f7f6
-!
-e2e4 e7e5
-b1c3 b8c6
-g2g3 f8c5
-f1g2 d7d6
-c3a4 g8e7
-a4c5 d6c5
-d2d3 o-o
-g2e3 b7b6
-d1d2 c8e6
-g1e2 d8d7
-o-o a8d8
-!
-e2e4 e7e5
-b1c3 b8c6
-f1c4 f8c5
-d1g4 g7g6
-d4f3 g8f6
-g1e2 d7d6
-d2d3 c8g4
-f3g3 h7h6
-f2f4 d7e7
-c3d5 f6d5
-g3g4 d5e3
-! ECO C26/1-10
-e2e4 e7e5
-b1c3 g8f6
-g2g3 c7c6
-f1g2 d7d6
-g1e2 b7b5
-o-o b8d7
-h2h3 d8c7
-g3g4 b5b4
-c3b1 a7a5
-a2a3 c8a6
-a3b4 a5b4
-!
-e2e4 e7e5
-b1c3 g8f6
-g2g3 d7d5
-e4d5 f6d5
-f1g2 c8e6
-g1f3 b8c6
-o-o f8e7
-f1e1 e7f6
-c3e4 o-o
-d2d3 f6e7
-a2a3 d5b6
-!
-e2e4 e7e5
-b1c3 g8f6
-g2g3 d7d5
-e4d5 f6d5
-f1g2 d5c3
-b2c3 f8d6
-g1f3 o-o
-o-o b8d7
-d2d3 a1b8
-a2a4 b7b6
-a4a5 c8b7
-!
-e2e4 e7e5
-b1c3 g8f6
-g2g3 f8b4
-f1g2 c7c6
-g1e2 o-o
-o-o d7d5
-e4d5 c6d5
-d2d4 e5d4
-e2d4 b8c6
-c1g5 b4e7
-f1e1 h7h6
-!
-e2e4 e7e5
-b1c3 g8f6
-g2g3 f8c5
-f1g2 b8c6
-g1e2 d7d6
-o-o o-o
-d2d3 c8e6
-c3d5 e6d5
-e4d5 c6e7
-c1g5 f6d7
-d3d4 e5d4
-!
-e2e4 e7e5
-b1c3 g8f6
-g2g3 f8c5
-f1g2 b8c6
-g1f3 d7d6
-d2d3 a7a6
-o-o o-o
-c1g5 h7h6
-g5e3 c5e3
-f2e3 d6d5
-e4d5 f6d5
-!
-e2e4 e7e5
-b1c3 g8f6
-g2g3 f8c5
-f1g2 o-o
-d2d3 f8e8
-g1e2 c7c6
-o-o d7d5
-e5d5 f6d5
-g1h1 c8g4
-h2h3 g4e6
-c3e4 c5e7
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f8b4
-g1e2 o-o
-d2d3 c7c6
-o-o d7d5
-c4b3 d5e4
-c3e4 b8d7
-e2g3 f6e4
-d3e4 d7c5
-d1h5 c5b3
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f8c5
-d2d3 d7d6
-c1g5 c8e6
-d1d2 b8d7
-g1e2 e6c4
-d3c4 h7h6
-g5e3 d8e7
-e2g3 c5e3
-f2e3 g7g6
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f8c5
-d2d3 d7d6
-f2f4 b8c6
-f4f5 b6d4
-g1f3 c7c6
-f3d4 c5d4
-d1f3 b7b5
-c4b3 a7a5
-a2a3 a5a4
-! ECO C27/1-2
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f6e4
-d1h5 e4d6
-h5e5 d8e7
-e5e7 f8e7
-c4b3 d6f5
-c3d5 e7d8
-d5e3 f5d4
-b3c4 c7c6
-g1e2 d4e2
-c4e2 d7d5
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f6e4
-d1h5 e4d6
-c4b3 b8c6
-c3b5 g7g6
-h5f3 f7f6
-b5c7 d8c7
-f3f6 b7b6
-g1f3 c8a6
-f3e5 c6e5
-f6e5 e8d8
-! ECO C27/3-5
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f6e4
-d1h5 e4d6
-c4b3 b8c6
-c3b5 g7g6
-h5f3 f7f5
-f3d5 d8e7
-b5c7 e8d8
-c7a8 b7b6
-d2d3 c8b7
-h2h4 f5f4
-d5f3 f8h6
-b3d5 b7a8
-f3g4 h8f8
-g1e2 e5e4
-c1f4 h6f4
-e2f4 e7e5
-g4g5 e5g5
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f6e4
-d1h5 e4d6
-c4b3 b8c6
-c3b5 g7g6
-h5f3 f7f5
-f3d5 d8e7
-b5c7 e8d8
-c7a8 b7b6
-g1f3 c8b7
-d3d4 c6d4
-c1g5 d4f3
-d5f3 e7g5
-b3d5 e5e4
-f3b3 b7a6
-b3a4 f8h6
-a4d4 h8e8
-g2g3 g5g4
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f6e4
-d1h5 e4d6
-c4b3 b8c6
-c3b5 g7g6
-h5f3 f7f5
-f3d5 d8e7
-b5c7 e8d8
-c7a8 b7b6
-a8b6 a7b6
-d5f3 c8b7
-d2d3 c6d4
-f3h3 e5e4
-c1e3 e4d3
-o-o-o d4c2
-e3b6 d8e8
-h3d3 f8h6
-c1b1 b7e4
-! ECO C27/6-7
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f6e4
-d1h5 e4d6
-c4b3 f8e7
-g1f3 b8c6
-f3e5 o-o
-o-o c6d4
-c3d5 d4b3
-a2b3 d6e8
-h5e2 e8f6
-e5c6 d7c6
-d5e7 g8h8
-e7c8 d8c8
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 f6e4
-d1h5 e4d6
-c4b3 f8e7
-g1f3 o-o
-h2h4 b8c6
-f3g5 h7h6
-h5g6 e7g5
-h4g5 d8g5
-d2d3 d6f5
-c1g5 c6d4
-c3d5 d4b3
-! ECO C28/1-7
-e2e4 e7e5
-b1c3 g8f6
-f1c4 b8c6
-f2f3 f6e4
-g1f3 e4c3
-d2c3 d8e7
-b2b4 d7d6
-o-o c8e6
-c4e6 e7e6
-b4b5 c6d8
-f4e5 d6e5
-f3e5 f8d6
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 b8c6
-d2d3 c6a5
-g1e2 a5c4
-d3c4 d7d6
-o-o c8e6
-b2b3 c7c6
-e2g3 g7g6
-h2h3 h7h5
-d1d3 f8e7
-c1e3 d8d7
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 b8c6
-d2d3 f8c5
-c1g5 h7h6
-g5h4 d7d6
-c3a4 c8e6
-a4c5 d6c5
-b2b3 e6c4
-b3c4 d8d6
-g1e2 c6d4
-h4f6
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 b8c6
-d2d3 f8b4
-g1e2 d7d5
-e4d5 f6d5
-c4d5 d8d5
-o-o d5d8
-f2f4 e5f4
-c1f4 o-o
-d1e1 b4d6
-e1g3 b6f4
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 b8c6
-d2d3 f8b4
-c1g5 d7d6
-g1e2 c8e6
-o-o h7h6
-g5f6 d8f6
-c3d5 e6d5
-c4d5 b4c5
-c2c3 o-o
-g1h1 c6e7
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 b8c6
-d2d3 f8b4
-c1g5 h7h6
-g5f6 b4c3
-b2c3 d8f6
-g1e2 d7d6
-d1d2 c1e6
-c4b5 f6g5
-e2g3 o-o
-b5c6 b7c6
-!
-e2e4 e7e5
-b1c3 g8f6
-f1c4 b8c6
-d2d3 f8b4
-g1f3 d7d6
-o-o b4c3
-b2c3 c6a5
-c4b3 a5b3
-a2b3 o-o
-c3c4 b7b6
-d1e2 f6d7
-c1g5 f7f6
-! ECO C29/1
-e2e4 e7e5
-b1c3 g8f6
-f1f4 d7d5
-d2d3 e5f4
-e4d5 f6d5
-c3d5 d8d5
-c1f4 f8d6
-f4d6 d5d6
-d1d2 o-o
-g1f3 c8g4
-f1e2 g4f3
-! ECO C29/2-12
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-d1f3 b8c6
-f1b5 e4c3
-b2c3 f8e7
-d2d4 o-o
-b5d3 f7f6
-f3h5 g7g6
-d3g6 h7g6
-h5g6 g8h8
-g6h6 h8g8
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-d1f3 f7f5
-d2d3 e4c3
-b2c3 d5d4
-f3g3 b8c6
-f1e2 c8e6
-e2f3 d8d7
-g1e2 f8c5
-c3c4 o-o
-o-o e6c4
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-d2d3 d8h4
-g2g3 e4g3
-g1f3 h4h5
-c3d5 c8g4
-f1g2 g3h1
-d5c7 e8d7
-c7h8 b8c6
-c1e3 f7f6
-d3d4 f6e5
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-d2d3 f1b4
-d3e4 d8h4
-e1e2 b8c6
-g1f3 c8g4
-c3d5 o-o-o
-c2c3 f7f5
-e5f6 h8e8
-c3b4 e8e4
-c1e3 g7f6
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-d2d3 e4c3
-b2c3 d5d4
-g1f3 b8c6
-c3d4 f8b4
-c1d2 b4d2
-d1d2 c6d4
-c2c3 d4f3
-g2f3 d8h4
-d2f2 h4f2
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-g1f3 f1b4
-d1e2 b4c3
-b2c3 o-o
-e2e3 b8c6
-f1d3 f7f5
-o-o c8e6
-c1a3 f8e8
-a1b1 a8b8
-a3b5 e6d7
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-g1f3 b8c6
-f1b5 f8c5
-d2d4 c5b4
-c1d2 b4c3
-b2c3 o-o
-o-o c1g4
-d1e1 f7f6
-d2e3 g4d7
-e5f6 d8f6
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-g1f3 f8c5
-d1e2 c5f2
-e1d1 e4c3
-d2c3 f2b6
-c3g5 d8d7
-d1d2 o-o
-a1d1 d7a4
-a2a3 c7c5
-d2c1 c8e6
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-g1f3 c8g4
-d1e2 e4g5
-h2h4 g5f3
-g2f3 g4e6
-d2d4 b8c6
-c1e3 f8e7
-e2f2 d8d7
-o-o-o o-o-o
-f1b5 a7a6
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-g1f3 f8e7
-d1e2 e4c3
-d2c3 o-o
-c1f4 c7c5
-o-o-o d8a5
-c1b1 b8c6
-a4b5 c8e6
-b5a5 f3g5
-!
-e2e4 e7e5
-b1c3 g8f6
-f2f4 d7d5
-f4e5 f6e4
-g1f3 f8e7
-d2d4 o-o
-f1d3 f7f6
-e5f6 e7f6
-o-o b8c6
-c3e4 d5e4
-d3e4 c6d4
-f3g5 c8f5
-c2c3 f7g5
-!
-! Vienna Game
-e2e4 e7e5
-b1c3 f8c5
-g1f3 d7d6
-d2d4 e5d4
-f3d4 g8f6
-c1g5 h7h6
-g5h4 b1c3
-! Three Knights Game
-e2e4 e7e5
-b1c3 b8c6
-g1f3 g7g6
-d2d4 e5d4
-c3d5 f8g7
-c1g5 c6e7
-f3d4 c7c6
-d5c3 h7h6
-! Bishop's Opening
-e2e4 e7e5
-f1c4 g8f6
-d2d4 e5d4
-g1f3 f6e4
-d1d4 e4c5
-o-o c5e6
-f1e1 c7c6
-b1c3 d7d5
-c4d3 f8e7
-! Ruy Lopez -- Classical Defence
-e2e4 e7e5
-g1f3 b8c6
-f1b5 f8c5
-c2c3 g8f6
-d2d4 e5d4
-e4e5 f6e4
-o-o d7d5
-! Ruy Lopez -- Birds Defence
-e2e4 e7e5
-g1f3 b8c6
-f1b5 c6d4
-b5a4 f8c5
-o-o d4f3
-d1f3 g8e7
-d2d3 o-o
-c1e3 c5b6
-b1c3 d7d6
-! Ruy Lopez -- Schliemann Defence
-e2e4 e7e5
-g1f3 b8c6
-f1b5 f7f5
-b1c3 f5e4
-c3e4 d7d5
-f3e5 d5e4
-e5c6 d8d5
-c2c4 d5d6
-c6a7 c8d7
-! Ruy Lopez -- Old Steinitz Defence
-e2e4 e7e5
-g1f3 b8c6
-f1b5 d7d6
-d2d4 c8d7
-b1c3 g8f6
-o-o f8e7
-f1e1 e5d4
-f3d4 o-o
-d4f5 f8e8
-! Ruy Lopez -- Old Steinitz Defence
-e2e4 e7e5
-g1f3 b8c6
-f1b5 d7d6
-d2d4 c8d7
-b1c3 g8f6
-b5c6 d7c6
-d1d3 e5d4
-f3d4 f8e7
-c1g5 c6d7
-! Ruy Lopez -- Modern Steinitz Defence
-e2e4 e7e5
-g1f3 b8c6
-f1b5 a7a6
-b5a4 d7d6
-d2d4 b7b5
-a4b3 c6d4
-f3d4 e5d4
-c2c3 d4c3
-b1c3 c8b7
-! Ruy Lopez -- Open Defence
-e2e4 e7e5
-g1f3 b8c6
-f1b5 a7a6
-b5a4 g8f6
-o-o f6e4
-d2d4 b7b5
-a4b3 d7d5
-d4e5 c8e6
-c2c3 f8c5
-b1d2 o-o
-! Ruy Lopez -- Open Defence
-e2e4 e7e5
-g1f3 b8c6
-f1b5 a7a6
-b5a4 g8f6
-o-o f8e7
-f1e1 b7b5
-a4b3 d7d6
-c2c3 o-o
-h2h3 c6a5
-b3c2 c2c4
-d2d4 d8c7
-! Ruy Lopez
-e2e4 e7e5
-g1f3 b8c6
-f1b5 a7a6
-b5c6 d7c6
-d2d4 e5d4
-d1d4 d8d4
-f3d4 c8d7
-c1e3 o-o-o
-b1d2 g8e7
-! Scotch Game
-e2e4 e7e5
-g1f3 b8c6
-d2d4 e5d4
-f3d4 f8c5
-c1e3 d8f6
-c2c3 g8e7
-b1d2 d7d6
-e3c5 d6c5
-! Philidor's Defence
-e2e4 e7e5
-g1f3 d7d6
-d2d4 g8f6
-b8c6 b1d2
-f8c5 f1e2
-o-o o-o
-d1e2 c7c6
-! Alekhine's Defence
-e2e4 g8f6
-e4e5 f6d5
-c2c4 d5b6
-d2d4 d7d6
-f2f4 d6e5
-f4e5 b8c6
-c1e3 c8f5
-b1c3 e7e6
-g1f3 f8e7
-! Alekhine's Defence
-e2e4 g8f6
-e4e5 f6d5
-d2d4 d7d6
-g1f3 c8g4
-f1e2 e7e6
-o-o f8e7
-h2h3 g4h5
-c2c4 d5b6
-! Kings Gambit Accepted
-e2e4 e7e5
-f2f4 e5f4
-g1f3 d7d6
-f1c4 h7h6
-d2d4 g7g5
-o-o f8g7
-c2c3 b8c6
-d1b3 d8e7
-! Ponziani's Opening
-e2e4 e7e5
-g1f3 b8c6
-c2c3 d7d5
-d1a4 g8f6
-f3e5 f8d6
-e5c6 b7c6
-d2d3 o-o
-c1g5 h7h6
-! Caro-Kann Defence
-e2e4 c7c6
-d2d4 d7d5
-e4d5 c6d5
-c2c4 g8f6
-b1c3 b8c6
-c1g5 e7e6
-c4c5 f8e7
-f1b5 o-o
-g1f3 f6e4
-! Caro-Kann Defence
-e2e4 c7c6
-d2d4 d7d5
-e4e5 c8f5
-f1d3 f5d3
-d1d3 e7e6
-b1c3 d8b6
-b1d2 c6c5
-d4c5 f8c5
-! Caro-Kann Defence
-e2e4 c7c6
-b1c3 d7d5
-g1f3 c8g4
-h2h3 g4f3
-d1f3 e7e6
-d2d4 g8f6
-f1d3 d5e4
-c3e4 d8d4
-c2c3 d4d8
-! French Defence -- Classical
-e2e4 e7e6
-d2d4 d7d5
-b1c3 g8f6
-c1g5 f8e7
-e4e5 f6d7
-g5e7 d8e7
-d1d2 o-o
-f2f4 c7c5
-g1f3 b8c6
-o-o-o c5c4
-! French Defence -- MacCutcheon
-e2e4 e7e6
-d2d4 d7d5
-b1c3 g8f6
-c1g5 c8g4
-e4e5 h7h6
-g5d2 g4f3
-g2f3 f6e4
-d1g4 e8f8
-h2h4 c7c5
-! French Defence -- Rubenstein
-e2e4 e7e6
-d2d4 d7d5
-b1c3 d5e4
-c3e4 b8d7
-g1f3 g8f6
-e4f6 d7f6
-f1d3 b7b6
-d1e2 c8b7
-c1g5 f8e7
-! French Defence -- Winawer
-e2e4 e7e6
-d2d4 d7d5
-b1c3 f8b4
-e4e5 c7c5
-a2a3 b4c3
-b2c3 b8d7
-d1g4 o-o
-g1f3 b8c6
-f1e3 f7f5
-! French Defence -- Tarrasch
-e2e4 e7e6
-d2d4 d7d5
-b1d2 b8c6
-g1f3 g8f6
-e4e5 f6d7
-d2b3 f7f6
-f1b5 f8e7
-c1f4 o-o
-! Sicilian Defence -- Dragon Variation
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-f1e2 g7g6
-c1e3 f8g7
-o-o o-o
-d4b3 c8e6
-f2f4 c6a5
-f4f5 e6c4
-! Sicilian Defence -- Dragon Variation
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g7g6
-b1c3 f8g7
-c1e3 g8f6
-f1c4 o-o
-! Sicilian Defence -- Boleslavsky Variation
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-f1e2 e7e5
-d4b3 f8e7
-o-o o-o
-c1e3 c8e6
-! Sicilian Defence -- Najdorf
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-d1d2 f8e7
-o-o-o o-o
-! Sicilian Defence -- Najdorf
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-f1e2 e7e5
-d4b3 f8e7
-o-o o-o
-f2f4 b7b5
-a2a3 c8b7
-! Sicilian Defence -- Najdorf
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-g2g3 e7e5
-d4e2 c8e6
-f1g2 b7b5
-o-o b8d7
-! Sicilian Defence -- Closed
-e2e4 c7c5
-b1c3 b8c6
-g2g3 g7g6
-f1g2 f8g7
-d2d3 e7e6
-c1e3 d7d6
-g1e2 c6d4
-d1d2 d8h4
-o-o g8d7
-! Nimzowitsch Defence
-e2e4 b8c6
-d2d4 d7d5
-e4e5 f7f6
-g1f3 c1g4
-f1e2 e7e6
-e5f6 g8f6
-c2c3 f8d6
-c1g5 d8d7
-! Queens Gambit Accepted
-d2d4 d7d5
-c2c4 d5c4
-g1f3 g8f6
-e2e3 e7e6
-f1c4 c7c5
-o-o a7a6
-d1e2 b7b5
-c4d3 c5d4
-e3d4 b8c6
-! Queens Gambit -- Catalan
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 f8e7
-f1g2 o-o
-o-o f6d7
-d1c2 c7c6
-b1d2 b7b6
-e2e4 c8b7
-b2b3 a8c8
-! Queens Gambit Declined -- Orthodox
-d2d4 d7d5
-c2c4 e7e6
-b1c3 g8f6
-c1g5 f8e7
-e2e3 o-o
-g1f3 b8d7
-a1c1 c7c6
-f8d3 d5c4
-f1c4 f6d5
-! Queens Gambit Declined -- Cambridge Springs
-d2d4 d7d5
-c2c4 e7e6
-b1c3 g8f6
-c1g5 b8d7
-e2e3 c7c6
-g1f3 d8a5
-f3d2 f8b4
-d1c2 o-o
-g5h4 c6c5
-! Queens Gambit Declined -- Exchange Var.
-d2d4 d7d5
-c2c4 e7e6
-b1c3 g8f6
-c1g5 b8d7
-c4d5 e6d5
-e2e3 c7c6
-f1d3 f8e7
-d1c2 o-o
-g1e2 f8e8
-! Queens Gambit Declined -- Semi-Tarrasch
-d2d4 d7d5
-c2c4 e7e6
-b1c3 g8f6
-g1f3 c7c5
-c4d5 c5d4
-d1d4 e6d5
-e2e4 b8c6
-f1b5 f6e4
-! Queens Gambit Declined -- Tarrasch
-d2d4 d7d5
-c2c4 e7e6
-b1c3 c7c5
-c4d5 e6d5
-g1f3 b8c6
-g2g3 g8f6
-f1g2 f8e7
-o-o o-o
-! Queens Gambit Declined -- Vienna
-d2d4 d7d5
-c2c4 e7e6
-g1f3 g8f6
-f1b5 f8b4
-b1c3 d5c4
-e2e4 c7c5
-e4e5 c5d4
-d1a4 b8c6
-o-o-o c1d2
-! Queens Gambit Declined -- Slav (Marshall Gambit)
-d2d4 d7d5
-c2c4 c7c6
-b1c3 e7e6
-e2e4 d4e4
-c3e4 f8b4
-c1d2 d8d4
-d2b4 d4e4
-f1e2 b8a6
-b4d6 b7b6
-! Queens Gambit --Slav (Krause)
-d2d4 d7d5
-c2c4 c7c6
-g1f3 g8f6
-b1c3 d5c4
-a2a4 c8f5
-f3e5 e7e6
-f2f3 f8b4
-c1g5 h7h6
-g5f6 d8f6
-e2e4 f5h7
-! Modern Benoni Counter Gambit
-d2d4 g8f6
-c2c4 c7c5
-d4d5 e7e6
-b1c3 e6d5
-c4d5 d7d6
-e2e4 g7g6
-f1d3 f8g7
-g1e2 o-o
-o-o a7a6
-a2a4 d8c7
-! Queens Pawn Game
-d2d4 d7d5
-g1f3 g8f6
-c1f4 c7c5
-e2e3 b8c6
-c2c3 d8b6
-d1c1 c8f5
-d4c5 b6c5
-b1d2 a8c8
-f3d4 c6d4
-e3d4 c5b6
-! Pirc-Robatsch Defence
-d2d4 d7d6
-e2e4 g8f6
-b1c3 g7g6
-c1g5 f8g7
-d1d2 b8d7
-o-o-o e7e5
-d4e5 d6e5
-g1f3 h7h6
-g5h4 g6g5
-h4g3 d8e7
-! Pirc-Robatsch Defence
-d2d4 d7d6
-e2e4 g8f6
-b1c3 g7g6
-f1c4 c7c6
-d1e2 f8g7
-g1f3 o-o
-c1g5 b7b5
-c4d3 d8c7
-! Queens Indian Defence
-d2d4 g8f6
-c2c4 e7e6
-g1f3 b7b6
-g2g3 c8b7
-f1g2 f8e7
-o-o o-o
-b1c3 f6e4
-d1c2 e4c3
-c2c3 d7d6
-c3c2 f7f5
-! Queens Indian Defence
-d2d4 g8f6
-c2c4 e7e6
-g1f3 b7b6
-e2e3 c8b7
-f1d3 f8e7
-b1c3 d7d5
-o-o o-o
-d1e2 b8d7
-! Nimzo-Indian Defence
-d2d4 g8f6
-c2c4 e7e6
-b1c3 f8b4
-d1c2 d7d5
-a2a3 b4c3
-c2c3 b8c6
-g1f3 f6e4
-c3b3 c6a5
-b3a4 c7c6
-! Nimzo-Indian Defence (Rubenstein)
-d2d4 g8f6
-c2c4 e7e6
-b1c3 f8b4
-e2e3 o-o
-f1d3 d7d5
-g1f3 c7c5
-o-o b8c6
-a2a3 b4c3
-b2c3 d5c4
-d3c4 d8c7
-! Nimzo-Indian Defence -- Samisch
-d2d4 g8f6
-c2c4 e7e6
-b1c3 f8b4
-a2a3 b4c3
-b2c3 o-o
-f2f3 d7d5
-c4d5 e6d5
-e2e3 c8f5
-g1e2 b8d7
-e2g3 f5g6
-! Nimzo-Indian Defence
-d2d4 g8f6
-c2c4 e7e6
-b1c3 f8b4
-c1d2 o-o
-e2e3 d7d5
-g1f3 c7c5
-a2a3 b4c3
-d2c3 f6e4
-a1c1 e4c3
-c1c3 c5d4
-! Grunfeld Defence
-d2d4 g8f6
-c2c4 g7g6
-b1c3 d7d5
-c4d5 f6d5
-e2e4 d5c3
-b2c3 c7c5
-f1c4 f8g7
-g1e2 o-o
-o-o c5d4
-c3d4 b8c6
-! Grunfeld Defence -- Smyslov
-d2d4 g8f6
-c2c4 g7g6
-b1c3 d7d5
-g1f3 f8g7
-d1b3 d5c4
-b3c4 o-o
-e2e4 c8g4
-c1e3 f6d7
-o-o-o b8c6
-! Grunfeld Defence
-d2d4 g8f6
-c2c4 g7g6
-b1c3 d7d5
-c1f4 f8g7
-d2d3 o-o
-c4d5 f6d5
-c3d5 d8d5
-f4c7 b8c6
-! Kings Indian Defence -- Classical
-d2d4 g8f6
-c2c4 g7g6
-b1c3 f8g7
-e2e4 d7d6
-g1f3 o-o
-f1e2 e7e5
-o-o b8c6
-c1e3 f8e8
-d4e5 d6e5
-! Kings Indian Defence -- 4 pawns attack
-d2d4 g8f6
-c2c4 g7g6
-b1c3 f8g7
-e2e4 d7d6
-f2f4 c7c5
-g1f3 o-o
-d4d5 e7e6
-f1d3 e6d5
-c4d5 d8b6
-! Kings Indian Defence -- Samisch
-d2d4 g8f6
-c2c4 g7g6
-b1c3 f8g7
-e2e4 d7d6
-f2f3 o-o
-c1e3 e7e5
-d4d5 c7c6
-g1e2 c6d5
-c3d5 f6d5
-! Kings Indian Defence -- Main Line
-d2d4 g8f6
-c2c4 g7g6
-g2g3 f8g7
-f1g2 o-o
-b1c3 d7d6
-g1f3 b8d7
-o-o e7e5
-e2e4 c7c6
-h2h3 d8b6
-! Kings Indian Defence
-d2d4 g8f6
-c2c4 g7g6
-b1c3 f8g7
-g1f3 o-o
-c1f4 d7d6
-h2h3 b8d7
-e2e3 c7c6
-! Dutch Defence
-d2d4 f7f5
-g2g3 e7e6
-f1g2 g8f6
-g1f3 f8e7
-o-o o-o
-c2c4 d7d6
-b1c3 d8e8
-d1c2 e8h5
-b2b3 b8c6
-c1a3 a7a5
-! English Opening
-c2c4 e7e5
-b1c3 g8f6
-g1f3 b8c6
-e2e4 f8b4
-d2d3 d7d6
-f1e2 o-o
-o-o b4c3
-b2c3 d8e7
-! English Opening
-c2c4 g8f6
-b1c3 d7d5
-c4d5 f6d5
-e2e4 d5f4
-f1c4 c8e6
-c4e6 f7e6
-! English Opening
-c2c4 e7e5
-b1c3 g8f6
-g1f3 b8c6
-g2g3 d7d5
-c4d5 f6d5
-f1g2 d5b6
-o-o f8e7
-d2d3 o-o
-c1e3 f7f5
-! Reti -- Accepted
-g1f3 d7d5
-c2c4 d5c4
-e2e3 c7c5
-f1c4 e7e6
-o-o g8f6
-b2b3 b8c6
-c1b2 a7a6
-a2a4 f8e7
-! Reti -- Neo Catalan
-g1f3 d7d5
-c2c4 e7e6
-g2g3 g8f6
-f1g2 f8e7
-o-o o-o
-b2b3 c7c5
-c4d5 f6d5
-c1b2 b8c6
-d2d4 b7b6
-b1c3 d5c3
-! Reti -- Barcza
-g1f3 d7d5
-g2g3 g8f6
-f1g2 g7g6
-o-o f8g7
-d2d3 o-o
-b1d2 b8c6
-e2e4 e7e5
-c2c3 a7a5
-f1e1 d5e4
-d3e4 f6d7
-! Sicilian Najdorf
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-a1b1 b2a3
-e4e5 d6e5
-f4e5 f6d7
-c3e4 h7h6
-g5h4 a3a2
-b1b3 b8c6
-d4c6 b7c6
-e4d6 f8d6
-e5d6 a6a5
-f1e2 a5a4
-b3c3 a2a1
-e2d1 a4a3
-o-o a3a2
-d2e3 o-o
-! # Sicilian Defense col. 2f p. 176 MCO 12. (Incomplete game)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-a1b1 b2a3
-e4e5 d6e5
-f4e5 f6d7
-f1c4 f8b4
-b1b3 a3a5
-o-o o-o
-g5f6 d7f6
-e5f6 f8d8
-b3b4 a5b4
-d2g5 g7g6
-f1f4 b7b6
-f4h4 b4f8
-g1f1 a8a7
-! # Sicilian Defense col. 3g p. 176 MCO (Incomplete Game)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-a1b1 b2a3
-e4e5 d6e5
-f4e5 f6d7
-f1c4 a3a5
-c4e6 f7e6
-d4e6 d7e5
-c3d5 a5d2
-e1d2 e8d7
-e6c7 a8a7
-h1e1 e5c4
-! # Parma vs. Fischer, Havana 1965. Sicilian Defense col. 4j p. 176
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-a1b1 b2a3
-g5f6 g7f6
-f1e2 f8g7
-o-o f6f5
-f1d1 b8c6
-d4c6 g7c3
-d2e3 b7c6
-b1b3 a3c5
-e3c5 d6c5
-b3c3 f5e4
-c3c5 c8d7
-c5e5 f7f5
-g2g4 h8g8
-g1g2 f5g4
-e5e4 h7h5
-g2g3 e8e7
-! # Matanovic, Sicilian Defense col. 5k p. 176 MCO (partial game)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-a1b1 b2a3
-g5f6 g7f6
-f1e2 b8c6
-d4c6 b7c6
-o-o a3a5
-g1h1 f8e7
-f4f5 e6f5
-e4f5 c8f5
-e2a6 a5a6
-f1f5 d6d5
-b1e1 a6b7
-d2h6 o-o-o
-h6h3 b7d7
-c3a4
-! # col. 6a
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-a1b1 b2a3
-f4f5 b8c6
-f5e6 f7e6
-d4c6 b7c6
-e4e5 d6e5
-g5f6 g7f6
-c3e4 f8e7
-f1e2 h7h6
-c2c4 f6f5
-b1b3 a3a4
-o-o f5e4
-g1h1 c6c5
-d2c3 a4c6
-c3e5 h8f8
-! # col. 7d
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-a1b1 b2a3
-f4f5 b8c6
-f5e6 f7e6
-d4c6 b7c6
-e4e5 f6d5
-c3d5 c6d5
-f1e2 d6e5
-o-o a8a7
-g1h1 a3c5
-c2c4 d5d4
-e2h5 g7g6
-h5d1 f8e7
-d1a4 e8d8
-f1f7 h7h6
-g5h6 e5e4
-! # col. 8
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-d4b3 b8d7
-g5f6 g7f6
-f1e2 h7h5
-o-o b2a3
-a1d1 f8e7
-g1h1 d7c5
-e2f3 a8a7
-b3c5 a3c5
-! # col. 9g; Minic-Barczay, Varna 1967 (partial game)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-d4b3 b8c6
-f1d3 d6d5
-g5f6 g7f6
-c3a4 b2a3
-a4b6 d5d4
-o-o a8b8
-f4f5 a3b4
-d2b4 f8b4
-b6c8 b8c8
-f5e6 f7e6
-f1f6 e8e7
-a1f1 c6e5
-! # col. 10i; Matulovic-Kavalek, Sousse 1967
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d1d2 b6b2
-d4b3 b8c6
-a1b1 b2a3
-g5f6 g7f6
-f1d3 f8g7
-o-o o-o
-f1f3 g8h8
-f3h3 c6e7
-f4f5 e6f5
-e4f5 c8f5
-d3f5 e7f5
-c3d5
-! # col. 11b; Joppen-Bronstein, Belgrade 1954 (partial game)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d4b3 b6e3
-d1e2 e3e2
-f1e2 b8d7
-a2a4 f8e7
-o-o-o h7h6
-g5h4 e6e5
-f4f5 b7b6
-e2f3 c8b7
-! # col. 12e; Rajkovic-Udovcic, Yugoslav Chp. 1962 (partial game)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 d8b6
-d4b3 b8d7
-d1f3 f8e7
-o-o-o b6c7
-f1d3 h7h6
-g5h4 g7g5
-f4g5 d7e5
-f3e2 f6g4
-b3d4 h6g5
-h4g3 c8d7
-d4f3 c7c5
-! # col. 13i; Fischer-Vukovic (partial game)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 f8e7
-d1f3 d8c7
-o-o-o b8d7
-g2g4 b7b5
-g5f6 d7f6
-g4g5 f6d7
-a2a3 a8b8
-h2h4 b5b4
-a3b4 b8b4
-f1h3 o-o
-d4e6 f7e6
-h3e6 g8h8
-c3d5 c7c4
-e6f5 f8f5
-e4f5 c8b7
-h1e1 e7f8
-! # col. 14m Parma-Tatai, Athens 1968 (partial game)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 b7b5
-e4e5 d6e5
-f4e5 d8c7
-e5f6 c7e5
-f1e2 e5g5
-d1d3 a8a7
-c3e4 g5e5
-d4f3 e5b2
-o-o a7d7
-d3e3 c8b7
-a1b1 b2c2
-f3g5 c2c6
-f6g7 f8g7
-! # col. 15; slight advantage for white.
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-f2f4 h7h6
-g5h4 d8b6
-d1d3 b6b2
-a1b1 b2a3
-e4e5 f6d5
-c3d5 a3d3
-f1d3 e6d5
-e5e6
-! # col. 16c; Fichtl-Dolezal, CSSR 1954
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-d1f3 b8d7
-o-o-o d8c7
-f3g3 b7b5
-f1b5 a6b5
-d4b5 c7b8
-b5d6 f8d6
-g3d6 b8d6
-d1d6 h7h6
-g5f6 d7f6
-h1d1 c8b7
-f2f3
-! # col. 17e; Vasyukov-Zukharov, USSR 1960
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 e7e6
-d1d2 b8c6
-o-o-o h7h6
-g5h4 f6e4
-d2f4 e4g5
-d4c6 b7c6
-f4a4 d8b6
-f2f4 g5h7
-f4f5 a8b8
-f5e6 c8e6
-f1c4
-! # col. 18g (somewhat questionable)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1g5 b8d7
-f1c4 d8a5
-d1d2 e7e6
-o-o-o b7b5
-c4b3 c8b7
-h1e1 a8c8
-e4e5 d7e5
-d4e6 f7e6
-e1e5 d6e5
-g5f6
-! # col. 19m; Yanofsky-Bolbochan, Stockholm 1962
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-f1e2 e7e5
-d4b3 f8e7
-o-o o-o
-f2f4 b7b5
-a2a3 c8b7
-e2f3 b8d7
-g2g3 a8c8
-d1e1 d7b6
-g1h1 b6c4
-b3d2 d8d7
-d2c4 c8c4
-c1d2 d6d5
-! # col. 20p
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-f1e2 e7e5
-d4b3 f8e7
-o-o o-o
-c1e3 b8d7
-a2a4 b7b6
-d1d2 c8b7
-f2f3 d8c7
-f1d1 f8c8
-b3c1
-! # col. 21b
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-g2g3 e7e5
-d4e2 f8e7
-f1g2 o-o
-o-o b7b5
-h2h3 c8b7
-c3d5 f6d5
-e4d5 b8d7
-a2a4 d7c5
-e2c3 d8d7
-a4b5 a6b5
-a1a8 f8a8
-! # col. 22
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-f2f4 e7e6
-d1f3 d8b6
-d4b3 b8c6
-f1d3 f8e7
-c1e3 b6c7
-o-o o-o
-a1e1 c6b4
-! # col. 23f
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-c1e3 e7e5
-d4b3 c8e6
-d1d2 b8d7
-f2f3 f8e7
-g2g4 b7b5
-g4g5 f6h5
-o-o-o o-o
-h1g1 a8c8
-c3e2
-! # col. 24k; Kotkov-Polugayevski, USSR 1959
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-f1c4 e7e6
-o-o f8e7
-c4b3 o-o
-f2f4 b7b5
-a2a3 c8b7
-f4f5 e6e5
-d4e2 b8d7
-e2g3 d7c5
-b3d5 b7d5
-e4d5 a8c8
-c1g5 c5d7
-g5f6 d7f6
-c3e4 c8c4
-! # col. 25o; Ciocaltea-Minic, Bucharest 1966
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 a7a6
-f1c4 e7e6
-c4b3 b7b5
-f2f4 c8b7
-f4f5 e6e5
-d4e2 b8d7
-o-o f8e7
-e2g3 a8c8
-c1g5 o-o
-! # col. 26e
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-c1e3 f8g7
-f2f3 o-o
-d1d2 b8c6
-o-o-o d6d5
-e4d5 f6d5
-d4c6 b7c6
-c3d5 c6d5
-d2d5 d8c7
-d5a8 c8f5
-a8f8 g8f8
-d1d2 h7h5
-f1e2 f8g8
-a2a3 c7b8
-! # col. 27i; Bikhovski-Gik, Moscow 1968
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-c1e3 f8g7
-f2f3 o-o
-d1d2 b8c6
-f1c4 c8d7
-o-o-o d8a5
-c4b3 f8c8
-g2g4 c6e5
-h2h4 e5c4
-b3c4 c8c4
-d4b3 a5a6
-h4h5 c4c3
-b2c3 d7e6
-c1b1 a8c8
-e3d4 c8c4
-h5g6 h7g6
-! # col. 28k
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-c1e3 f8g7
-f2f3 o-o
-d1d2 b8c6
-f1c4 c8d7
-o-o-o d8a5
-c4b3 f8c8
-h2h4 c6e5
-h4h5 f6h5
-e3h6 e5d3
-c1b1 d3b2
-b1b2 g7h6
-d2h6 c8c3
-g2g4 h5f6
-g4g5 f6h5
-! # col. 29m; Ostojic-Honfi, Monte Carlo 1968
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-c1e3 f8g7
-f2f3 o-o
-d1d2 b8c6
-f1c4 c8d7
-o-o-o d8a5
-c4b3 f8c8
-c1b1 c6e5
-h2h4 e5c4
-b3c4 c8c4
-d4b3 a5c7
-h4h5 c4c3
-d2c3 c7c3
-b2c3 f6h5
-e3d4 d7e6
-h1e1 h5f6
-e4e5 d6e5
-d4e5 f6d5
-b1b2 a8c8
-! # col. 30p; Karpov-Korchnoi, 2nd match game 1974.
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-c1e3 f8g7
-f2f3 o-o
-d1d2 b8c6
-f1c4 c8d7
-h2h4 a8c8
-c4b3 c6e5
-h4h5 f6h5
-o-o-o e5c4
-b3c4 c8c4
-g2g4 h5f6
-d4e2 d8a5
-e3h6 g7h6
-d2h6 f8c8
-d1d3 c4c5
-g4g5 c5g5
-d3d5 g5d5
-c3d5 c8e8
-e2c3 d7c6
-e4e5 c6d5
-e5f6 e7f6
-h6h7 g8f8
-h7h8 f8e7
-c3d5
-! # col. 31
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-g2g3 b8c6
-f1g2 c6d4
-d1d4 f8g7
-o-o o-o
-d4d3 c8e6
-c3d5 f6d5
-e4d5 e6f5
-! # col. 32c; Pulsen-Cortlever, Buenos Aires 1939.
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-c1g5 f8g7
-d1d2 b8c6
-o-o-o o-o
-d4b3 f8e8
-f2f3 a7a6
-c1b1 b7b5
-h2h4 c8e6
-g2g4 c6e5
-! # col. 33h
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f2f4 b8c6
-d4c6 b7c6
-e4e5 d6e5
-d1d8 e8d8
-f4e5 f6g4
-c1f4 c8e6
-c3e4 f8g7
-e4g5 g7e5
-o-o-o d8c7
-g5e6 f7e6
-f4e5 g4e5
-d1e1 c7d6
-g2g3 e5g4
-f1c4 e6e5
-e1e2
-! # col. 34j
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f2f4 b8c6
-f1b5 d8c7
-c3d5 f6d5
-e4d5 a7a6
-b5c6 b7c6
-d4c6 c8b7
-c1e3 f8g7
-e3d4 g7d4
-d1d4 o-o
-o-o b7c6
-! # col. 35l
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f2f4 b8d7
-f1e2 f8g7
-c1e3 o-o
-e2f3 d7b6
-d1e2 e7e5
-d4b3 f6g4
-f3g4 d8h4
-g2g3 h4g4
-e2g4 c8g4
-! # col. 36a
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-c1e3 b8c6
-o-o o-o
-d4b3 c8e6
-f2f4 c6a5
-f4f5 e6c4
-b3a5 c4e2
-d1e2 d8a5
-g2g4 a8c8
-g4g5 c8c3
-g5f6 c3e3
-e2e3 g7f6
-c2c3 f8c8
-a2a3 c8c4
-a1e1 b7b5
-! # col. 37c; Domnitz-Kraidman, Tel Aviv 1964
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-c1e3 b8c6
-o-o o-o
-d4b3 c8e6
-f2f4 d8c8
-d1e1 f6g4
-e2g4 e6g4
-f4f5 g6f5
-h2h3 g4h3
-g2h3 f5e4
-e1h4 f7f5
-g1h1 f8f7
-f1g1 c6e5
-c3d5 c8d7
-b3d4 e5g6
-g1g6 h7g6
-a1g1 e7e5
-g1g6 d7d8
-e3g5 d8a5
-d5f6 g8f8
-d4e6
-! # col. 38f; Unzicker-Geller, W. Germany-USSR 1960 (drawn)
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-c1e3 b8c6
-o-o o-o
-d1d2 f6g4
-e2g4 c8g4
-f2f4 c6d4
-e3d4 e7e5
-d4e3 e5f4
-f1f4 g4e6
-f4f2 g7e5
-e3d4 a8c8
-a1d1 d8a5
-a2a3 c8c4
-c3e2 a5d2
-d1d2
-! # col. 39
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-c1e3 b8c6
-o-o o-o
-f2f4 d8b6
-d1d3 f6g4
-c3d5 g7d4
-e2g4 d4e3
-d3e3 b6b2
-g4c8 a8c8
-a1b1 b2a2
-b1b7 e7e6
-! # col. 40h
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-c1e3 b8c6
-o-o o-o
-f2f4 d8b6
-e4e5 d6e5
-f4e5 c6e5
-d4f5 b6b2
-f5e7 g8h8
-e3d4 b2b4
-d4e5 b4e7
-d1d4 f6e8
-e5g7 e8g7
-e2d3 c8e6
-! # col. 41b; Smyslov-Botvinnik, match 1958
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-c1e3 b8c6
-h2h4 h7h5
-f2f3 o-o
-d1d2 d6d5
-d4c6 b7c6
-e4e5 f6e8
-f3f4 f7f6
-o-o-o f6e5
-f4e5 g7e5
-g2g4 c8g4
-e2g4 h5g4
-h4h5 g6g5
-! # col. 42d; Van den Burg-Rajkovic, Orebro 1966
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-c1e3 b8c6
-d4b3 o-o
-f2f4 c6a5
-g2g4 b7b6
-g4g5 f6d7
-o-o c8b7
-e2d3 a8c8
-b3a5 b6a5
-d1e1 d7c5
-f4f5 g7e5
-e1h4 e7e6
-f5f6 h7h5
-d3e2 g8h7
-e2h5 f8h8
-! # col. 43f
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-c1e3 b8c6
-d4b3 o-o
-f2f4 c6a5
-g2g4 c8e6
-g4g5 f6d7
-e3d4 f7f6
-h2h4 f6g5
-d4g7 g8g7
-b3d4 e6g8
-f4f5 d8b6
-! # col. 44
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-o-o b8c6
-d4b3 o-o
-f2f4 b7b5
-e2f3 b5b4
-c3d5 f6d5
-e4d5 c6a5
-b3a5 d8a5
-f1e1 f8e8
-! # col. 45i; Smyslov-Korchnoi, Moscow 1960
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 g7g6
-f1e2 f8g7
-d4b3 b8c6
-g2g4 b7b6
-f2f4 c8b7
-e2f3 o-o
-h2h4 a7a5
-a2a4 c6b4
-h4h5 d6d5
-e4e5 f6g4
-b3d4 g4h6
-h5g6 f7g6
-d4e6 d8d7
-e6f8 a8f8
-c3b5 d5d4
-! # col. 46
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-f3d4 g8f6
-f2f3 e7e5
-f1b5 c8d7
-b5d7 b8d7
-d4f5 d6d5
-e4d5 d8a5
-b1c3 d7b6
-! # col. 47h; Schweber-Najdorf, Buenos Aires 1970
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-d1d4 b8c6
-f1b5 c8d7
-b5c6 d7c6
-c2c4 g8f6
-b1c3 e7e6
-c1g5 f8e7
-o-o o-o
-f1e1 h7h6
-g5h4 a7a6
-a1d1 d8a5
-d4d2 a5b6
-f3d4 a8c8
-e1e3 f8e8
-! # col. 48i
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-d1d4 a7a6
-c1e3 g8f6
-b1c3 b8c6
-d4b6 d8b6
-e3b6 g7g6
-o-o-o f8h6
-c1b1 o-o
-f3d4 c8d7
-f2f3 c6e5
-d4b3 f8c8
-b3a5 d7c6
-c3d5 c6d5
-e4d5 f6d7
-b6d4 b7b6
-! # col. 49m; Fischer-Korchnoi, Buenos-Aires 1960
-e2e4 c7c5
-g1f3 d7d6
-d2d4 c5d4
-c2c3 d4c3
-b1c3 b8c6
-f1c4 e7e6
-o-o a7a6
-d1e2 g8f6
-f1d1 d8c7
-c1g5 f8e7
-a1c1 o-o
-c4b3 h7h6
-g5f4 e6e5
-f4e3 c7d8
-c3d5 f6d5
-b3d5 c8d7
-! # col. 50
-e2e4 c7c5
-g1f3 d7d6
-d2d4 g8f6
-d4c5 f6e4
-c5d6 e7e6
-d1d3 e4d6
-b1c3 b8c6
-c1f4 f7f6
-o-o-o e6e5
-c3b5
-! # col. 51c; Pfeiffer-Kottnauer, Helsinki 1952
-e2e4 c7c5
-g1f3 d7d6
-c2c3 g8f6
-f1d3 b8c6
-d3c2 c8g4
-h2h3 g4h5
-d2d3 d6d5
-d1e2 e7e6
-b1d2 f8e7
-d2f1 d8a5
-! # col. 52d; Brasket-Evans, U.S. Open Chp. 1960
-e2e4 c7c5
-g1f3 d7d6
-c2c3 g8f6
-d2d3 g7g6
-g2g3 f8g7
-b1d2 o-o
-f1g2 e7e5
-o-o b8c6
-a2a4 h7h6
-d2b1 d8a5
-! # col. 53h; Ciocaltea-Fischer, Varna 1962
-e2e4 c7c5
-g1f3 d7d6
-g2g3 g7g6
-f1g2 f8g7
-o-o b8c6
-c2c3 e7e5
-d2d3 g8e7
-f3h4 o-o
-f2f4 e5f4
-g3f4 f7f5
-b1d2 g8h8
-d2f3
-! # col. 54k; Tarjan-Mednis, U.S. Chp. 1973
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 e7e6
-f1e2 g7g6
-d4b3
-! e2e4 c7c5
-g1f3 d7d6
-b1c3 g8f6
-e4e5 d6e5
-f3e5 a7a6
-f1e2 e7e6
-o-o d8c7
-e5c4 b7b5
-c4e3 f8d6
-h2h3 b8c6
-a2a4 b5b4
-c3b1 c8b7
-d2d3 c6d4
-b1d2 o-o
-d2f3 d4e2
-d1e2 f8e8
-e3c4 e6e5
-f3g5 e5e4
-c4d6 c7d6
-g5e4 f6e4
-d3e4 b7e4
-c1e3 d6c6
-! # col. 55o; Medina-Pomar, Santander 1947
-e2e4 c7c5
-g1f3 d7d6
-b2b4 c5b4
-d2d4 g8f6
-f1d3 d6d5
-b1d2 d5e4
-d2e4 b8d7
-e4g5 d8c7
-c2c4 h7h6
-g5h3 g7g5
-h3g1 f8g7
-g1e2 e7e5
-e2g3 e5e4
-d1e2 o-o
-! # col. 56e; del Corral-Benko, Mallorca 1968
-e2e4 c7c5
-g1f3 d7d6
-f1b5 c8d7
-b5d7 d8d7
-o-o b8c6
-f1e1 g8f6
-c2c3 e7e6
-d2d3 f8e7
-a2a4 o-o
-b1d2 d7c7
-! # col. 57g; Radovich-Lombardy, Leipzig 1960
-e2e4 c7c5
-g1f3 d7d6
-f1b5 b8c6
-o-o a7a6
-b5c6 b7c6
-d2d4 c5d4
-d1d4 e7e5
-d4d3 f7f6
-c2c4 c8e6
-b1c3 d8c7
-! # col. 58j; Gurgenidze-Osnos, Alma Ata 1969
-e2e4 c7c5
-g1f3 b8c6
-f1b5 e7e6
-b1c3 g8e7
-o-o a7a6
-b5c6 e7c6
-d2d4 c5d4
-f3d4 d7d6
-d4c6 b7c6
-d1g4 g7g6
-e4e5 d6d5
-c1g5 f8e7
-! # col. 59m
-e2e4 c7c5
-g1f3 b8c6
-f1b5 g7g6
-o-o f8g7
-c2c3 g8f6
-f1e1 o-o
-d2d4 c5d4
-c3d4 d7d5
-e4e5 f6e4
-b1c3 e4c3
-b2c3 c6a5
-c1g5 c8f5
-f3d2 f8e8
-! # col. 60o
-e2e4 c7c5
-g1f3 b8c6
-f1b5 g7g6
-o-o f8g7
-f1e1 e7e5
-f1e1 o-o
-d2d4 c5d4
-c3d4 d7d5
-e4e5 f6e4
-b1c3 e4c3
-b2c3 c6a5
-c1g5 c8f5
-f3d2 f8e8
-! # col. 61c; Barczay-Szilagyi, Hungarian Chp. 1969
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-g5f6 g7f6
-d4b3 h8g8
-g2g3 f6f5
-d1d2 f8g7
-e4f5 d7f5
-f1g2 d8d7
-o-o g7c3
-b2c3 f5h3
-g2h3 d7h3
-! # col. 62e
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d4b3 h7h6
-g5h4 a8c8
-f1e2 g7g5
-h4g3 h6h5
-h2h4 g5g4
-g3f4 c6e5
-d1d4 e5g6
-f4g5 f8g7
-o-o
-! # col. 63g; Matulovic-Masic, Sombor 1968
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-f2f4 d8b6
-d4b3 f6g4
-d1e2 c6d4
-c3d5 d4e2
-d5b6 a7b6
-e1e2 h7h6
-g5h4 g7g5
-h4g3 g5f4
-g3f4 f8g7
-c2c3 d7c6
-! # col. 64j; Liberzo-Stein, USSR Chp. 1969-70. Complete game (draw).
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d1d3 c6d4
-d3d4 d8a5
-f2f4 e7e5
-d4d3 f8e7
-o-o-o d7c6
-c1b1 e5f4
-g5f4 o-o
-f1e2 f8e8
-e2f3 e7f8
-c3d5 f6d7
-d3d2 a5d2
-d1d2 a8c8
-h1d1 d7e5
-b2b3
-! # col. 65m; Bronstein-Stein, USSR 1969
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d1d3 c6d4
-d3d4 d8a5
-f1e2 e7e5
-d4d3 a5c7
-e2g4 f8e7
-g5f6 e7f6
-o-o-o f6e7
-c3b5 d7b5
-d3b5 c7c6
-b5d5 c6d5
-d1d5
-! # col. 66b; Benko-R. Byrne, US Open Chp. 1968
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d1d2 a8c8
-o-o-o c6d4
-d2d4 d8a5
-g5d2 a7a6
-f1c4 a5c5
-d4c5 c8c5
-c4b3 g7g6
-d2e3 c5c8
-e3d4 f8g7
-c3d5 f6h5
-d4g7 h5g7
-e4e5 c8c6
-d5b4 c6b6
-! # col. 66b alternate; Polgar-Nagy, Hungarian Chp. 1972
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d1d2 a8c8
-o-o-o c6d4
-d2d4 d8a5
-g5d2 e7e5
-d4d3 a7a6
-c1b1 h7h6
-f2f3 a5c7
-g2g3 f8e7
-h2h4 b7b5
-! # col. 67c; Suetin-Gheorghiu, Hastings 1967/8. Draw.
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d1d2 a8c8
-o-o-o c6d4
-d2d4 d8a5
-g5e3 a7a6
-f2f3 e7e6
-d4b6 a5b6
-e3b6 d7c6
-f1c4 c6e4
-c4e6 f7e6
-c3e4 f6e4
-f3e4 f8e7
-h1f1 e7g5
-c1b1 e8e7
-c2c3 h8f8
-b1c2 f8f1
-d1f1 c8f8
-! # col. 68d
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d1d2 a8c8
-o-o-o c6d4
-d2d4 d8a5
-f2f4 e7e6
-e4e5 d6e5
-f4e5 c8c3
-g5d2 a5a2
-d2c3 g7g6
-! # col. 69fA1; Janosevic-Larsen, Belgrade 1964
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d1d2 a8c8
-o-o-o c6d4
-d2d4 d8a5
-f2f4 c8c3
-b2c3 e7e5
-d4b4 a5b4
-c3b4 f6e4
-f1c4 b7b5
-c4d5 e4c3
-f4e5 h7h6
-g5h4 g7g5
-h4g3 c3e2
-c1b2 e2g3
-h2g3 f8g7
-! # col. 70g; Bednarski-Simagin, Polanica Zdroj 1968
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 c8d7
-d1d2 a8c8
-o-o-o c6d4
-d2d4 c8c3
-d4c3 f6e4
-c3e3 e4g5
-e3g5 d8b6
-f1c4 e7e6
-g5g3 g7g6
-c4b3 f8e7
-h2h4 h7h5
-h1e1 b6b4
-g3e3 a7a5
-e3d4
-! # col. 71d
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 f8e7
-o-o-o c6d4
-d2d4 o-o
-f2f4 h7h6
-g5h4 d8a5
-f1c4 e6e5
-f4e5 d6e5
-d4d3 a5c5
-h4f6 e7f6
-! # col. 72g
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 f8e7
-o-o-o c6d4
-d2d4 o-o
-f2f4 d8a5
-f1c4 c8d7
-c4b3 d7c6
-h1f1 b7b5
-g5f6 e7f6
-d4d6 f6c3
-d6c6 a8c8
-c6d7 c8d8
-d7e7 c3d2
-c1b1 d2f4
-d1d8 a5d8
-! # col. 73i
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 f8e7
-o-o-o o-o
-d4b3 d8b6
-f2f3 a7a6
-g2g4 f8d8
-g5e3 b6c7
-h2h4 b7b5
-g4g5 f6d7
-g5g6 f7g6
-h4h5 g6h5
-h1h5 d7f6
-h5g5 c6e5
-d2g2 e7f8
-f3f4 e5c4
-f1c4 b5c4
-b3d4 a8b8
-d1g1 b8b7
-! # col. 74; Tal-Larsen, match 1969
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 f8e7
-o-o-o o-o
-d4b3 a7a6
-g5f6 g7f6
-f1e2 g8h8
-e2h5 c8d7
-f2f4 b7b5
-c1b1
-! # col. 75k
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 f8e7
-o-o-o o-o
-d4b5 d8a5
-g5f6 e7f6
-b5d6 f8d8
-f2f4 e6e5
-d2d5 a5c7
-f4f5 c6d4
-d6b5 c7a5
-d5c4 c8f5
-b2b4 a5a6
-! # col. 76b; Spasski-Larsen, Santa Monica 1966
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 f8e7
-o-o-o o-o
-f2f4 h7h6
-g5h4 e6e5
-d4f5 c8f5
-e4f5 d8a5
-c1b1 a8d8
-h4f6 e7f6
-c3d5 a5d2
-d5f6 g7f6
-d1d2 e5f4
-! # col. 77e; Kujpers-Minev, Halle 1967
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 f8e7
-o-o-o o-o
-f2f4 d6d5
-e4e5 f6d7
-h2h4 d7b6
-d2e3 c8d7
-g5e7 d8e7
-h4h5 c6a5
-d4b3 a5c4
-e3d4 f8c8
-c1b1 a7a5
-f4f5 a5a4
-f5f6 e7f8
-h1h3 c4b2
-b1b2 b6c4
-f1c4 c8c4
-d4d2
-! # col. 78h
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 a7a6
-o-o-o c8d7
-f2f4 h7h6
-g5h4 f6e4
-d2e1 e4f6
-d4f5 d8a5
-f5d6 f8d6
-d1d6 o-o-o
-d6d1 e6e5
-f1c4 e5f4
-c3e4 d7e6
-c4e6 f7e6
-e4d6 c8b8
-e1e6 h8f8
-! # col. 79j; O'Kelly-Simagin corr. 1964
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 a7a6
-o-o-o h7h6
-g5h4 f6e4
-d2f4 e4g5
-d4c6 b7c6
-f4a4 d8b6
-f2f4 g5h7
-f4f5 f8e7
-c3e4 a8b8
-a4a3 b6b5
-! # col. 80k; Di Camillo-R. Byrne, US Open Chp. 1958
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d2 h7h6
-g5f6 g7f6
-o-o-o a7a6
-f2f4 c8d7
-f1e2 h6h5
-c1b1 d8b6
-d4b3 o-o-o
-h1f1 f8e7
-c3a4 b6a7
-c2c4 c6d4
-! # col. 81b
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d4c6 b7c6
-e4e5 d6e5
-d1f3 f8e7
-f3c6 c8d7
-c6f3 e5e4
-c3e4 f6e4
-g5e7 d8a5
-! # col. 82e
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1g5 e7e6
-d1d3 f8e7
-a1d1 o-o
-f1e2 c8d7
-o-o c6d4
-d3d4 d7c6
-g1h1 d8a5
-f2f4 f8e8
-! # col. 83
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-h2h3 g7g6
-c1e3 f8g7
-d1d2 o-o
-o-o-o c6d4
-e3d4 d8a5
-c1b1 e7e5
-d4e3 c8e6
-! # BAD! -- col. 84i; Karaklajic-Taimanov, Yugoslavia-USSR, match 1956
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-c1e3 f6g4
-f1b5 g4e3
-f2e3 c8d7
-o-o e7e6
-5c6 b7c6
-e4e5 f8e7
-d1h5 o-o
-e5d6 e7d6
-c3e4 d6e7
-a1d1 d8c7
-d4b3 h7h6
-! # col. 85
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-d4e2 e7e6
-g2g3 d6d5
-e4d5 f6d5
-f1g2 d5c3
-d1d8 e8d8
-e2c3 c8d7
-c1d2 f8e7
-! # col. 86c; Carcia-Pomar, Havana 1969
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-f1c4 e7e5
-d4e2 c8e6
-c4e6 f7e6
-o-o f8e7
-f2f4 o-o
-e2g3 e5f4
-f1f4 d8b6
-g1h1 a8d8
-b2b3 d6d5
-e4d5 f6d5
-f4f8 e7f8
-c3d5 d8d5
-d1e1 c6d4
-c1e3 f8c5
-! # col. 87
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-f1c4 d8b6
-d4b3 e7e6
-o-o f8e7
-c1e3 b6c7
-f2f4 o-o
-c4d3 a7a6
-d1f3
-! # col. 88
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-f1c4 e7e6
-c1e3 d8c7
-d1e2 a7a6
-c4b3 c6a5
-g2g4 b7b5
-g4g5 f6d7
-o-o-o d7c5
-! # col. 89mA; Spasjevic-Ostojic, Belgrade 1966 (draw)
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-f1c4 e7e6
-c1e3 f8e7
-d1e2 a7a6
-o-o-o o-o
-c4b3 d8c7
-g2g4 c6d4
-d1d4 e6e5
-d4c4 c7d8
-g4g5 f6e8
-h1g1 c8d7
-c3d5 d7b5
-e3b6 d8d7
-e2g4 e7d8
-g4d7 b5d7
-c4c3 d7e6
-b6d8 a8d8
-d5e3 d8d7
-b3a4 d7c7
-! # col. 90o; Bogdanovic-Shamkovich, Sarajevo 1963
-e2e4 c7c5
-g1f3 b8c6
-d2d4 c5d4
-f3d4 g8f6
-b1c3 d7d6
-f1c4 e7e6
-c1e3 f8e7
-d1e2 o-o
-o-o-o c6d4
-e3d4 d8a5
-e4e5 d6e5
-d4e5 b7b6
-c3b5 c8a6
-e5c3 a5a4
-d1d4 a6b5
-c4b5 a4a2
-h1d1 f8d8
-d4a4 d8d1
-e2d1 a2d5
-d1d5 f6d5
-c3d4 e7g5
-c1b1 h7h5
-b5c6 a8d8
-a4a7 d5b4
-c6d7 b4c6
-! # Queen's Catalan, col. 1c; Kramer-Fichtl, Varna Olympics 1962
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 f8e7
-f1g2 o-o
-o-o b8d7
-b1c3 c7c6
-b2b3 b7b6
-c1b2 c8b7
-d1c2 a8c8
-a1d1 d8c7
-e2e4 d5e4
-c3e4 f6e4
-c2e4 c6c5
-d4d5 e7f6
-e4c2 e6d5
-c4d5 f6b2
-c2b2 c8d8
-! # col. 2f
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 f8e7
-f1g2 o-o
-o-o b8d7
-b1c3 d5c4
-e2e4 c7c6
-a2a4 a7a5
-d1e2 d7b6
-f1d1 e7b4
-f3e5 d8e7
-c1e3 c8d7
-e5c4 b6c4
-e2c4 e6e5
-d4e5 f6g4
-! # col. 3i; Geller-Medina, Beverwijk 1965
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 f8e7
-f1g2 o-o
-o-o b8d7
-d1c2 b7b6
-c4d5 f6d5
-b1c3 c8b7
-c3d5 b7d5
-e2e4 d5b7
-f1d1 c7c5
-d4d5 e6d5
-e4d5 e7f6
-h2h4 h7h6
-! # col. 4k; Geller-Bisguier, Bled 1961
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 f8e7
-f1g2 o-o
-o-o b8d7
-d1c2 c7c6
-b2b3 b7b6
-c1b2 c8b7
-b1c3 a8c8
-a1d1 b6b5
-c4c5 b5b4
-c3b1 f6e4
-f3e1 f7f5
-e1d3 a7a5
-d3f4 f8f6
-f2f3 e4g5
-! # col. 5m; Benko-Pachman, Budapest 1948
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 f8e7
-f1g2 o-o
-o-o b8d7
-d1c2 c7c6
-b1d2 b7b6
-e2e4 c8b7
-b2b3 a8c8
-f1d1 d8c7
-c1b2 f8d8
-a1c1 c7b8
-c2b1 a7a5
-f3e5 b8a8
-! # col. 6
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 f8e7
-f1g2 o-o
-o-o c7c6
-b1c3 b7b6
-f3e5 a7a5
-d1c2 c8a6
-f1d1 b6b5
-! # col. 7d; Evans-Poschel, US Jr. Chp. 1947
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 c7c5
-c4d5 f6d5
-f1g2 c5d4
-o-o f8c5
-f3d4 o-o
-a2a3 b8c6
-d4c6 b7c6
-b2b4 c5e7
-c1b2 e7f6
-d1c2 f6b2
-c2b2 a7a5
-! # col. 8g; O'Kelly-Euwe, New York 1951
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 d5c4
-f1g2 c7c5
-o-o b8c6
-d1a4 f6d7
-d4c5 f8c5
-a4c4 o-o
-b1c3 a7a6
-c3e4 c5e7
-c1e3 d7b6
-c4b3 b6d5
-f1d1 d8c7
-! # col. 9
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 d5c4
-f1g2 b7b5
-a2a4 c7c6
-o-o c8b7
-f3e5 d8c8
-b2b3 c4b3
-d1b3 b5b4
-a4a5 f6d7
-! # col. 10l; Keres-Korchnoi, Curacao 1962
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-g1f3 d5c4
-d1a4 b8d7
-f1g2 a7a6
-a4c4 c7c5
-d4c5 f8c5
-o-o b7b5
-c4h4 c8b7
-b1d2 c5e7
-d2b3 a8c8
-h4d4 o-o
-c1d2 d7c5
-! # col. -- Accelerated Catalan
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-f1g2 d5c4
-d1a4 b8d7
-b1d2 c7c6
-a4c4 e6e5
-g1f3 d7b6
-c4d3 e5d4
-f3d4 f8e7
-o-o o-o
-! # col. 12e; Muller-Ratzek, Vienna 1951
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-f1g2 d5c4
-d1a4 c8d7
-a4c4 d7c6
-g1f3 c6d5
-c4d3 c7c5
-b1c3 d5c6
-o-o b8d7
-f1d1 d8b6
-e2e4 c5d4
-f3d4 f8c5
-d4c6 c5f2
-g1f1 b7c6
-c3a4 b6a5
-f1f2 a5a4
-d3d6
-! # col. 13f; Smyslov-Kere, USSR Chp. 1948
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-f1g2 d5c4
-d1a4 c8d7
-a4c4 d7c6
-g1f3 b8d7
-b1c3 d7b6
-c4d3 f8b4
-o-o o-o
-f1d1 h7h6
-c1d2 d8e7
-a2a3 b4c3
-d3c3 f8d8
-! # col. 14g
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-b1c3 d5c4
-d1a4 b8c6
-f1g2 c8d7
-a4c4 c6b4
-c4b3 c7c5
-g1f3 c5d4
-f3d4 e6e5
-d4f3 d7e6
-b3a4 e6d7
-! # col. 15; Stoltz-Vidmar, Groningen 1946
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-b1c3 f8e7
-f1g2 o-o
-g1f3 d5c4
-d1a4 a7a6
-a4c4 b7b5
-c4d3 c8b7
-! # col. 16
-d2d4 d7d5
-c2c4 e7e6
-g2g3 g8f6
-b1d2 c7c5
-d4c5 f8c5
-f1g2 b8c6
-g1f3 o-o
-o-o a7a5
-c4d5 e6d5
-d2b3 c5b6
-! # col. 17d; Mikenas-Aronin, USSR Chp. 1963
-d2d4 d7d5
-c2c4 e7e6
-g2g3 c7c5
-c4d5 e6d5
-g1f3 b8c6
-f1g2 g8f6
-o-o f8e7
-d4c5 e7c5
-b1d2 o-o
-d2b3 c5b6
-b3d4 f8e8
-b2b3 c6d4
-f3d4 b6d4
-d1d4 e8e2
-! # col. 18e
-d2d4 d7d5
-c2c4 e7e6
-g2g3 d5c4
-d1a4 c8d7
-a4c4 c7c5
-d4c5 d7c6
-g1f3 b8d7
-c1e3 g8f6
-f1g2 d8c7
-o-o c6d5
-c4a4 f8c5
-e3c5 c7c5
-b1c3 d5c6
-! # col. 19
-d2d4 d7d5
-c2c4 e7e6
-g2g3 f8b4
-c1d2 b4d2
-d1d2 g8f6
-g1f3 o-o
-f1g2 d8e7
-o-o b8c6
-f1c1
-! # col. 20
-d2d4 d7d5
-c2c4 e7e6
-g2g3 f8b4
-c1d2 b4e7
-f1g2 g8f6
-g1f3 o-o
-d1b3 b7b6
-c4d5 e6d5
-b1c3 c8b7
-o-o
-! # col. 21
-d2d4 g8f6
-c2c4 e7e6
-g2g3 e6e5
-g1f3 e5d4
-f3d4 d7d5
-f1g2 d5c4
-d1a4 c7c6
-a4c4 f8e7
-o-o o-o
-f1d1
-! # col. 22
-d2d4 g8f6
-c2c4 e7e6
-g2g3 c7c5
-g1f3 c5d4
-f3d4 d7d5
-f1g2 e6e5
-d4f3 d5d4
-o-o b8c6
-e2e3 f8e7
-e3d4 e5d4
-! # col. 23g
-d2d4 g8f6
-c2c4 e7e6
-g2g3 c7c5
-g1f3 c5d4
-f3d4 b8c6
-f1g2 d8b6
-d4c2 f8c5
-e2e3 o-o
-b1c3 b6a6
-d1d2 f8d8
-a2a3 d7d5
-b2b4 d5d4
-c3e4
-! # col. 24j; Smyslov-Petrosian, Moscow 1967
-d2d4 g8f6
-c2c4 e7e6
-g2g3 f8b4
-b1d2 c7c5
-d4c5 b4c5
-f1g2 b8c6
-g1f3 b7b6
-o-o c8b7
-a2a3 o-o
-b2b4 c5e7
-c1b2 a8c8
-d1b1
-! # col. 25
-d2d4 g8f6
-c2c4 e7e6
-g2g3 f8b4
-c1d2 b4d2
-d1d2 f6e4
-d2c2 f7f5
-f2f3 e4f6
-e2e4 f5e4
-f3e4 e6e5
-! # Alternate openings leading to the Catalan, line C
-g1f3 d7d5
-c2c4 e7e6
-g2g3 g8f6
-d2d4
-! # line D
-c2c4 g8f6
-d2d4 e7e6
-g2g3 d7d5
-! # line E
-d2d4 g8f6
-c2c4 e7e6
-g2g3 d7d5
-! # The Reti Opening, col. 1c; Muller-Lilenthal, Budapest 1933
-g1f3 d7d5
-c2c4 c7c6
-b2b3 g8f6
-g2g3 c8f5
-c1b2 e7e6
-f1g2 b8d7
-o-o f8d6
-d2d3 o-o
-b1c3 d8e7
-f1e1 e6e5
-c4d5 c6d5
-e2e4 d5e4
-d3e4 f5g6
-! # col. 2g; Bilek-Geller, Sousse 1967
-g1f3 d7d5
-c2c4 c7c6
-b2b3 g8f6
-g2g3 c8g4
-f1g2 e7e6
-c1b2 b8d7
-o-o f8e7
-d2d3 o-o
-b1d2 a7a5
-a2a3 d8b6
-d1c2 h7h6
-b2c3 f8c8
-f1e1 b6d8
-e2e4 d8f8
-! # col. 3k; Botvinnik-Fine, Nottingham 1936
-g1f3 d7d5
-c2c4 d5c4
-b1a3 c7c5
-a3c4 b8c6
-g2g3 e7e5
-f1g2 f7f6
-b2b3 g8e7
-c1b2 e7d5
-o-o f8e7
-f3h4 o-o
-d1b1 f8f7
-h4f5 c8e6
-f2f4 e5f4
-g3f4 d5b6
-g2e4 e6c4
-! # col. 4n; Katetov-Alekhin, Prague 1943
-g1f3 d7d5
-c2c4 d5d4
-e2e3 b8c6
-e3d4 c6d4
-f3d4 d8d4
-b1c3 e7e5
-d2d3 f8c5
-c1e3 d4d6
-c3b5 d6e7
-e3c5 e7c5
-d3d4 e5d4
-d1d4 c5d4
-b5d4 c8g4
-! # col. 5o
-g1f3 d7d5
-c2c4 d5d4
-e2e3 c7c5
-e3d4 c5d4
-g2g3 b8c6
-f1g2 g7g6
-d2d3 f8g7
-o-o e7e5
-f1e1 f7f6
-b2b4 c6b4
-d1a4 b4c6
-f3d4 d8d4
-g2c6 c8d7
-! # col. 6
-g1f3 d7d5
-c2c4 e7e6
-g2g3 g8f6
-f1g2 f8e7
-o-o o-o
-b2b3 c7c5
-c4d5 f6d5
-c1b2 b8c6
-d2d4 d5b4
-a2a3 b4a6
-d4c5 d8d1
-! # col. 7
-g1f3 d7d5
-c2c4 e7e6
-g2g3 g8f6
-f1g2 f8e7
-b1c3 o-o
-b2b3 c7c5
-c1b2 b8c6
-c4d5 e6d5
-a1c1 c8e6
-o-o a8c8
-d2d4 f8e8
-! # col. 8g; Kashdan-Horowitz, New York 1931
-g1f3 d7d5
-c2c4 e7e6
-g2g3 g8f6
-f1g2 b8d7
-b2b3 c7c6
-o-o f8d6
-c1b2 o-o
-b1c3 b7b6
-d2d3 c8b7
-e2e4 d5e4
-d3e4 d8c7
-d1e2 f8d8
-f1d1
-! # col. 9h; Abroshin-Krykov corr. 1960
-g1f3 d7d5
-c2c4 e7e6
-g2g3 g8f6
-f1g2 d5c4
-d1a4 c8d7
-a4c4 d7c6
-o-o c6d5
-c4a4 d8d7
-a4c2 b8c6
-b1c3 d5f3
-g2f3 c6d4
-c2d3 c7c6
-! # col. 10m; Teti-Tartakover, Semmering 1926
-g1f3 d7d5
-c2c4 e7e6
-g2g3 d5c4
-d1a4 c8d7
-a4c4 c7c5
-f3e5 b8c6
-e5d7 d8d7
-f1g2 g8f6
-d2d3 f8e7
-o-o c6d4
-b1c3 a8d8
-a2a4 f6d5
-! # Barcza System, col. 11
-g1f3 d7d5
-g2g3 g8f6
-f1g2 c8f5
-o-o c7c6
-c2c4 d5c4
-b1a3 e7e5
-a3c4 e5e4
-f3e1 f8c5
-d2d3 o-o
-c1e3 b8d7
-! # col. 12d; Benko-Petrosian, Curacao 1962
-g1f3 d7d5
-g2g3 g8f6
-f1g2 c8f5
-o-o c7c6
-d2d3 b8d7
-b1d2 h7h6
-d1e1 e7e6
-e2e4 f5h7
-e1e2 f8e7
-e4e5 f6g8
-d2b3 e7f8
-c2c4 g8e7
-b3d4 e7f5
-d4f5 h7f5
-c4d5 c6d5
-d3d4 a7a5
-c1e3 f8e7
-f1c1 o-o
-! # col. 13f; Bronstein-O'Kelly, Beverwijk 1963
-g1f3 d7d5
-g2g3 g8f6
-f1g2 c7c5
-o-o e7e6
-d2d3 b8c6
-b1d2 f8e7
-e2e4 o-o
-f1e1 d8c7
-e4e5 f6d7
-d1e2 b7b5
-h2h4 a7a5
-d2f1 c8a6
-f1h2 c6b4
-h4h5
-! # col. 14i; Evans-Olafsson, Dallas 1957
-g1f3 d7d5
-g2g3 g8f6
-f1g2 g7g6
-o-o f8g7
-d2d3 o-o
-b1d2 b8c6
-e2e4 e7e5
-c2c3 a7a5
-f1e1 d5e4
-d3e4 f6d7
-d1e2 b7b6
-d2c4 c8a6
-g2f1 d8f6
-! # col. 15
-g1f3 d7d5
-g2g3 g8f6
-f1g2 g7g6
-d2d4 f8g7
-o-o c7c6
-b2b3 b8d7
-c1b2 e7e5
-d4e5 f6g4
-b1d2 d7e5
-f3e5 g4e5
-! # col. 16d; Larsen-Mecking, Mallorca 1969
-g1f3 d7d5
-g2g3 c7c5
-f1g2 b8c6
-o-o e7e6
-d2d3 g7g6
-b1c3 f8g7
-a2a3 g8e7
-a1b1 o-o
-c1d2 a8b8
-b2b4 c5b4
-a3b4 b7b5
-e2e4 a7a5
-! # col. 17h; Benko-Bisguier, US Chp. 1963
-g1f3 d7d5
-g2g3 c8g4
-f1g2 b8d7
-c2c4 c7c6
-c4d5 c6d5
-b1c3 e7e6
-d1b3 d8b6
-b3b6 d7b6
-d2d3 a8c8
-c1e3 f8d6
-c3b5 d6b8
-o-o g8e7
-f1c1 c8c1
-a1c1 e7c6
-f3d4 e8d7
-! # col. 18j; Keene-Basman, Hastings 1966-7
-g1f3 d7d5
-g2g3 c8g4
-f1g2 g8f6
-c2c4 c7c6
-c4d5 g4f3
-g2f3 c6d5
-d1b3 d8d7
-b1c3 e7e6
-o-o b8c6
-f3g2 f8e7
-d2d3 o-o
-! # col. 19k
-g1f3 d7d5
-g2g3 c8g4
-f1g2 g8f6
-c2c4 c7c6
-d1c2 e7e6
-o-o f8e7
-b2b3 b8d7
-c1b2 o-o
-d2d3 a7a5
-b1d2 a5a4
-b2c3 a4b3
-a2b3 d8b6
-! # col. 20m
-g1f3 d7d5
-g2g3 c8g4
-f1g2 g8f6
-o-o c7c6
-c2c4 e7e6
-c4d5 g4f3
-g2f3 c6d5
-b1c3 b8c6
-d2d3 f8e7
-f3g2
-! # col. 21b; Savon-Aronin, USSR 1963
-g1f3 d7d5
-g2g3 b8c6
-d2d4 c8f5
-f1g2 c6b4
-b1a3 e7e6
-o-o g8f6
-f3h4 f5g4
-c2c4 c7c6
-a3c2 b4c2
-d1c2 f8e7
-h2h3 g4h5
-f2f3 h5g6
-h4g6 h7g6
-! # col. 22d; Fischer-Ivkov, Santa Monica 1966
-g1f3 d7d5
-g2g3 e7e6
-f1g2 c7c5
-o-o b8c6
-d2d3 f8d6
-e2e4 g8e7
-b1d2 o-o
-f3h4 b7b6
-f2f4 d5e4
-d3e4 c8a6
-f1e1 c5c4
-c2c3
-! # col. 23
-g1f3 d7d5
-g2g3 b8d7
-c2c4 e7e6
-f1g2 g8f6
-b1c3 f8e7
-o-o o-o
-d2d3 c7c5
-c4d5 e6d5
-c1g5 b7b6
-! # col. 24g; Benko-Bisguier, US Chp. 1976-7
-g1f3 d7d5
-g2g3 g8f6
-f1g2 b7b6
-c2c4 e7e6
-c4d5 e6d5
-o-o f8d6
-d2d4 o-o
-b1c3 c7c6
-f3e5 c8b7
-c1g5 h7h6
-g5f6 d8f6
-f2f4 f8d8
-e2e4
-! # col. 25; Rabinovich-Rauser, Moscow 1934
-g1f3 d7d5
-b2b3 c8g4
-c1b2 b8d7
-c2c4 e7e6
-e2e3 g8f6
-f1e2 c7c6
-f3d4 g4e2
-d1e2 f8d6
-f2f4 o-o
-! # col. 26e; Evans-Najdorf, Dallas 1967
-g1f3 c7c5
-g2g3 b8c6
-f1g2 g7g6
-o-o f8g7
-e2e4 d7d6
-c2c3 e7e5
-d2d3 g8h6
-f3e1 o-o
-f2f4 e5f4
-c1f4 h6g4
-b1a3 g4e5
-g1h1 d8b6
-d1d2 c8e6
-! # col. 27h; Van den Pol-Barden, Holland v. England 1960
-g1f3 f7f5
-g2g3 g8f6
-f1g2 g7g6
-d2d3 f8g7
-b1d2 d7d6
-e2e4 e7e5
-d2c4 o-o
-e4f5 g6f5
-c1e3 b8c6
-d3d4 e5e4
-! # col. 28m; Gufeld-Bokuchava, USSR Chp. prelims 1968
-g1f3 f7f5
-g2g3 g8f6
-f1g2 e7e6
-c2c4 f8e7
-o-o o-o
-d2d3 d7d6
-b1c3 b8c6
-a1b1 a7a5
-a2a3 d8e8
-b2b4 a5b4
-a3b4 e6e5
-! # col. 29p; Lundin-Tartakover, Groningen 1946
-g1f3 f7f5
-g2g3 g8f6
-f1g2 e7e6
-c2c4 f8e7
-o-o o-o
-b2b3 c7c5
-c1b2 b8c6
-b1c3 e6e5
-e2e3 d7d6
-d2d4
-! # col. 30
-g1f3 g7g6
-g2g3 f8g7
-f1g2 e7e5
-d2d3 b8c6
-e2e4 d7d6
-b1c3 g8e7
-c1e3 o-o
-d1d2 c6d4
-o-o
-! # King's Indian attack, col. 31a
-g1f3 g8f6
-g2g3 b7b5
-h2h4 b5b4
-d2d3 c8b7
-e2e4 d7d6
-f1g2 b8d7
-o-o e7e6
-h4h5 a8b8
-b1d2 f8e7
-d2c4 o-o
-! # col. 32d
-g1f3 g8f6
-g2g3 g7g6
-b2b4 f8g7
-c1b2 o-o
-f1g2 d7d5
-o-o c8g4
-c2c4 c7c6
-b1a3 b8d7
-a1c1 a7a5
-b4b5 a5a4
-d2d3 e7e5
-! # col. 33e; Olafsson-Kavalek, Wijik aan Zee 1969
-g1f3 g8f6
-g2g3 g7g6
-b2b3 f8g7
-c1b2 o-o
-f1g2 d7d6
-d2d4 f6d7
-b1c3 e7e5
-d1d2 f8e8
-d4e5 d7e5
-f3e5 g7e5
-! # col. 34h
-g1f3 g8f6
-g2g3 g7g6
-c2c4 d7d6
-f1g2 f8g7
-o-o o-o
-b1c3 b8d7
-d2d3 e7e5
-c1d2 d7c5
-b2b4 c5e6
-a1b1 f6e8
-a2a4 c7c6
-a4a5 e8c7
-! # col. 35
-g1f3 g8f6
-c2c4 g7g6
-b2b3 f8g7
-c1b2 o-o
-e2e3 d7d6
-f1e2 e7e5
-o-o f8e8
-b1c3 b8d7
-d2d3 c7c6
-! # col. 36d
-g1f3 g8f6
-c2c4 g7g6
-b1c3 d7d5
-c4d5 f6d5
-d1a4 c8d7
-a4b3 d5b6
-d2d4 f8g7
-c1f4 d7e6
-b3c2 b8c6
-a1d1
-! # col. 37f
-g1f3 g8f6
-c2c4 b7b6
-g2g3 c8b7
-f1g2 c7c5
-o-o g7g6
-b2b3 f8g7
-c1b2 o-o
-b1c3 d7d5
-c3d5 f6d5
-b2g7 g8g7
-c4d5 d8d5
-d2d4 b8a6
-! # col. 38h; Geller-Kholmov, Moscow 1969
-g1f3 g8f6
-c2c4 b7b6
-g2g3 c8b7
-f1g2 e7e6
-o-o f8e7
-b2b3 o-o
-c1b2 d7d5
-e2e3 b8d7
-b1c3 f6e4
-c4d5 e4c3
-b2c3 e6d5
-! # col. 39
-g1f3 g8f6
-b2b3 g7g6
-c2c4 f8g7
-c1b2 o-o
-g2g3 c7c5
-f1g2 b7b6
-o-o c8b7
-b1c3 e7e6
-a1b1 d8e7
-! # col. 40o; Lombardy-Burger, US Chp. 1969-70
-g1f3 g8f6
-b2b3 d7d5
-c1b2 e7e6
-e2e3 f8e7
-c2c4 o-o
-d2d4 b7b6
-f1d3 c8b7
-o-o b8d7
-b1d2 c7c5
-d1e2 f6e4
-a1c1 a8c8
-!
diff --git a/gnu/games/chess/pathnames.h b/gnu/games/chess/pathnames.h
deleted file mode 100644
index b70a0f0..0000000
--- a/gnu/games/chess/pathnames.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)pathnames.h 5.1 (Berkeley) 5/2/90
- */
-
-#define _PATH_CHESSBOOK "/usr/share/games/gnuchess.book"
diff --git a/gnu/gnu2bmake/gcc260.patch b/gnu/gnu2bmake/gcc260.patch
deleted file mode 100644
index dfcb2d1..0000000
--- a/gnu/gnu2bmake/gcc260.patch
+++ /dev/null
@@ -1,513 +0,0 @@
-I have removed the "ljo-Fortran" stuff. It doesn't belong in cc. /phk
-
-From kralizec.zeta.org.au!bde Sat Jul 30 22:53:11 1994
-Return-Path: <bde@kralizec.zeta.org.au>
-Received: from warrane.connect.com.au by tfs.com (smail3.1.28.1) with SMTP
- id m0qUTpa-0003wvC; Sat, 30 Jul 94 22:53 PDT
-Received: from kralizec.zeta.org.au by warrane.connect.com.au with SMTP id AA24021
- (5.67b8/IDA-1.5 for <phk@TFS.COM>); Sun, 31 Jul 1994 15:51:38 +1000
-Received: (from bde@localhost) by kralizec.zeta.org.au (8.6.9/8.6.9) id PAA00298 for phk@TFS.COM; Sun, 31 Jul 1994 15:51:11 +1000
-Date: Sun, 31 Jul 1994 15:51:11 +1000
-From: Bruce Evans <bde@kralizec.zeta.org.au>
-Message-Id: <199407310551.PAA00298@kralizec.zeta.org.au>
-To: phk@tfs.com
-Subject: Re: gcc-2.6.0, diff netbsd/freebsd
-
----
->> I've compiled nothing else with 2.6.0, but it bootstraps fine on my
->> 1.1R system. What's the problem with stddef.h? I haven't had any
->> troubles here with that file.
->Probably nothing serious, but I already has it on my list.
-
-Here are the diffs for my port of gcc-2.6.0. FreeBSD-1.1.5 and 4.4lite
-have an amazing number of bugs in involving namespace pollution from the
-runetype stuff. rune_t should never have been in <stddef.h>. <ctype.h>
-does not compile if _ANSI_SOURCE is defined ...
-
-Bruce
-
-Makefile.in:
- Rip out debugging stuff from libgcc.a the same as FreeBSD does.
-
-final.c:
- o If NO_PROFILE_DATA is defined, don't waste space for unused
- profile data.
-
-config/i386/freebsd.h:
- o Define specs together near the start.
- o For -p and -pg, put -Bstatic in LINK_SPEC instead of in LIB_SPEC
- so that it gets seen early enough when other libraries are used.
- o Update wchar_t stuff. `wchar_t foo[] = "123";' is broken in
- FreeBSD-1.1.5 because wchar_t was changed without changing gcc.
- I guess nothing actually uses wchar_t :-).
- o FUNCTION_PROFILER: don't waste space and time for unused profile
- data and pointer to it. Compatible with FreeBSD-1.x.
- o FUNCTION_PROFILER_EPILOGUE: for accurate profiling if there's
- a readable clock. Incompatible with FreeBSD-1.x (hide it with
- #if 0, or add a dummy mexitcount to the user mcount file and
- a real mexitexit to the kernel mcount file). Need a -mflag for
- this. Want more profiling stuff (profile before function
- prologue...) from osfrose.h.
- o Fixed white space in "svr4" stuff. Actually it's osfrose stuff.
- Formatting now matches osfrose.h.
-
-config/i386/i386.c:
- o Fix bugs: profiling may use the pic register. Need a macro for
- this - it is machine-dependent. It is already fixed in osfrose.h
- by not using the functions in i386.c.
- o Support FUNCTION_PROFILER_EPILOGUE. Avoiding the use of the pic
- register is even more complicated for the epilogue than for the
- prologue. We don't attempt to. See osfrose.h for the prologue.
-
-config/i386/i386.h:
- o Avoid average 1.2% code bloat caused by stupid register allocation.
-
-ginclude/stdarg.h, ginclude/varargs.h:
- o Handle Net/2 _VA_LIST_ and 4.4lite _BSD_VA_LIST_ right.
-
-ginclude/stddef.h:
- o Handle Net/2 _WCHAR_T_ and 4.4lite _BSD_WCHAR_T_ less wrongly than
- before. Copy FreeBSD-1.1.5/4.4lite rune_t brokenness. Remove
- extra underscores in _GCC_*_T_ which stopped the Net/2 _PTRDIFF_T_,
- _SIZE_T_ and _WCHAR_T_ from being undefined. Still need to
- handle the 4.4lite _BSD_PTRDIFF_T_ and _BSD_SIZE_T_. They are too
- hard to handle using ifdefs anyway. stddef.h takes 227 lines to
- define only 3 ANSI typedefs, 1 bogus typedef and 2 ANSI macros.
-
-diff -rc2 gcc-2.6.0/orig/Makefile.in gcc-2.6.0/Makefile.in
-*** gcc-2.6.0/orig/Makefile.in Thu Jul 14 08:46:54 1994
---- gcc-2.6.0/Makefile.in Sun Jul 17 05:36:06 1994
-***************
-*** 212,216 ****
- # we use this here because that should be enough, and also
- # so that -g1 will be tested.
-! LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g1
-
- # Additional options to use when compiling libgcc2.a.
---- 213,217 ----
- # we use this here because that should be enough, and also
- # so that -g1 will be tested.
-! LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) # -g1
-
- # Additional options to use when compiling libgcc2.a.
-***************
-*** 714,717 ****
---- 716,720 ----
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- mv libgcc1.o $${name}.o; \
-+ ld -r -x $${name}.o; mv a.out $${name}.o; \
- $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}.o; \
- rm -f $${name}.o; \
-***************
-*** 733,736 ****
---- 736,740 ----
- $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
-+ ld -r -x $${name}.o; mv a.out $${name}.o; \
- $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}.o; \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
-***************
-*** 794,797 ****
---- 798,802 ----
- $(srcdir)/libgcc2.c -o $${name}.o; \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
-+ ld -r -x $${name}.o; mv a.out $${name}.o; \
- $(AR) $(AR_FLAGS) tmplibgcc2.a $${name}.o; \
- rm -f $${name}.o; \
-***************
-*** 813,816 ****
---- 818,822 ----
- $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
-+ ld -r -x $${name}.o; mv a.out $${name}.o; \
- $(AR) $(AR_FLAGS) tmplibgcc2.a $${name}.o; \
- rm -f $${name}.[so]; \
-diff -rc2 gcc-2.6.0/orig/final.c gcc-2.6.0/final.c
-*** gcc-2.6.0/orig/final.c Wed Jul 13 11:30:52 1994
---- gcc-2.6.0/final.c Sun Jul 17 05:49:35 1994
-***************
-*** 954,965 ****
---- 954,969 ----
- FILE *file;
- {
-+ #ifndef NO_PROFILE_DATA
- int align = MIN (BIGGEST_ALIGNMENT, POINTER_SIZE);
-+ #endif /* not NO_PROFILE_DATA */
- int sval = current_function_returns_struct;
- int cxt = current_function_needs_context;
-
-+ #ifndef NO_PROFILE_DATA
- data_section ();
- ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT));
- ASM_OUTPUT_INTERNAL_LABEL (file, "LP", profile_label_no);
- assemble_integer (const0_rtx, POINTER_SIZE / BITS_PER_UNIT, 1);
-+ #endif /* not NO_PROFILE_DATA */
-
- text_section ();
-diff -rc2 gcc-2.6.0/config/i386/orig/freebsd.h gcc-2.6.0/config/i386/freebsd.h
-*** gcc-2.6.0/config/i386/orig/freebsd.h Fri Jul 15 02:55:14 1994
---- gcc-2.6.0/config/i386/freebsd.h Sun Jul 17 07:33:20 1994
-***************
-*** 40,46 ****
---- 40,52 ----
- }
-
-+ #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}"
-+
- /* Like the default, except no -lg. */
- #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
-
-+ #define LINK_SPEC \
-+ "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*} \
-+ %{p:-Bstatic} %{pg:-Bstatic} %{Z}"
-+
- #undef SIZE_TYPE
- #define SIZE_TYPE "unsigned int"
-***************
-*** 50,77 ****
-
- #undef WCHAR_TYPE
-! #define WCHAR_TYPE "short unsigned int"
-
-! #define WCHAR_UNSIGNED 1
-
- #undef WCHAR_TYPE_SIZE
-! #define WCHAR_TYPE_SIZE 16
-
- #define HAVE_ATEXIT
-
-! /* Redefine this to use %eax instead of %edx. */
- #undef FUNCTION_PROFILER
- #define FUNCTION_PROFILER(FILE, LABELNO) \
- { \
- if (flag_pic) \
-! { \
-! fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n", \
-! LPREFIX, (LABELNO)); \
-! fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \
-! } \
- else \
-! { \
-! fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO)); \
-! fprintf (FILE, "\tcall mcount\n"); \
-! } \
- }
-
---- 56,89 ----
-
- #undef WCHAR_TYPE
-! #define WCHAR_TYPE "int"
-
-! #define WCHAR_UNSIGNED 0
-
- #undef WCHAR_TYPE_SIZE
-! #define WCHAR_TYPE_SIZE BITS_PER_WORD
-
- #define HAVE_ATEXIT
-
-! /* Tell final.c that we don't need a label passed to mcount. */
-!
-! #define NO_PROFILE_DATA
-!
-! /* Redefine this to not pass an unused label in %edx. */
-!
- #undef FUNCTION_PROFILER
- #define FUNCTION_PROFILER(FILE, LABELNO) \
- { \
- if (flag_pic) \
-! fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \
-! else \
-! fprintf (FILE, "\tcall mcount\n"); \
-! }
-!
-! #define FUNCTION_PROFILER_EPILOGUE(FILE) \
-! { \
-! if (flag_pic) \
-! fprintf (FILE, "\tcall *mexitcount@GOT(%%ebx)\n"); \
- else \
-! fprintf (FILE, "\tcall mexitcount\n"); \
- }
-
-***************
-*** 170,174 ****
- if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
- { \
-! size_directive_output = 1; \
- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
- assemble_name (FILE, NAME); \
---- 182,186 ----
- if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
- { \
-! size_directive_output = 1; \
- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
- assemble_name (FILE, NAME); \
-***************
-*** 184,202 ****
- by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
-
-! #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
-! do { \
-! char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
-! if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
-! && ! AT_END && TOP_LEVEL \
-! && DECL_INITIAL (DECL) == error_mark_node \
-! && !size_directive_output) \
-! { \
-! fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-! assemble_name (FILE, name); \
-! fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL)));\
-! } \
- } while (0)
-
--
- /* This is how to declare the size of a function. */
-
---- 196,213 ----
- by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
-
-! #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
-! do { \
-! char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
-! if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
-! && ! AT_END && TOP_LEVEL \
-! && DECL_INITIAL (DECL) == error_mark_node \
-! && !size_directive_output) \
-! { \
-! fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-! assemble_name (FILE, name); \
-! fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-! } \
- } while (0)
-
- /* This is how to declare the size of a function. */
-
-***************
-*** 219,226 ****
- } \
- } while (0)
--
-- #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}"
-- #define LINK_SPEC \
-- "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}"
-
- /* This section copied from i386/osfrose.h */
---- 230,233 ----
-diff -rc2 gcc-2.6.0/config/i386/orig/i386.c gcc-2.6.0/config/i386/i386.c
-*** gcc-2.6.0/config/i386/orig/i386.c Tue Apr 12 21:40:35 1994
---- gcc-2.6.0/config/i386/i386.c Sun Jul 17 06:10:00 1994
-***************
-*** 860,864 ****
- rtx xops[4];
- int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table
-! || current_function_uses_const_pool);
-
- xops[0] = stack_pointer_rtx;
---- 860,865 ----
- rtx xops[4];
- int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table
-! || current_function_uses_const_pool
-! || profile_flag || profile_block_flag);
-
- xops[0] = stack_pointer_rtx;
-***************
-*** 921,926 ****
- int reglimit = (frame_pointer_needed
- ? FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM);
-! int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table
-! || current_function_uses_const_pool);
-
- #ifdef NON_SAVING_SETJMP
---- 922,935 ----
- int reglimit = (frame_pointer_needed
- ? FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM);
-!
-! #ifdef FUNCTION_PROFILER_EPILOGUE
-! if (profile_flag)
-! return 0;
-! #endif
-!
-! if (flag_pic && (current_function_uses_pic_offset_table
-! || current_function_uses_const_pool
-! || profile_flag || profile_block_flag))
-! return 0;
-
- #ifdef NON_SAVING_SETJMP
-***************
-*** 933,938 ****
-
- for (regno = reglimit - 1; regno >= 0; regno--)
-! if ((regs_ever_live[regno] && ! call_used_regs[regno])
-! || (regno == PIC_OFFSET_TABLE_REGNUM && pic_reg_used))
- nregs++;
-
---- 942,946 ----
-
- for (regno = reglimit - 1; regno >= 0; regno--)
-! if (regs_ever_live[regno] && ! call_used_regs[regno])
- nregs++;
-
-***************
-*** 955,958 ****
---- 963,971 ----
- int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table
- || current_function_uses_const_pool);
-+
-+ #ifdef FUNCTION_PROFILER_EPILOGUE
-+ if (profile_flag)
-+ FUNCTION_PROFILER_EPILOGUE (file);
-+ #endif
-
- /* Compute the number of registers to pop */
-diff -rc2 gcc-2.6.0/config/i386/orig/i386.h gcc-2.6.0/config/i386/i386.h
-*** gcc-2.6.0/config/i386/orig/i386.h Thu Jun 16 20:36:13 1994
---- gcc-2.6.0/config/i386/i386.h Mon Jul 18 19:18:59 1994
-***************
-*** 267,272 ****
-
- #define REG_ALLOC_ORDER \
-! /*dx,cx,ax,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg*/ \
-! { 1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
-
- /* Macro to conditionally modify fixed_regs/call_used_regs. */
---- 267,272 ----
-
- #define REG_ALLOC_ORDER \
-! /*ax,cx,dx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg*/ \
-! { 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
-
- /* Macro to conditionally modify fixed_regs/call_used_regs. */
-diff -rc2 gcc-2.6.0/ginclude/orig/stdarg.h gcc-2.6.0/ginclude/stdarg.h
-*** gcc-2.6.0/ginclude/orig/stdarg.h Sat Jul 9 12:04:08 1994
---- gcc-2.6.0/ginclude/stdarg.h Mon Jul 18 01:32:16 1994
-***************
-*** 44,47 ****
---- 44,56 ----
- #ifndef __GNUC_VA_LIST
- #define __GNUC_VA_LIST
-+ #if defined (__FreeBSD__)
-+ /* This is the correct way to handle all BSD NET2 and BSD 4.4 systems. */
-+ #include <machine/ansi.h>
-+ #ifdef _BSD_VA_LIST_
-+ typedef _BSD_VA_LIST_ __gnuc_va_list;
-+ #else
-+ typedef _VA_LIST_ __gnuc_va_list;
-+ #endif
-+ #else
- #if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX)
- typedef char *__gnuc_va_list;
-***************
-*** 50,53 ****
---- 59,63 ----
- #endif
- #endif
-+ #endif
-
- /* Define the standard macros for the user,
-***************
-*** 113,118 ****
---- 123,133 ----
- #endif
-
-+ #if 0
-+ /* BSD 4.4 actually spells the name _BSD_VA_LIST_ and requires it to be
-+ * defined and usable in place of va_list when the latter name is not
-+ * allowed (e.g., in stdio.h - see above). */
- #ifdef _BSD_VA_LIST
- #undef _BSD_VA_LIST
-+ #endif
- #endif
-
-diff -rc2 gcc-2.6.0/ginclude/orig/stddef.h gcc-2.6.0/ginclude/stddef.h
-*** gcc-2.6.0/ginclude/orig/stddef.h Tue Apr 26 04:13:05 1994
---- gcc-2.6.0/ginclude/stddef.h Sun Jul 17 21:52:12 1994
-***************
-*** 36,40 ****
- #define _PTRDIFF_T
- #endif
-! #ifndef _WCHAR_T_
- #define _WCHAR_T
- #endif
---- 36,40 ----
- #define _PTRDIFF_T
- #endif
-! #if ! defined (_WCHAR_T_) && ! defined (_BSD_WCHAR_T_)
- #define _WCHAR_T
- #endif
-***************
-*** 173,176 ****
---- 173,179 ----
- #define __WCHAR_TYPE__ int
- #endif
-+ #if defined (_ANSI_H_) && defined (_BSD_RUNE_T_)
-+ typedef _BSD_RUNE_T_ rune_t; /* WRONG */
-+ #endif
- typedef __WCHAR_TYPE__ wchar_t;
- #endif
-***************
-*** 189,200 ****
- are already defined. */
- #ifdef _ANSI_H_
-! #ifdef _GCC_PTRDIFF_T_
- #undef _PTRDIFF_T_
- #endif
-! #ifdef _GCC_SIZE_T_
- #undef _SIZE_T_
- #endif
-! #ifdef _GCC_WCHAR_T_
- #undef _WCHAR_T_
- #endif
- #endif /* _ANSI_H_ */
---- 192,204 ----
- are already defined. */
- #ifdef _ANSI_H_
-! #ifdef _GCC_PTRDIFF_T
- #undef _PTRDIFF_T_
- #endif
-! #ifdef _GCC_SIZE_T
- #undef _SIZE_T_
- #endif
-! #ifdef _GCC_WCHAR_T
- #undef _WCHAR_T_
-+ #undef _BSD_WCHAR_T_
- #endif
- #endif /* _ANSI_H_ */
-diff -rc2 gcc-2.6.0/ginclude/orig/varargs.h gcc-2.6.0/ginclude/varargs.h
-*** gcc-2.6.0/ginclude/orig/varargs.h Sat Jul 9 12:04:13 1994
---- gcc-2.6.0/ginclude/varargs.h Mon Jul 18 01:32:02 1994
-***************
-*** 76,79 ****
---- 76,88 ----
- #ifndef __GNUC_VA_LIST
- #define __GNUC_VA_LIST
-+ #if defined (__FreeBSD__)
-+ /* This is the correct way to handle all BSD NET2 and BSD 4.4 systems. */
-+ #include <machine/ansi.h>
-+ #ifdef _BSD_VA_LIST_
-+ typedef _BSD_VA_LIST_ __gnuc_va_list;
-+ #else
-+ typedef _VA_LIST_ __gnuc_va_list;
-+ #endif
-+ #else
- #if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX)
- typedef char *__gnuc_va_list;
-***************
-*** 82,85 ****
---- 91,95 ----
- #endif
- #endif
-+ #endif
-
- #define va_start(AP) AP=(char *) &__builtin_va_alist
-***************
-*** 171,175 ****
---- 181,190 ----
- /* The next BSD release (if there is one) wants this symbol to be
- undefined instead of _VA_LIST_. */
-+ #if 0
-+ /* BSD 4.4 actually spells the name _BSD_VA_LIST_ and requires it to be
-+ * defined and usable in place of va_list when the latter name is not
-+ * allowed (e.g., in stdio.h - see ginclude/stdarg.h). */
- #ifdef _BSD_VA_LIST
- #undef _BSD_VA_LIST
-+ #endif
- #endif
diff --git a/gnu/lib/libg++/include/regex.h b/gnu/lib/libg++/include/regex.h
deleted file mode 100644
index 9e404e8..0000000
--- a/gnu/lib/libg++/include/regex.h
+++ /dev/null
@@ -1,272 +0,0 @@
-/* Definitions for data structures callers pass the regex library.
-
- Copyright (C) 1985, 1989-92 Free Software Foundation, Inc.
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#ifndef __REGEXP_LIBRARY
-#define __REGEXP_LIBRARY
-
-#if defined(SHORT_NAMES) || defined(VMS)
-#define re_compile_pattern recmppat
-#define re_pattern_buffer repatbuf
-#define re_registers reregs
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Define number of parens for which we record the beginnings and ends.
- This affects how much space the `struct re_registers' type takes up. */
-#ifndef RE_NREGS
-#define RE_NREGS 10
-#endif
-
-#define BYTEWIDTH 8
-
-
-/* Maximum number of duplicates an interval can allow. */
-#ifndef RE_DUP_MAX /* kludge for AIX, which defines it */
-#define RE_DUP_MAX ((1 << 15) - 1)
-#endif
-
-/* This defines the various regexp syntaxes. */
-extern int obscure_syntax;
-
-
-/* The following bits are used in the obscure_syntax variable to choose among
- alternative regexp syntaxes. */
-
-/* If this bit is set, plain parentheses serve as grouping, and backslash
- parentheses are needed for literal searching.
- If not set, backslash-parentheses are grouping, and plain parentheses
- are for literal searching. */
-#define RE_NO_BK_PARENS 1
-
-/* If this bit is set, plain | serves as the `or'-operator, and \| is a
- literal.
- If not set, \| serves as the `or'-operator, and | is a literal. */
-#define RE_NO_BK_VBAR (1 << 1)
-
-/* If this bit is not set, plain + or ? serves as an operator, and \+, \? are
- literals.
- If set, \+, \? are operators and plain +, ? are literals. */
-#define RE_BK_PLUS_QM (1 << 2)
-
-/* If this bit is set, | binds tighter than ^ or $.
- If not set, the contrary. */
-#define RE_TIGHT_VBAR (1 << 3)
-
-/* If this bit is set, then treat newline as an OR operator.
- If not set, treat it as a normal character. */
-#define RE_NEWLINE_OR (1 << 4)
-
-/* If this bit is set, then special characters may act as normal
- characters in some contexts. Specifically, this applies to:
- ^ -- only special at the beginning, or after ( or |;
- $ -- only special at the end, or before ) or |;
- *, +, ? -- only special when not after the beginning, (, or |.
- If this bit is not set, special characters (such as *, ^, and $)
- always have their special meaning regardless of the surrounding
- context. */
-#define RE_CONTEXT_INDEP_OPS (1 << 5)
-
-/* If this bit is not set, then \ before anything inside [ and ] is taken as
- a real \.
- If set, then such a \ escapes the following character. This is a
- special case for awk. */
-#define RE_AWK_CLASS_HACK (1 << 6)
-
-/* If this bit is set, then \{ and \} or { and } serve as interval operators.
- If not set, then \{ and \} and { and } are treated as literals. */
-#define RE_INTERVALS (1 << 7)
-
-/* If this bit is not set, then \{ and \} serve as interval operators and
- { and } are literals.
- If set, then { and } serve as interval operators and \{ and \} are
- literals. */
-#define RE_NO_BK_CURLY_BRACES (1 << 8)
-
-/* If this bit is set, then character classes are supported; they are:
- [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
- [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
- If not set, then character classes are not supported. */
-#define RE_CHAR_CLASSES (1 << 9)
-
-/* If this bit is set, then the dot re doesn't match a null byte.
- If not set, it does. */
-#define RE_DOT_NOT_NULL (1 << 10)
-
-/* If this bit is set, then [^...] doesn't match a newline.
- If not set, it does. */
-#define RE_HAT_NOT_NEWLINE (1 << 11)
-
-/* If this bit is set, back references are recognized.
- If not set, they aren't. */
-#define RE_NO_BK_REFS (1 << 12)
-
-/* If this bit is set, back references must refer to a preceding
- subexpression. If not set, a back reference to a nonexistent
- subexpression is treated as literal characters. */
-#define RE_NO_EMPTY_BK_REF (1 << 13)
-
-/* If this bit is set, bracket expressions can't be empty.
- If it is set, they can be empty. */
-#define RE_NO_EMPTY_BRACKETS (1 << 14)
-
-/* If this bit is set, then *, +, ? and { cannot be first in an re or
- immediately after a |, or a (. Furthermore, a | cannot be first or
- last in an re, or immediately follow another | or a (. Also, a ^
- cannot appear in a nonleading position and a $ cannot appear in a
- nontrailing position (outside of bracket expressions, that is). */
-#define RE_CONTEXTUAL_INVALID_OPS (1 << 15)
-
-/* If this bit is set, then +, ? and | aren't recognized as operators.
- If it's not, they are. */
-#define RE_LIMITED_OPS (1 << 16)
-
-/* If this bit is set, then an ending range point has to collate higher
- or equal to the starting range point.
- If it's not set, then when the ending range point collates higher
- than the starting range point, the range is just considered empty. */
-#define RE_NO_EMPTY_RANGES (1 << 17)
-
-/* If this bit is set, then a hyphen (-) can't be an ending range point.
- If it isn't, then it can. */
-#define RE_NO_HYPHEN_RANGE_END (1 << 18)
-
-
-/* Define combinations of bits for the standard possibilities. */
-#define RE_SYNTAX_POSIX_AWK (RE_NO_BK_PARENS | RE_NO_BK_VBAR \
- | RE_CONTEXT_INDEP_OPS)
-#define RE_SYNTAX_AWK (RE_NO_BK_PARENS | RE_NO_BK_VBAR \
- | RE_CONTEXT_INDEP_OPS | RE_AWK_CLASS_HACK)
-#define RE_SYNTAX_EGREP (RE_NO_BK_PARENS | RE_NO_BK_VBAR \
- | RE_CONTEXT_INDEP_OPS | RE_NEWLINE_OR)
-#define RE_SYNTAX_GREP (RE_BK_PLUS_QM | RE_NEWLINE_OR)
-#define RE_SYNTAX_EMACS 0
-#define RE_SYNTAX_POSIX_BASIC (RE_INTERVALS | RE_BK_PLUS_QM \
- | RE_CHAR_CLASSES | RE_DOT_NOT_NULL \
- | RE_HAT_NOT_NEWLINE | RE_NO_EMPTY_BK_REF \
- | RE_NO_EMPTY_BRACKETS | RE_LIMITED_OPS \
- | RE_NO_EMPTY_RANGES | RE_NO_HYPHEN_RANGE_END)
-
-#define RE_SYNTAX_POSIX_EXTENDED (RE_INTERVALS | RE_NO_BK_CURLY_BRACES \
- | RE_NO_BK_VBAR | RE_NO_BK_PARENS \
- | RE_HAT_NOT_NEWLINE | RE_CHAR_CLASSES \
- | RE_NO_EMPTY_BRACKETS | RE_CONTEXTUAL_INVALID_OPS \
- | RE_NO_BK_REFS | RE_NO_EMPTY_RANGES \
- | RE_NO_HYPHEN_RANGE_END)
-
-
-/* This data structure is used to represent a compiled pattern. */
-
-struct re_pattern_buffer
- {
- char *buffer; /* Space holding the compiled pattern commands. */
- long allocated; /* Size of space that `buffer' points to. */
- long used; /* Length of portion of buffer actually occupied */
- char *fastmap; /* Pointer to fastmap, if any, or zero if none. */
- /* re_search uses the fastmap, if there is one,
- to skip over totally implausible characters. */
- char *translate; /* Translate table to apply to all characters before
- comparing, or zero for no translation.
- The translation is applied to a pattern when it is
- compiled and to data when it is matched. */
- char fastmap_accurate;
- /* Set to zero when a new pattern is stored,
- set to one when the fastmap is updated from it. */
- char can_be_null; /* Set to one by compiling fastmap
- if this pattern might match the null string.
- It does not necessarily match the null string
- in that case, but if this is zero, it cannot.
- 2 as value means can match null string
- but at end of range or before a character
- listed in the fastmap. */
- };
-
-
-/* search.c (search_buffer) needs this one value. It is defined both in
- regex.c and here. */
-#define RE_EXACTN_VALUE 1
-
-
-/* Structure to store register contents data in.
-
- Pass the address of such a structure as an argument to re_match, etc.,
- if you want this information back.
-
- For i from 1 to RE_NREGS - 1, start[i] records the starting index in
- the string of where the ith subexpression matched, and end[i] records
- one after the ending index. start[0] and end[0] are analogous, for
- the entire pattern. */
-
-struct re_registers
- {
- int start[RE_NREGS];
- int end[RE_NREGS];
- };
-
-
-
-#if defined(__STDC__) || defined(__cplusplus)
-
-extern char *re_compile_pattern (const char *, int, struct re_pattern_buffer *);
-/* Is this really advertised? */
-extern void re_compile_fastmap (struct re_pattern_buffer *);
-extern int re_search (struct re_pattern_buffer *, char*, int, int, int,
- struct re_registers *);
-extern int re_search_2 (struct re_pattern_buffer *, char *, int,
- char *, int, int, int,
- struct re_registers *, int);
-extern int re_match (struct re_pattern_buffer *, char *, int, int,
- struct re_registers *);
-extern int re_match_2 (struct re_pattern_buffer *, char *, int,
- char *, int, int, struct re_registers *, int);
-
-#if 0
-/* 4.2 bsd compatibility. */
-extern char *re_comp (char *);
-extern int re_exec (char *);
-#endif
-
-#else /* !__STDC__ */
-
-#define const /* nothing */
-extern char *re_compile_pattern ();
-/* Is this really advertised? */
-extern void re_compile_fastmap ();
-extern int re_search (), re_search_2 ();
-extern int re_match (), re_match_2 ();
-
-#if 0
-/* 4.2 bsd compatibility. */
-extern char *re_comp ();
-extern int re_exec ();
-#endif
-
-#endif /* __STDC__ */
-
-
-#ifdef SYNTAX_TABLE
-extern char *re_syntax_table;
-#endif
-
-#ifdef __cplusplus
-extern int re_max_failures;
-}
-#endif
-
-#endif /* !__REGEXP_LIBRARY */
diff --git a/gnu/usr.bin/awk/gawk.texi b/gnu/usr.bin/awk/gawk.texi
deleted file mode 100644
index b280262..0000000
--- a/gnu/usr.bin/awk/gawk.texi
+++ /dev/null
@@ -1,11270 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header (This is for running Texinfo on a region.)
-@setfilename gawk.info
-@settitle The GAWK Manual
-@c @smallbook
-@c %**end of header (This is for running Texinfo on a region.)
-
-@ifinfo
-@synindex fn cp
-@synindex vr cp
-@end ifinfo
-@iftex
-@syncodeindex fn cp
-@syncodeindex vr cp
-@end iftex
-
-@c If "finalout" is commented out, the printed output will show
-@c black boxes that mark lines that are too long. Thus, it is
-@c unwise to comment it out when running a master in case there are
-@c overfulls which are deemed okay.
-
-@iftex
-@finalout
-@end iftex
-
-@c ===> NOTE! <==
-@c Determine the edition number in *four* places by hand:
-@c 1. First ifinfo section 2. title page 3. copyright page 4. top node
-@c To find the locations, search for !!set
-
-@ifinfo
-This file documents @code{awk}, a program that you can use to select
-particular records in a file and perform operations upon them.
-
-This is Edition 0.15 of @cite{The GAWK Manual}, @*
-for the 2.15 version of the GNU implementation @*
-of AWK.
-
-Copyright (C) 1989, 1991, 1992, 1993 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.
-
-@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
-
-@setchapternewpage odd
-
-@c !!set edition, date, version
-@titlepage
-@title The GAWK Manual
-@subtitle Edition 0.15
-@subtitle April 1993
-@author Diane Barlow Close
-@author Arnold D. Robbins
-@author Paul H. Rubin
-@author Richard Stallman
-
-@c Include the Distribution inside the titlepage environment so
-@c that headings are turned off. Headings on and off do not work.
-
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1989, 1991, 1992, 1993 Free Software Foundation, Inc.
-@sp 2
-
-@c !!set edition, date, version
-This is Edition 0.15 of @cite{The GAWK Manual}, @*
-for the 2.15 version of the GNU implementation @*
-of AWK.
-
-@sp 2
-Published by the Free Software Foundation @*
-675 Massachusetts Avenue @*
-Cambridge, MA 02139 USA @*
-Printed copies are available for $20 each.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end titlepage
-
-@ifinfo
-@node Top, Preface, (dir), (dir)
-@comment node-name, next, previous, up
-@top General Introduction
-@c Preface or Licensing nodes should come right after the Top
-@c node, in `unnumbered' sections, then the chapter, `What is gawk'.
-
-This file documents @code{awk}, a program that you can use to select
-particular records in a file and perform operations upon them.
-
-@c !!set edition, date, version
-This is Edition 0.15 of @cite{The GAWK Manual}, @*
-for the 2.15 version of the GNU implementation @*
-of AWK.
-
-@end ifinfo
-
-@menu
-* Preface:: What you can do with @code{awk}; brief history
- and acknowledgements.
-* Copying:: Your right to copy and distribute @code{gawk}.
-* This Manual:: Using this manual.
- Includes sample input files that you can use.
-* Getting Started:: A basic introduction to using @code{awk}.
- How to run an @code{awk} program.
- Command line syntax.
-* Reading Files:: How to read files and manipulate fields.
-* Printing:: How to print using @code{awk}. Describes the
- @code{print} and @code{printf} statements.
- Also describes redirection of output.
-* One-liners:: Short, sample @code{awk} programs.
-* Patterns:: The various types of patterns
- explained in detail.
-* Actions:: The various types of actions are
- introduced here. Describes
- expressions and the various operators in
- detail. Also describes comparison expressions.
-* Expressions:: Expressions are the basic building
- blocks of statements.
-* Statements:: The various control statements are
- described in detail.
-* Arrays:: The description and use of arrays.
- Also includes array-oriented control
- statements.
-* Built-in:: The built-in functions are summarized here.
-* User-defined:: User-defined functions are described in detail.
-* Built-in Variables:: Built-in Variables
-* Command Line:: How to run @code{gawk}.
-* Language History:: The evolution of the @code{awk} language.
-* Installation:: Installing @code{gawk} under
- various operating systems.
-* Gawk Summary:: @code{gawk} Options and Language Summary.
-* Sample Program:: A sample @code{awk} program with a
- complete explanation.
-* Bugs:: Reporting Problems and Bugs.
-* Notes:: Something about the
- implementation of @code{gawk}.
-* Glossary:: An explanation of some unfamiliar terms.
-* Index::
-@end menu
-
-@node Preface, Copying, Top, Top
-@comment node-name, next, previous, up
-@unnumbered Preface
-
-@iftex
-@cindex what is @code{awk}
-@end iftex
-If you are like many computer users, you would frequently like to make
-changes in various text files wherever certain patterns appear, or
-extract data from parts of certain lines while discarding the rest. To
-write a program to do this in a language such as C or Pascal is a
-time-consuming inconvenience that may take many lines of code. The job
-may be easier with @code{awk}.
-
-The @code{awk} utility interprets a special-purpose programming language
-that makes it possible to handle simple data-reformatting jobs easily
-with just a few lines of code.
-
-The GNU implementation of @code{awk} is called @code{gawk}; it is fully
-upward compatible with the System V Release 4 version of
-@code{awk}. @code{gawk} is also upward compatible with the @sc{posix}
-(draft) specification of the @code{awk} language. This means that all
-properly written @code{awk} programs should work with @code{gawk}.
-Thus, we usually don't distinguish between @code{gawk} and other @code{awk}
-implementations in this manual.@refill
-
-@cindex uses of @code{awk}
-This manual teaches you what @code{awk} does and how you can use
-@code{awk} effectively. You should already be familiar with basic
-system commands such as @code{ls}. Using @code{awk} you can: @refill
-
-@itemize @bullet
-@item
-manage small, personal databases
-
-@item
-generate reports
-
-@item
-validate data
-@item
-produce indexes, and perform other document preparation tasks
-
-@item
-even experiment with algorithms that can be adapted later to other computer
-languages
-@end itemize
-
-@iftex
-This manual has the difficult task of being both tutorial and reference.
-If you are a novice, feel free to skip over details that seem too complex.
-You should also ignore the many cross references; they are for the
-expert user, and for the on-line Info version of the manual.
-@end iftex
-
-@menu
-* History:: The history of @code{gawk} and
- @code{awk}. Acknowledgements.
-@end menu
-
-@node History, , Preface, Preface
-@comment node-name, next, previous, up
-@unnumberedsec History of @code{awk} and @code{gawk}
-
-@cindex acronym
-@cindex history of @code{awk}
-The name @code{awk} comes from the initials of its designers: Alfred V.
-Aho, Peter J. Weinberger, and Brian W. Kernighan. The original version of
-@code{awk} was written in 1977. In 1985 a new version made the programming
-language more powerful, introducing user-defined functions, multiple input
-streams, and computed regular expressions.
-This new version became generally available with System V Release 3.1.
-The version in System V Release 4 added some new features and also cleaned
-up the behavior in some of the ``dark corners'' of the language.
-The specification for @code{awk} in the @sc{posix} Command Language
-and Utilities standard further clarified the language based on feedback
-from both the @code{gawk} designers, and the original @code{awk}
-designers.@refill
-
-The GNU implementation, @code{gawk}, was written in 1986 by Paul Rubin
-and Jay Fenlason, with advice from Richard Stallman. John Woods
-contributed parts of the code as well. In 1988 and 1989, David Trueman, with
-help from Arnold Robbins, thoroughly reworked @code{gawk} for compatibility
-with the newer @code{awk}. Current development (1992) focuses on bug fixes,
-performance improvements, and standards compliance.
-
-We need to thank many people for their assistance in producing this
-manual. Jay Fenlason contributed many ideas and sample programs. Richard
-Mlynarik and Robert J. Chassell gave helpful comments on early drafts of this
-manual. The paper @cite{A Supplemental Document for @code{awk}} by John W.
-Pierce of the Chemistry Department at UC San Diego, pinpointed several
-issues relevant both to @code{awk} implementation and to this manual, that
-would otherwise have escaped us. David Trueman, Pat Rankin, and Michal
-Jaegermann also contributed sections of the manual.@refill
-
-The following people provided many helpful comments on this edition of
-the manual: Rick Adams, Michael Brennan, Rich Burridge, Diane Close,
-Christopher (``Topher'') Eliot, Michael Lijewski, Pat Rankin, Miriam Robbins,
-and Michal Jaegermann. Robert J. Chassell provided much valuable advice on
-the use of Texinfo.
-
-Finally, we would like to thank Brian Kernighan of Bell Labs for invaluable
-assistance during the testing and debugging of @code{gawk}, and for
-help in clarifying numerous points about the language.@refill
-
-@node Copying, This Manual, Preface, Top
-@unnumbered GNU GENERAL PUBLIC LICENSE
-@center Version 2, June 1991
-
-@display
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-675 Mass Ave, Cambridge, MA 02139, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-@end display
-
-@c fakenode --- for prepinfo
-@unnumberedsec Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software---to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
-@iftex
-@c fakenode --- for prepinfo
-@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
-@ifinfo
-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end ifinfo
-
-@enumerate
-@item
-This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The ``Program'', below,
-refers to any such program or work, and a ``work based on the Program''
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term ``modification''.) Each licensee is addressed as ``you''.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-@item
-You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-@item
-You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-@enumerate a
-@item
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-
-@item
-You must cause any work that you distribute or publish, that in
-whole or in part contains or is derived from the Program or any
-part thereof, to be licensed as a whole at no charge to all third
-parties under the terms of this License.
-
-@item
-If the modified program normally reads commands interactively
-when run, you must cause it, when started running for such
-interactive use in the most ordinary way, to print or display an
-announcement including an appropriate copyright notice and a
-notice that there is no warranty (or else, saying that you provide
-a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this
-License. (Exception: if the Program itself is interactive but
-does not normally print such an announcement, your work based on
-the Program is not required to print an announcement.)
-@end enumerate
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-@item
-You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-@enumerate a
-@item
-Accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
-
-@item
-Accompany it with a written offer, valid for at least three
-years, to give any third party, for a charge no more than your
-cost of physically performing source distribution, a complete
-machine-readable copy of the corresponding source code, to be
-distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
-@item
-Accompany it with the information you received as to the offer
-to distribute corresponding source code. (This alternative is
-allowed only for noncommercial distribution and only if you
-received the program in object code or executable form with such
-an offer, in accord with Subsection b above.)
-@end enumerate
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-@item
-You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-@item
-You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-@item
-Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-@item
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-@item
-If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-@item
-The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and ``any
-later version'', you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-@item
-If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-@iftex
-@c fakenode --- for prepinfo
-@heading NO WARRANTY
-@end iftex
-@ifinfo
-@center NO WARRANTY
-@end ifinfo
-
-@item
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-@item
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-@end enumerate
-
-@iftex
-@c fakenode --- for prepinfo
-@heading END OF TERMS AND CONDITIONS
-@end iftex
-@ifinfo
-@center END OF TERMS AND CONDITIONS
-@end ifinfo
-
-@page
-@c fakenode --- for prepinfo
-@unnumberedsec How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the ``copyright'' line and a pointer to where the full notice is found.
-
-@smallexample
-@var{one line to give the program's name and a brief idea of what it does.}
-Copyright (C) 19@var{yy} @var{name of author}
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-@end smallexample
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-@smallexample
-Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.
-This is free software, and you are welcome to redistribute it
-under certain conditions; type `show c' for details.
-@end smallexample
-
-The hypothetical commands @samp{show w} and @samp{show c} should show
-the appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than @samp{show w} and
-@samp{show c}; they could even be mouse-clicks or menu items---whatever
-suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a ``copyright disclaimer'' for the program, if
-necessary. Here is a sample; alter the names:
-
-@smallexample
-Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-`Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-@var{signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
-@end smallexample
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-@node This Manual, Getting Started, Copying, Top
-@chapter Using this Manual
-@cindex manual, using this
-@cindex using this manual
-@cindex language, @code{awk}
-@cindex program, @code{awk}
-@cindex @code{awk} language
-@cindex @code{awk} program
-
-The term @code{awk} refers to a particular program, and to the language you
-use to tell this program what to do. When we need to be careful, we call
-the program ``the @code{awk} utility'' and the language ``the @code{awk}
-language.'' The term @code{gawk} refers to a version of @code{awk} developed
-as part the GNU project. The purpose of this manual is to explain
-both the
-@code{awk} language and how to run the @code{awk} utility.@refill
-
-While concentrating on the features of @code{gawk}, the manual will also
-attempt to describe important differences between @code{gawk} and other
-@code{awk} implementations. In particular, any features that are not
-in the @sc{posix} standard for @code{awk} will be noted. @refill
-
-The term @dfn{@code{awk} program} refers to a program written by you in
-the @code{awk} programming language.@refill
-
-@xref{Getting Started, ,Getting Started with @code{awk}}, for the bare
-essentials you need to know to start using @code{awk}.
-
-Some useful ``one-liners'' are included to give you a feel for the
-@code{awk} language (@pxref{One-liners, ,Useful ``One-liners''}).
-
-@ignore
-@strong{I deleted four paragraphs here because they would confuse the
-beginner more than help him. They mention terms such as ``field,''
-``pattern,'' ``action,'' ``built-in function'' which the beginner
-doesn't know.}
-
-@strong{If you can find a way to introduce several of these concepts here,
-enough to give the reader a map of what is to follow, that might
-be useful. I'm not sure that can be done without taking up more
-space than ought to be used here. There may be no way to win.}
-
-@strong{ADR: I'd like to tackle this in phase 2 of my editing.}
-@end ignore
-
-A sample @code{awk} program has been provided for you
-(@pxref{Sample Program}).@refill
-
-If you find terms that you aren't familiar with, try looking them
-up in the glossary (@pxref{Glossary}).@refill
-
-The entire @code{awk} language is summarized for quick reference in
-@ref{Gawk Summary, ,@code{gawk} Summary}. Look there if you just need
-to refresh your memory about a particular feature.@refill
-
-Most of the time complete @code{awk} programs are used as examples, but in
-some of the more advanced sections, only the part of the @code{awk} program
-that illustrates the concept being described is shown.@refill
-
-@menu
-* Sample Data Files:: Sample data files for use in the @code{awk}
- programs illustrated in this manual.
-@end menu
-
-@node Sample Data Files, , This Manual, This Manual
-@section Data Files for the Examples
-
-@cindex input file, sample
-@cindex sample input file
-@cindex @file{BBS-list} file
-Many of the examples in this manual take their input from two sample
-data files. The first, called @file{BBS-list}, represents a list of
-computer bulletin board systems together with information about those systems.
-The second data file, called @file{inventory-shipped}, contains
-information about shipments on a monthly basis. Each line of these
-files is one @dfn{record}.
-
-In the file @file{BBS-list}, each record contains the name of a computer
-bulletin board, its phone number, the board's baud rate, and a code for
-the number of hours it is operational. An @samp{A} in the last column
-means the board operates 24 hours a day. A @samp{B} in the last
-column means the board operates evening and weekend hours, only. A
-@samp{C} means the board operates only on weekends.
-
-@example
-aardvark 555-5553 1200/300 B
-alpo-net 555-3412 2400/1200/300 A
-barfly 555-7685 1200/300 A
-bites 555-1675 2400/1200/300 A
-camelot 555-0542 300 C
-core 555-2912 1200/300 C
-fooey 555-1234 2400/1200/300 B
-foot 555-6699 1200/300 B
-macfoo 555-6480 1200/300 A
-sdace 555-3430 2400/1200/300 A
-sabafoo 555-2127 1200/300 C
-@end example
-
-@cindex @file{inventory-shipped} file
-The second data file, called @file{inventory-shipped}, represents
-information about shipments during the year.
-Each record contains the month of the year, the number
-of green crates shipped, the number of red boxes shipped, the number of
-orange bags shipped, and the number of blue packages shipped,
-respectively. There are 16 entries, covering the 12 months of one year
-and 4 months of the next year.@refill
-
-@example
-Jan 13 25 15 115
-Feb 15 32 24 226
-Mar 15 24 34 228
-Apr 31 52 63 420
-May 16 34 29 208
-Jun 31 42 75 492
-Jul 24 34 67 436
-Aug 15 34 47 316
-Sep 13 55 37 277
-Oct 29 54 68 525
-Nov 20 87 82 577
-Dec 17 35 61 401
-
-Jan 21 36 64 620
-Feb 26 58 80 652
-Mar 24 75 70 495
-Apr 21 70 74 514
-@end example
-
-@ifinfo
-If you are reading this in GNU Emacs using Info, you can copy the regions
-of text showing these sample files into your own test files. This way you
-can try out the examples shown in the remainder of this document. You do
-this by using the command @kbd{M-x write-region} to copy text from the Info
-file into a file for use with @code{awk}
-(@xref{Misc File Ops, , , emacs, GNU Emacs Manual},
-for more information). Using this information, create your own
-@file{BBS-list} and @file{inventory-shipped} files, and practice what you
-learn in this manual.
-@end ifinfo
-
-@node Getting Started, Reading Files, This Manual, Top
-@chapter Getting Started with @code{awk}
-@cindex script, definition of
-@cindex rule, definition of
-@cindex program, definition of
-@cindex basic function of @code{gawk}
-
-The basic function of @code{awk} is to search files for lines (or other
-units of text) that contain certain patterns. When a line matches one
-of the patterns, @code{awk} performs specified actions on that line.
-@code{awk} keeps processing input lines in this way until the end of the
-input file is reached.@refill
-
-When you run @code{awk}, you specify an @code{awk} @dfn{program} which
-tells @code{awk} what to do. The program consists of a series of
-@dfn{rules}. (It may also contain @dfn{function definitions}, but that
-is an advanced feature, so we will ignore it for now.
-@xref{User-defined, ,User-defined Functions}.) Each rule specifies one
-pattern to search for, and one action to perform when that pattern is found.
-
-Syntactically, a rule consists of a pattern followed by an action. The
-action is enclosed in curly braces to separate it from the pattern.
-Rules are usually separated by newlines. Therefore, an @code{awk}
-program looks like this:
-
-@example
-@var{pattern} @{ @var{action} @}
-@var{pattern} @{ @var{action} @}
-@dots{}
-@end example
-
-@menu
-* Very Simple:: A very simple example.
-* Two Rules:: A less simple one-line example with two rules.
-* More Complex:: A more complex example.
-* Running gawk:: How to run @code{gawk} programs;
- includes command line syntax.
-* Comments:: Adding documentation to @code{gawk} programs.
-* Statements/Lines:: Subdividing or combining statements into lines.
-* When:: When to use @code{gawk} and
- when to use other things.
-@end menu
-
-@node Very Simple, Two Rules, Getting Started, Getting Started
-@section A Very Simple Example
-
-@cindex @samp{print $0}
-The following command runs a simple @code{awk} program that searches the
-input file @file{BBS-list} for the string of characters: @samp{foo}. (A
-string of characters is usually called, a @dfn{string}.
-The term @dfn{string} is perhaps based on similar usage in English, such
-as ``a string of pearls,'' or, ``a string of cars in a train.'')
-
-@example
-awk '/foo/ @{ print $0 @}' BBS-list
-@end example
-
-@noindent
-When lines containing @samp{foo} are found, they are printed, because
-@w{@samp{print $0}} means print the current line. (Just @samp{print} by
-itself means the same thing, so we could have written that
-instead.)
-
-You will notice that slashes, @samp{/}, surround the string @samp{foo}
-in the actual @code{awk} program. The slashes indicate that @samp{foo}
-is a pattern to search for. This type of pattern is called a
-@dfn{regular expression}, and is covered in more detail later
-(@pxref{Regexp, ,Regular Expressions as Patterns}). There are
-single-quotes around the @code{awk} program so that the shell won't
-interpret any of it as special shell characters.@refill
-
-Here is what this program prints:
-
-@example
-@group
-fooey 555-1234 2400/1200/300 B
-foot 555-6699 1200/300 B
-macfoo 555-6480 1200/300 A
-sabafoo 555-2127 1200/300 C
-@end group
-@end example
-
-@cindex action, default
-@cindex pattern, default
-@cindex default action
-@cindex default pattern
-In an @code{awk} rule, either the pattern or the action can be omitted,
-but not both. If the pattern is omitted, then the action is performed
-for @emph{every} input line. If the action is omitted, the default
-action is to print all lines that match the pattern.
-
-Thus, we could leave out the action (the @code{print} statement and the curly
-braces) in the above example, and the result would be the same: all
-lines matching the pattern @samp{foo} would be printed. By comparison,
-omitting the @code{print} statement but retaining the curly braces makes an
-empty action that does nothing; then no lines would be printed.
-
-@node Two Rules, More Complex, Very Simple, Getting Started
-@section An Example with Two Rules
-@cindex how @code{awk} works
-
-The @code{awk} utility reads the input files one line at a
-time. For each line, @code{awk} tries the patterns of each of the rules.
-If several patterns match then several actions are run, in the order in
-which they appear in the @code{awk} program. If no patterns match, then
-no actions are run.
-
-After processing all the rules (perhaps none) that match the line,
-@code{awk} reads the next line (however,
-@pxref{Next Statement, ,The @code{next} Statement}). This continues
-until the end of the file is reached.@refill
-
-For example, the @code{awk} program:
-
-@example
-/12/ @{ print $0 @}
-/21/ @{ print $0 @}
-@end example
-
-@noindent
-contains two rules. The first rule has the string @samp{12} as the
-pattern and @samp{print $0} as the action. The second rule has the
-string @samp{21} as the pattern and also has @samp{print $0} as the
-action. Each rule's action is enclosed in its own pair of braces.
-
-This @code{awk} program prints every line that contains the string
-@samp{12} @emph{or} the string @samp{21}. If a line contains both
-strings, it is printed twice, once by each rule.
-
-If we run this program on our two sample data files, @file{BBS-list} and
-@file{inventory-shipped}, as shown here:
-
-@example
-awk '/12/ @{ print $0 @}
- /21/ @{ print $0 @}' BBS-list inventory-shipped
-@end example
-
-@noindent
-we get the following output:
-
-@example
-aardvark 555-5553 1200/300 B
-alpo-net 555-3412 2400/1200/300 A
-barfly 555-7685 1200/300 A
-bites 555-1675 2400/1200/300 A
-core 555-2912 1200/300 C
-fooey 555-1234 2400/1200/300 B
-foot 555-6699 1200/300 B
-macfoo 555-6480 1200/300 A
-sdace 555-3430 2400/1200/300 A
-sabafoo 555-2127 1200/300 C
-sabafoo 555-2127 1200/300 C
-Jan 21 36 64 620
-Apr 21 70 74 514
-@end example
-
-@noindent
-Note how the line in @file{BBS-list} beginning with @samp{sabafoo}
-was printed twice, once for each rule.
-
-@node More Complex, Running gawk, Two Rules, Getting Started
-@comment node-name, next, previous, up
-@section A More Complex Example
-
-Here is an example to give you an idea of what typical @code{awk}
-programs do. This example shows how @code{awk} can be used to
-summarize, select, and rearrange the output of another utility. It uses
-features that haven't been covered yet, so don't worry if you don't
-understand all the details.
-
-@example
-ls -l | awk '$5 == "Nov" @{ sum += $4 @}
- END @{ print sum @}'
-@end example
-
-This command prints the total number of bytes in all the files in the
-current directory that were last modified in November (of any year).
-(In the C shell you would need to type a semicolon and then a backslash
-at the end of the first line; in a @sc{posix}-compliant shell, such as the
-Bourne shell or the Bourne-Again shell, you can type the example as shown.)
-
-The @w{@samp{ls -l}} part of this example is a command that gives you a
-listing of the files in a directory, including file size and date.
-Its output looks like this:@refill
-
-@example
--rw-r--r-- 1 close 1933 Nov 7 13:05 Makefile
--rw-r--r-- 1 close 10809 Nov 7 13:03 gawk.h
--rw-r--r-- 1 close 983 Apr 13 12:14 gawk.tab.h
--rw-r--r-- 1 close 31869 Jun 15 12:20 gawk.y
--rw-r--r-- 1 close 22414 Nov 7 13:03 gawk1.c
--rw-r--r-- 1 close 37455 Nov 7 13:03 gawk2.c
--rw-r--r-- 1 close 27511 Dec 9 13:07 gawk3.c
--rw-r--r-- 1 close 7989 Nov 7 13:03 gawk4.c
-@end example
-
-@noindent
-The first field contains read-write permissions, the second field contains
-the number of links to the file, and the third field identifies the owner of
-the file. The fourth field contains the size of the file in bytes. The
-fifth, sixth, and seventh fields contain the month, day, and time,
-respectively, that the file was last modified. Finally, the eighth field
-contains the name of the file.
-
-The @code{$5 == "Nov"} in our @code{awk} program is an expression that
-tests whether the fifth field of the output from @w{@samp{ls -l}}
-matches the string @samp{Nov}. Each time a line has the string
-@samp{Nov} in its fifth field, the action @samp{@{ sum += $4 @}} is
-performed. This adds the fourth field (the file size) to the variable
-@code{sum}. As a result, when @code{awk} has finished reading all the
-input lines, @code{sum} is the sum of the sizes of files whose
-lines matched the pattern. (This works because @code{awk} variables
-are automatically initialized to zero.)@refill
-
-After the last line of output from @code{ls} has been processed, the
-@code{END} rule is executed, and the value of @code{sum} is
-printed. In this example, the value of @code{sum} would be 80600.@refill
-
-These more advanced @code{awk} techniques are covered in later sections
-(@pxref{Actions, ,Overview of Actions}). Before you can move on to more
-advanced @code{awk} programming, you have to know how @code{awk} interprets
-your input and displays your output. By manipulating fields and using
-@code{print} statements, you can produce some very useful and spectacular
-looking reports.@refill
-
-@node Running gawk, Comments, More Complex, Getting Started
-@section How to Run @code{awk} Programs
-
-@ignore
-Date: Mon, 26 Aug 91 09:48:10 +0200
-From: gatech!vsoc07.cern.ch!matheys (Jean-Pol Matheys (CERN - ECP Division))
-To: uunet.UU.NET!skeeve!arnold
-Subject: RE: status check
-
-The introduction of Chapter 2 (i.e. before 2.1) should include
-the whole of section 2.4 - it's better to tell people how to run awk programs
-before giving any examples
-
-ADR --- he's right. but for now, don't do this because the rest of the
-chapter would need some rewriting.
-@end ignore
-
-@cindex command line formats
-@cindex running @code{awk} programs
-There are several ways to run an @code{awk} program. If the program is
-short, it is easiest to include it in the command that runs @code{awk},
-like this:
-
-@example
-awk '@var{program}' @var{input-file1} @var{input-file2} @dots{}
-@end example
-
-@noindent
-where @var{program} consists of a series of patterns and actions, as
-described earlier.
-
-When the program is long, it is usually more convenient to put it in a file
-and run it with a command like this:
-
-@example
-awk -f @var{program-file} @var{input-file1} @var{input-file2} @dots{}
-@end example
-
-@menu
-* One-shot:: Running a short throw-away @code{awk} program.
-* Read Terminal:: Using no input files (input from
- terminal instead).
-* Long:: Putting permanent @code{awk} programs in files.
-* Executable Scripts:: Making self-contained @code{awk} programs.
-@end menu
-
-@node One-shot, Read Terminal, Running gawk, Running gawk
-@subsection One-shot Throw-away @code{awk} Programs
-
-Once you are familiar with @code{awk}, you will often type simple
-programs at the moment you want to use them. Then you can write the
-program as the first argument of the @code{awk} command, like this:
-
-@example
-awk '@var{program}' @var{input-file1} @var{input-file2} @dots{}
-@end example
-
-@noindent
-where @var{program} consists of a series of @var{patterns} and
-@var{actions}, as described earlier.
-
-@cindex single quotes, why needed
-This command format instructs the shell to start @code{awk} and use the
-@var{program} to process records in the input file(s). There are single
-quotes around @var{program} so that the shell doesn't interpret any
-@code{awk} characters as special shell characters. They also cause the
-shell to treat all of @var{program} as a single argument for
-@code{awk} and allow @var{program} to be more than one line long.@refill
-
-This format is also useful for running short or medium-sized @code{awk}
-programs from shell scripts, because it avoids the need for a separate
-file for the @code{awk} program. A self-contained shell script is more
-reliable since there are no other files to misplace.
-
-@node Read Terminal, Long, One-shot, Running gawk
-@subsection Running @code{awk} without Input Files
-
-@cindex standard input
-@cindex input, standard
-You can also run @code{awk} without any input files. If you type the
-command line:@refill
-
-@example
-awk '@var{program}'
-@end example
-
-@noindent
-then @code{awk} applies the @var{program} to the @dfn{standard input},
-which usually means whatever you type on the terminal. This continues
-until you indicate end-of-file by typing @kbd{Control-d}.
-
-For example, if you execute this command:
-
-@example
-awk '/th/'
-@end example
-
-@noindent
-whatever you type next is taken as data for that @code{awk}
-program. If you go on to type the following data:
-
-@example
-Kathy
-Ben
-Tom
-Beth
-Seth
-Karen
-Thomas
-@kbd{Control-d}
-@end example
-
-@noindent
-then @code{awk} prints this output:
-
-@example
-Kathy
-Beth
-Seth
-@end example
-
-@noindent
-@cindex case sensitivity
-@cindex pattern, case sensitive
-as matching the pattern @samp{th}. Notice that it did not recognize
-@samp{Thomas} as matching the pattern. The @code{awk} language is
-@dfn{case sensitive}, and matches patterns exactly. (However, you can
-override this with the variable @code{IGNORECASE}.
-@xref{Case-sensitivity, ,Case-sensitivity in Matching}.)
-
-@node Long, Executable Scripts, Read Terminal, Running gawk
-@subsection Running Long Programs
-
-@cindex running long programs
-@cindex @samp{-f} option
-@cindex program file
-@cindex file, @code{awk} program
-Sometimes your @code{awk} programs can be very long. In this case it is
-more convenient to put the program into a separate file. To tell
-@code{awk} to use that file for its program, you type:@refill
-
-@example
-awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{}
-@end example
-
-The @samp{-f} instructs the @code{awk} utility to get the @code{awk} program
-from the file @var{source-file}. Any file name can be used for
-@var{source-file}. For example, you could put the program:@refill
-
-@example
-/th/
-@end example
-
-@noindent
-into the file @file{th-prog}. Then this command:
-
-@example
-awk -f th-prog
-@end example
-
-@noindent
-does the same thing as this one:
-
-@example
-awk '/th/'
-@end example
-
-@noindent
-which was explained earlier (@pxref{Read Terminal, ,Running @code{awk} without Input Files}).
-Note that you don't usually need single quotes around the file name that you
-specify with @samp{-f}, because most file names don't contain any of the shell's
-special characters. Notice that in @file{th-prog}, the @code{awk}
-program did not have single quotes around it. The quotes are only needed
-for programs that are provided on the @code{awk} command line.
-
-If you want to identify your @code{awk} program files clearly as such,
-you can add the extension @file{.awk} to the file name. This doesn't
-affect the execution of the @code{awk} program, but it does make
-``housekeeping'' easier.
-
-@node Executable Scripts, , Long, Running gawk
-@c node-name, next, previous, up
-@subsection Executable @code{awk} Programs
-@cindex executable scripts
-@cindex scripts, executable
-@cindex self contained programs
-@cindex program, self contained
-@cindex @samp{#!}
-
-Once you have learned @code{awk}, you may want to write self-contained
-@code{awk} scripts, using the @samp{#!} script mechanism. You can do
-this on many Unix systems @footnote{The @samp{#!} mechanism works on
-Unix systems derived from Berkeley Unix, System V Release 4, and some System
-V Release 3 systems.} (and someday on GNU).@refill
-
-For example, you could create a text file named @file{hello}, containing
-the following (where @samp{BEGIN} is a feature we have not yet
-discussed):
-
-@example
-#! /bin/awk -f
-
-# a sample awk program
-BEGIN @{ print "hello, world" @}
-@end example
-
-@noindent
-After making this file executable (with the @code{chmod} command), you
-can simply type:
-
-@example
-hello
-@end example
-
-@noindent
-at the shell, and the system will arrange to run @code{awk} @footnote{The
-line beginning with @samp{#!} lists the full pathname of an interpreter
-to be run, and an optional initial command line argument to pass to that
-interpreter. The operating system then runs the interpreter with the given
-argument and the full argument list of the executed program. The first argument
-in the list is the full pathname of the @code{awk} program. The rest of the
-argument list will either be options to @code{awk}, or data files,
-or both.} as if you had typed:@refill
-
-@example
-awk -f hello
-@end example
-
-@noindent
-Self-contained @code{awk} scripts are useful when you want to write a
-program which users can invoke without knowing that the program is
-written in @code{awk}.
-
-@cindex shell scripts
-@cindex scripts, shell
-If your system does not support the @samp{#!} mechanism, you can get a
-similar effect using a regular shell script. It would look something
-like this:
-
-@example
-: The colon makes sure this script is executed by the Bourne shell.
-awk '@var{program}' "$@@"
-@end example
-
-Using this technique, it is @emph{vital} to enclose the @var{program} in
-single quotes to protect it from interpretation by the shell. If you
-omit the quotes, only a shell wizard can predict the results.
-
-The @samp{"$@@"} causes the shell to forward all the command line
-arguments to the @code{awk} program, without interpretation. The first
-line, which starts with a colon, is used so that this shell script will
-work even if invoked by a user who uses the C shell.
-@c Someday: (See @cite{The Bourne Again Shell}, by ??.)
-
-@node Comments, Statements/Lines, Running gawk, Getting Started
-@section Comments in @code{awk} Programs
-@cindex @samp{#}
-@cindex comments
-@cindex use of comments
-@cindex documenting @code{awk} programs
-@cindex programs, documenting
-
-A @dfn{comment} is some text that is included in a program for the sake
-of human readers, and that is not really part of the program. Comments
-can explain what the program does, and how it works. Nearly all
-programming languages have provisions for comments, because programs are
-typically hard to understand without their extra help.
-
-In the @code{awk} language, a comment starts with the sharp sign
-character, @samp{#}, and continues to the end of the line. The
-@code{awk} language ignores the rest of a line following a sharp sign.
-For example, we could have put the following into @file{th-prog}:@refill
-
-@smallexample
-# This program finds records containing the pattern @samp{th}. This is how
-# you continue comments on additional lines.
-/th/
-@end smallexample
-
-You can put comment lines into keyboard-composed throw-away @code{awk}
-programs also, but this usually isn't very useful; the purpose of a
-comment is to help you or another person understand the program at
-a later time.@refill
-
-@node Statements/Lines, When, Comments, Getting Started
-@section @code{awk} Statements versus Lines
-
-Most often, each line in an @code{awk} program is a separate statement or
-separate rule, like this:
-
-@example
-awk '/12/ @{ print $0 @}
- /21/ @{ print $0 @}' BBS-list inventory-shipped
-@end example
-
-But sometimes statements can be more than one line, and lines can
-contain several statements. You can split a statement into multiple
-lines by inserting a newline after any of the following:@refill
-
-@example
-, @{ ? : || && do else
-@end example
-
-@noindent
-A newline at any other point is considered the end of the statement.
-(Splitting lines after @samp{?} and @samp{:} is a minor @code{gawk}
-extension. The @samp{?} and @samp{:} referred to here is the
-three operand conditional expression described in
-@ref{Conditional Exp, ,Conditional Expressions}.)@refill
-
-@cindex backslash continuation
-@cindex continuation of lines
-If you would like to split a single statement into two lines at a point
-where a newline would terminate it, you can @dfn{continue} it by ending the
-first line with a backslash character, @samp{\}. This is allowed
-absolutely anywhere in the statement, even in the middle of a string or
-regular expression. For example:
-
-@example
-awk '/This program is too long, so continue it\
- on the next line/ @{ print $1 @}'
-@end example
-
-@noindent
-We have generally not used backslash continuation in the sample programs in
-this manual. Since in @code{gawk} there is no limit on the length of a line,
-it is never strictly necessary; it just makes programs prettier. We have
-preferred to make them even more pretty by keeping the statements short.
-Backslash continuation is most useful when your @code{awk} program is in a
-separate source file, instead of typed in on the command line. You should
-also note that many @code{awk} implementations are more picky about where
-you may use backslash continuation. For maximal portability of your @code{awk}
-programs, it is best not to split your lines in the middle of a regular
-expression or a string.@refill
-
-@strong{Warning: backslash continuation does not work as described above
-with the C shell.} Continuation with backslash works for @code{awk}
-programs in files, and also for one-shot programs @emph{provided} you
-are using a @sc{posix}-compliant shell, such as the Bourne shell or the
-Bourne-again shell. But the C shell used on Berkeley Unix behaves
-differently! There, you must use two backslashes in a row, followed by
-a newline.@refill
-
-@cindex multiple statements on one line
-When @code{awk} statements within one rule are short, you might want to put
-more than one of them on a line. You do this by separating the statements
-with a semicolon, @samp{;}.
-This also applies to the rules themselves.
-Thus, the previous program could have been written:@refill
-
-@example
-/12/ @{ print $0 @} ; /21/ @{ print $0 @}
-@end example
-
-@noindent
-@strong{Note:} the requirement that rules on the same line must be
-separated with a semicolon is a recent change in the @code{awk}
-language; it was done for consistency with the treatment of statements
-within an action.
-
-@node When, , Statements/Lines, Getting Started
-@section When to Use @code{awk}
-
-@cindex when to use @code{awk}
-@cindex applications of @code{awk}
-You might wonder how @code{awk} might be useful for you. Using additional
-utility programs, more advanced patterns, field separators, arithmetic
-statements, and other selection criteria, you can produce much more
-complex output. The @code{awk} language is very useful for producing
-reports from large amounts of raw data, such as summarizing information
-from the output of other utility programs like @code{ls}.
-(@xref{More Complex, ,A More Complex Example}.)
-
-Programs written with @code{awk} are usually much smaller than they would
-be in other languages. This makes @code{awk} programs easy to compose and
-use. Often @code{awk} programs can be quickly composed at your terminal,
-used once, and thrown away. Since @code{awk} programs are interpreted, you
-can avoid the usually lengthy edit-compile-test-debug cycle of software
-development.
-
-Complex programs have been written in @code{awk}, including a complete
-retargetable assembler for 8-bit microprocessors (@pxref{Glossary}, for
-more information) and a microcode assembler for a special purpose Prolog
-computer. However, @code{awk}'s capabilities are strained by tasks of
-such complexity.
-
-If you find yourself writing @code{awk} scripts of more than, say, a few
-hundred lines, you might consider using a different programming
-language. Emacs Lisp is a good choice if you need sophisticated string
-or pattern matching capabilities. The shell is also good at string and
-pattern matching; in addition, it allows powerful use of the system
-utilities. More conventional languages, such as C, C++, and Lisp, offer
-better facilities for system programming and for managing the complexity
-of large programs. Programs in these languages may require more lines
-of source code than the equivalent @code{awk} programs, but they are
-easier to maintain and usually run more efficiently.@refill
-
-@node Reading Files, Printing, Getting Started, Top
-@chapter Reading Input Files
-
-@cindex reading files
-@cindex input
-@cindex standard input
-@vindex FILENAME
-In the typical @code{awk} program, all input is read either from the
-standard input (by default the keyboard, but often a pipe from another
-command) or from files whose names you specify on the @code{awk} command
-line. If you specify input files, @code{awk} reads them in order, reading
-all the data from one before going on to the next. The name of the current
-input file can be found in the built-in variable @code{FILENAME}
-(@pxref{Built-in Variables}).@refill
-
-The input is read in units called records, and processed by the
-rules one record at a time. By default, each record is one line. Each
-record is split automatically into fields, to make it more
-convenient for a rule to work on its parts.
-
-On rare occasions you will need to use the @code{getline} command,
-which can do explicit input from any number of files
-(@pxref{Getline, ,Explicit Input with @code{getline}}).@refill
-
-@menu
-* Records:: Controlling how data is split into records.
-* Fields:: An introduction to fields.
-* Non-Constant Fields:: Non-constant Field Numbers.
-* Changing Fields:: Changing the Contents of a Field.
-* Field Separators:: The field separator and how to change it.
-* Constant Size:: Reading constant width data.
-* Multiple Line:: Reading multi-line records.
-* Getline:: Reading files under explicit program control
- using the @code{getline} function.
-* Close Input:: Closing an input file (so you can read from
- the beginning once more).
-@end menu
-
-@node Records, Fields, Reading Files, Reading Files
-@section How Input is Split into Records
-
-@cindex record separator
-The @code{awk} language divides its input into records and fields.
-Records are separated by a character called the @dfn{record separator}.
-By default, the record separator is the newline character, defining
-a record to be a single line of text.@refill
-
-@iftex
-@cindex changing the record separator
-@end iftex
-@vindex RS
-Sometimes you may want to use a different character to separate your
-records. You can use a different character by changing the built-in
-variable @code{RS}. The value of @code{RS} is a string that says how
-to separate records; the default value is @code{"\n"}, the string containing
-just a newline character. This is why records are, by default, single lines.
-
-@code{RS} can have any string as its value, but only the first character
-of the string is used as the record separator. The other characters are
-ignored. @code{RS} is exceptional in this regard; @code{awk} uses the
-full value of all its other built-in variables.@refill
-
-@ignore
-Someday this should be true!
-
-The value of @code{RS} is not limited to a one-character string. It can
-be any regular expression (@pxref{Regexp, ,Regular Expressions as Patterns}).
-In general, each record
-ends at the next string that matches the regular expression; the next
-record starts at the end of the matching string. This general rule is
-actually at work in the usual case, where @code{RS} contains just a
-newline: a record ends at the beginning of the next matching string (the
-next newline in the input) and the following record starts just after
-the end of this string (at the first character of the following line).
-The newline, since it matches @code{RS}, is not part of either record.@refill
-@end ignore
-
-You can change the value of @code{RS} in the @code{awk} program with the
-assignment operator, @samp{=} (@pxref{Assignment Ops, ,Assignment Expressions}).
-The new record-separator character should be enclosed in quotation marks to make
-a string constant. Often the right time to do this is at the beginning
-of execution, before any input has been processed, so that the very
-first record will be read with the proper separator. To do this, use
-the special @code{BEGIN} pattern
-(@pxref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}). For
-example:@refill
-
-@example
-awk 'BEGIN @{ RS = "/" @} ; @{ print $0 @}' BBS-list
-@end example
-
-@noindent
-changes the value of @code{RS} to @code{"/"}, before reading any input.
-This is a string whose first character is a slash; as a result, records
-are separated by slashes. Then the input file is read, and the second
-rule in the @code{awk} program (the action with no pattern) prints each
-record. Since each @code{print} statement adds a newline at the end of
-its output, the effect of this @code{awk} program is to copy the input
-with each slash changed to a newline.
-
-Another way to change the record separator is on the command line,
-using the variable-assignment feature
-(@pxref{Command Line, ,Invoking @code{awk}}).@refill
-
-@example
-awk '@{ print $0 @}' RS="/" BBS-list
-@end example
-
-@noindent
-This sets @code{RS} to @samp{/} before processing @file{BBS-list}.
-
-Reaching the end of an input file terminates the current input record,
-even if the last character in the file is not the character in @code{RS}.
-
-@ignore
-@c merge the preceding paragraph and this stuff into one paragraph
-@c and put it in an `expert info' section.
-This produces correct behavior in the vast majority of cases, although
-the following (extreme) pipeline prints a surprising @samp{1}. (There
-is one field, consisting of a newline.)
-
-@example
-echo | awk 'BEGIN @{ RS = "a" @} ; @{ print NF @}'
-@end example
-
-@end ignore
-
-The empty string, @code{""} (a string of no characters), has a special meaning
-as the value of @code{RS}: it means that records are separated only
-by blank lines. @xref{Multiple Line, ,Multiple-Line Records}, for more details.
-
-@cindex number of records, @code{NR} or @code{FNR}
-@vindex NR
-@vindex FNR
-The @code{awk} utility keeps track of the number of records that have
-been read so far from the current input file. This value is stored in a
-built-in variable called @code{FNR}. It is reset to zero when a new
-file is started. Another built-in variable, @code{NR}, is the total
-number of input records read so far from all files. It starts at zero
-but is never automatically reset to zero.
-
-If you change the value of @code{RS} in the middle of an @code{awk} run,
-the new value is used to delimit subsequent records, but the record
-currently being processed (and records already processed) are not
-affected.
-
-@node Fields, Non-Constant Fields, Records, Reading Files
-@section Examining Fields
-
-@cindex examining fields
-@cindex fields
-@cindex accessing fields
-When @code{awk} reads an input record, the record is
-automatically separated or @dfn{parsed} by the interpreter into chunks
-called @dfn{fields}. By default, fields are separated by whitespace,
-like words in a line.
-Whitespace in @code{awk} means any string of one or more spaces and/or
-tabs; other characters such as newline, formfeed, and so on, that are
-considered whitespace by other languages are @emph{not} considered
-whitespace by @code{awk}.@refill
-
-The purpose of fields is to make it more convenient for you to refer to
-these pieces of the record. You don't have to use them---you can
-operate on the whole record if you wish---but fields are what make
-simple @code{awk} programs so powerful.
-
-@cindex @code{$} (field operator)
-@cindex operators, @code{$}
-To refer to a field in an @code{awk} program, you use a dollar-sign,
-@samp{$}, followed by the number of the field you want. Thus, @code{$1}
-refers to the first field, @code{$2} to the second, and so on. For
-example, suppose the following is a line of input:@refill
-
-@example
-This seems like a pretty nice example.
-@end example
-
-@noindent
-Here the first field, or @code{$1}, is @samp{This}; the second field, or
-@code{$2}, is @samp{seems}; and so on. Note that the last field,
-@code{$7}, is @samp{example.}. Because there is no space between the
-@samp{e} and the @samp{.}, the period is considered part of the seventh
-field.@refill
-
-No matter how many fields there are, the last field in a record can be
-represented by @code{$NF}. So, in the example above, @code{$NF} would
-be the same as @code{$7}, which is @samp{example.}. Why this works is
-explained below (@pxref{Non-Constant Fields, ,Non-constant Field Numbers}).
-If you try to refer to a field beyond the last one, such as @code{$8}
-when the record has only 7 fields, you get the empty string.@refill
-
-@vindex NF
-@cindex number of fields, @code{NF}
-Plain @code{NF}, with no @samp{$}, is a built-in variable whose value
-is the number of fields in the current record.
-
-@code{$0}, which looks like an attempt to refer to the zeroth field, is
-a special case: it represents the whole input record. This is what you
-would use if you weren't interested in fields.
-
-Here are some more examples:
-
-@example
-awk '$1 ~ /foo/ @{ print $0 @}' BBS-list
-@end example
-
-@noindent
-This example prints each record in the file @file{BBS-list} whose first
-field contains the string @samp{foo}. The operator @samp{~} is called a
-@dfn{matching operator} (@pxref{Comparison Ops, ,Comparison Expressions});
-it tests whether a string (here, the field @code{$1}) matches a given regular
-expression.@refill
-
-By contrast, the following example:
-
-@example
-awk '/foo/ @{ print $1, $NF @}' BBS-list
-@end example
-
-@noindent
-looks for @samp{foo} in @emph{the entire record} and prints the first
-field and the last field for each input record containing a
-match.@refill
-
-@node Non-Constant Fields, Changing Fields, Fields, Reading Files
-@section Non-constant Field Numbers
-
-The number of a field does not need to be a constant. Any expression in
-the @code{awk} language can be used after a @samp{$} to refer to a
-field. The value of the expression specifies the field number. If the
-value is a string, rather than a number, it is converted to a number.
-Consider this example:@refill
-
-@example
-awk '@{ print $NR @}'
-@end example
-
-@noindent
-Recall that @code{NR} is the number of records read so far: 1 in the
-first record, 2 in the second, etc. So this example prints the first
-field of the first record, the second field of the second record, and so
-on. For the twentieth record, field number 20 is printed; most likely,
-the record has fewer than 20 fields, so this prints a blank line.
-
-Here is another example of using expressions as field numbers:
-
-@example
-awk '@{ print $(2*2) @}' BBS-list
-@end example
-
-The @code{awk} language must evaluate the expression @code{(2*2)} and use
-its value as the number of the field to print. The @samp{*} sign
-represents multiplication, so the expression @code{2*2} evaluates to 4.
-The parentheses are used so that the multiplication is done before the
-@samp{$} operation; they are necessary whenever there is a binary
-operator in the field-number expression. This example, then, prints the
-hours of operation (the fourth field) for every line of the file
-@file{BBS-list}.@refill
-
-If the field number you compute is zero, you get the entire record.
-Thus, @code{$(2-2)} has the same value as @code{$0}. Negative field
-numbers are not allowed.
-
-The number of fields in the current record is stored in the built-in
-variable @code{NF} (@pxref{Built-in Variables}). The expression
-@code{$NF} is not a special feature: it is the direct consequence of
-evaluating @code{NF} and using its value as a field number.
-
-@node Changing Fields, Field Separators, Non-Constant Fields, Reading Files
-@section Changing the Contents of a Field
-
-@cindex field, changing contents of
-@cindex changing contents of a field
-@cindex assignment to fields
-You can change the contents of a field as seen by @code{awk} within an
-@code{awk} program; this changes what @code{awk} perceives as the
-current input record. (The actual input is untouched: @code{awk} never
-modifies the input file.)
-
-Consider this example:
-
-@smallexample
-awk '@{ $3 = $2 - 10; print $2, $3 @}' inventory-shipped
-@end smallexample
-
-@noindent
-The @samp{-} sign represents subtraction, so this program reassigns
-field three, @code{$3}, to be the value of field two minus ten,
-@code{$2 - 10}. (@xref{Arithmetic Ops, ,Arithmetic Operators}.)
-Then field two, and the new value for field three, are printed.
-
-In order for this to work, the text in field @code{$2} must make sense
-as a number; the string of characters must be converted to a number in
-order for the computer to do arithmetic on it. The number resulting
-from the subtraction is converted back to a string of characters which
-then becomes field three.
-@xref{Conversion, ,Conversion of Strings and Numbers}.@refill
-
-When you change the value of a field (as perceived by @code{awk}), the
-text of the input record is recalculated to contain the new field where
-the old one was. Therefore, @code{$0} changes to reflect the altered
-field. Thus,
-
-@smallexample
-awk '@{ $2 = $2 - 10; print $0 @}' inventory-shipped
-@end smallexample
-
-@noindent
-prints a copy of the input file, with 10 subtracted from the second
-field of each line.
-
-You can also assign contents to fields that are out of range. For
-example:
-
-@smallexample
-awk '@{ $6 = ($5 + $4 + $3 + $2) ; print $6 @}' inventory-shipped
-@end smallexample
-
-@noindent
-We've just created @code{$6}, whose value is the sum of fields
-@code{$2}, @code{$3}, @code{$4}, and @code{$5}. The @samp{+} sign
-represents addition. For the file @file{inventory-shipped}, @code{$6}
-represents the total number of parcels shipped for a particular month.
-
-Creating a new field changes the internal @code{awk} copy of the current
-input record---the value of @code{$0}. Thus, if you do @samp{print $0}
-after adding a field, the record printed includes the new field, with
-the appropriate number of field separators between it and the previously
-existing fields.
-
-This recomputation affects and is affected by several features not yet
-discussed, in particular, the @dfn{output field separator}, @code{OFS},
-which is used to separate the fields (@pxref{Output Separators}), and
-@code{NF} (the number of fields; @pxref{Fields, ,Examining Fields}).
-For example, the value of @code{NF} is set to the number of the highest
-field you create.@refill
-
-Note, however, that merely @emph{referencing} an out-of-range field
-does @emph{not} change the value of either @code{$0} or @code{NF}.
-Referencing an out-of-range field merely produces a null string. For
-example:@refill
-
-@smallexample
-if ($(NF+1) != "")
- print "can't happen"
-else
- print "everything is normal"
-@end smallexample
-
-@noindent
-should print @samp{everything is normal}, because @code{NF+1} is certain
-to be out of range. (@xref{If Statement, ,The @code{if} Statement},
-for more information about @code{awk}'s @code{if-else} statements.)@refill
-
-It is important to note that assigning to a field will change the
-value of @code{$0}, but will not change the value of @code{NF},
-even when you assign the null string to a field. For example:
-
-@smallexample
-echo a b c d | awk '@{ OFS = ":"; $2 = "" ; print ; print NF @}'
-@end smallexample
-
-@noindent
-prints
-
-@smallexample
-a::c:d
-4
-@end smallexample
-
-@noindent
-The field is still there, it just has an empty value. You can tell
-because there are two colons in a row.
-
-@node Field Separators, Constant Size, Changing Fields, Reading Files
-@section Specifying how Fields are Separated
-@vindex FS
-@cindex fields, separating
-@cindex field separator, @code{FS}
-@cindex @samp{-F} option
-
-(This section is rather long; it describes one of the most fundamental
-operations in @code{awk}. If you are a novice with @code{awk}, we
-recommend that you re-read this section after you have studied the
-section on regular expressions, @ref{Regexp, ,Regular Expressions as Patterns}.)
-
-The way @code{awk} splits an input record into fields is controlled by
-the @dfn{field separator}, which is a single character or a regular
-expression. @code{awk} scans the input record for matches for the
-separator; the fields themselves are the text between the matches. For
-example, if the field separator is @samp{oo}, then the following line:
-
-@smallexample
-moo goo gai pan
-@end smallexample
-
-@noindent
-would be split into three fields: @samp{m}, @samp{@ g} and @samp{@ gai@
-pan}.
-
-The field separator is represented by the built-in variable @code{FS}.
-Shell programmers take note! @code{awk} does not use the name @code{IFS}
-which is used by the shell.@refill
-
-You can change the value of @code{FS} in the @code{awk} program with the
-assignment operator, @samp{=} (@pxref{Assignment Ops, ,Assignment Expressions}).
-Often the right time to do this is at the beginning of execution,
-before any input has been processed, so that the very first record
-will be read with the proper separator. To do this, use the special
-@code{BEGIN} pattern
-(@pxref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}).
-For example, here we set the value of @code{FS} to the string
-@code{","}:@refill
-
-@smallexample
-awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}'
-@end smallexample
-
-@noindent
-Given the input line,
-
-@smallexample
-John Q. Smith, 29 Oak St., Walamazoo, MI 42139
-@end smallexample
-
-@noindent
-this @code{awk} program extracts the string @samp{@ 29 Oak St.}.
-
-@cindex field separator, choice of
-@cindex regular expressions as field separators
-Sometimes your input data will contain separator characters that don't
-separate fields the way you thought they would. For instance, the
-person's name in the example we've been using might have a title or
-suffix attached, such as @samp{John Q. Smith, LXIX}. From input
-containing such a name:
-
-@smallexample
-John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139
-@end smallexample
-
-@noindent
-the previous sample program would extract @samp{@ LXIX}, instead of
-@samp{@ 29 Oak St.}. If you were expecting the program to print the
-address, you would be surprised. So choose your data layout and
-separator characters carefully to prevent such problems.
-
-As you know, by default, fields are separated by whitespace sequences
-(spaces and tabs), not by single spaces: two spaces in a row do not
-delimit an empty field. The default value of the field separator is a
-string @w{@code{" "}} containing a single space. If this value were
-interpreted in the usual way, each space character would separate
-fields, so two spaces in a row would make an empty field between them.
-The reason this does not happen is that a single space as the value of
-@code{FS} is a special case: it is taken to specify the default manner
-of delimiting fields.
-
-If @code{FS} is any other single character, such as @code{","}, then
-each occurrence of that character separates two fields. Two consecutive
-occurrences delimit an empty field. If the character occurs at the
-beginning or the end of the line, that too delimits an empty field. The
-space character is the only single character which does not follow these
-rules.
-
-More generally, the value of @code{FS} may be a string containing any
-regular expression. Then each match in the record for the regular
-expression separates fields. For example, the assignment:@refill
-
-@smallexample
-FS = ", \t"
-@end smallexample
-
-@noindent
-makes every area of an input line that consists of a comma followed by a
-space and a tab, into a field separator. (@samp{\t} stands for a
-tab.)@refill
-
-For a less trivial example of a regular expression, suppose you want
-single spaces to separate fields the way single commas were used above.
-You can set @code{FS} to @w{@code{"[@ ]"}}. This regular expression
-matches a single space and nothing else.
-
-@c the following index entry is an overfull hbox. --mew 30jan1992
-@cindex field separator: on command line
-@cindex command line, setting @code{FS} on
-@code{FS} can be set on the command line. You use the @samp{-F} argument to
-do so. For example:
-
-@smallexample
-awk -F, '@var{program}' @var{input-files}
-@end smallexample
-
-@noindent
-sets @code{FS} to be the @samp{,} character. Notice that the argument uses
-a capital @samp{F}. Contrast this with @samp{-f}, which specifies a file
-containing an @code{awk} program. Case is significant in command options:
-the @samp{-F} and @samp{-f} options have nothing to do with each other.
-You can use both options at the same time to set the @code{FS} argument
-@emph{and} get an @code{awk} program from a file.@refill
-
-@c begin expert info
-The value used for the argument to @samp{-F} is processed in exactly the
-same way as assignments to the built-in variable @code{FS}. This means that
-if the field separator contains special characters, they must be escaped
-appropriately. For example, to use a @samp{\} as the field separator, you
-would have to type:
-
-@smallexample
-# same as FS = "\\"
-awk -F\\\\ '@dots{}' files @dots{}
-@end smallexample
-
-@noindent
-Since @samp{\} is used for quoting in the shell, @code{awk} will see
-@samp{-F\\}. Then @code{awk} processes the @samp{\\} for escape
-characters (@pxref{Constants, ,Constant Expressions}), finally yielding
-a single @samp{\} to be used for the field separator.
-@c end expert info
-
-As a special case, in compatibility mode
-(@pxref{Command Line, ,Invoking @code{awk}}), if the
-argument to @samp{-F} is @samp{t}, then @code{FS} is set to the tab
-character. (This is because if you type @samp{-F\t}, without the quotes,
-at the shell, the @samp{\} gets deleted, so @code{awk} figures that you
-really want your fields to be separated with tabs, and not @samp{t}s.
-Use @samp{-v FS="t"} on the command line if you really do want to separate
-your fields with @samp{t}s.)@refill
-
-For example, let's use an @code{awk} program file called @file{baud.awk}
-that contains the pattern @code{/300/}, and the action @samp{print $1}.
-Here is the program:
-
-@smallexample
-/300/ @{ print $1 @}
-@end smallexample
-
-Let's also set @code{FS} to be the @samp{-} character, and run the
-program on the file @file{BBS-list}. The following command prints a
-list of the names of the bulletin boards that operate at 300 baud and
-the first three digits of their phone numbers:@refill
-
-@smallexample
-awk -F- -f baud.awk BBS-list
-@end smallexample
-
-@noindent
-It produces this output:
-
-@smallexample
-aardvark 555
-alpo
-barfly 555
-bites 555
-camelot 555
-core 555
-fooey 555
-foot 555
-macfoo 555
-sdace 555
-sabafoo 555
-@end smallexample
-
-@noindent
-Note the second line of output. If you check the original file, you will
-see that the second line looked like this:
-
-@smallexample
-alpo-net 555-3412 2400/1200/300 A
-@end smallexample
-
-The @samp{-} as part of the system's name was used as the field
-separator, instead of the @samp{-} in the phone number that was
-originally intended. This demonstrates why you have to be careful in
-choosing your field and record separators.
-
-The following program searches the system password file, and prints
-the entries for users who have no password:
-
-@smallexample
-awk -F: '$2 == ""' /etc/passwd
-@end smallexample
-
-@noindent
-Here we use the @samp{-F} option on the command line to set the field
-separator. Note that fields in @file{/etc/passwd} are separated by
-colons. The second field represents a user's encrypted password, but if
-the field is empty, that user has no password.
-
-@c begin expert info
-According to the @sc{posix} standard, @code{awk} is supposed to behave
-as if each record is split into fields at the time that it is read.
-In particular, this means that you can change the value of @code{FS}
-after a record is read, but before any of the fields are referenced.
-The value of the fields (i.e. how they were split) should reflect the
-old value of @code{FS}, not the new one.
-
-However, many implementations of @code{awk} do not do this. Instead,
-they defer splitting the fields until a field reference actually happens,
-using the @emph{current} value of @code{FS}! This behavior can be difficult
-to diagnose. The following example illustrates the results of the two methods.
-(The @code{sed} command prints just the first line of @file{/etc/passwd}.)
-
-@smallexample
-sed 1q /etc/passwd | awk '@{ FS = ":" ; print $1 @}'
-@end smallexample
-
-@noindent
-will usually print
-
-@smallexample
-root
-@end smallexample
-
-@noindent
-on an incorrect implementation of @code{awk}, while @code{gawk}
-will print something like
-
-@smallexample
-root:nSijPlPhZZwgE:0:0:Root:/:
-@end smallexample
-@c end expert info
-
-@c begin expert info
-There is an important difference between the two cases of @samp{FS = @w{" "}}
-(a single blank) and @samp{FS = @w{"[ \t]+"}} (which is a regular expression
-matching one or more blanks or tabs). For both values of @code{FS}, fields
-are separated by runs of blanks and/or tabs. However, when the value of
-@code{FS} is @code{" "}, @code{awk} will strip leading and trailing whitespace
-from the record, and then decide where the fields are.
-
-For example, the following expression prints @samp{b}:
-
-@smallexample
-echo ' a b c d ' | awk '@{ print $2 @}'
-@end smallexample
-
-@noindent
-However, the following prints @samp{a}:
-
-@smallexample
-echo ' a b c d ' | awk 'BEGIN @{ FS = "[ \t]+" @} ; @{ print $2 @}'
-@end smallexample
-
-@noindent
-In this case, the first field is null.
-
-The stripping of leading and trailing whitespace also comes into
-play whenever @code{$0} is recomputed. For instance, this pipeline
-
-@smallexample
-echo ' a b c d' | awk '@{ print; $2 = $2; print @}'
-@end smallexample
-
-@noindent
-produces this output:
-
-@smallexample
- a b c d
-a b c d
-@end smallexample
-
-@noindent
-The first @code{print} statement prints the record as it was read,
-with leading whitespace intact. The assignment to @code{$2} rebuilds
-@code{$0} by concatenating @code{$1} through @code{$NF} together,
-separated by the value of @code{OFS}. Since the leading whitespace
-was ignored when finding @code{$1}, it is not part of the new @code{$0}.
-Finally, the last @code{print} statement prints the new @code{$0}.
-@c end expert info
-
-The following table summarizes how fields are split, based on the
-value of @code{FS}.
-
-@table @code
-@item FS == " "
-Fields are separated by runs of whitespace. Leading and trailing
-whitespace are ignored. This is the default.
-
-@item FS == @var{any single character}
-Fields are separated by each occurrence of the character. Multiple
-successive occurrences delimit empty fields, as do leading and
-trailing occurrences.
-
-@item FS == @var{regexp}
-Fields are separated by occurrences of characters that match @var{regexp}.
-Leading and trailing matches of @var{regexp} delimit empty fields.
-@end table
-
-@node Constant Size, Multiple Line, Field Separators, Reading Files
-@section Reading Fixed-width Data
-
-(This section discusses an advanced, experimental feature. If you are
-a novice @code{awk} user, you may wish to skip it on the first reading.)
-
-@code{gawk} 2.13 introduced a new facility for dealing with fixed-width fields
-with no distinctive field separator. Data of this nature arises typically
-in one of at least two ways: the input for old FORTRAN programs where
-numbers are run together, and the output of programs that did not anticipate
-the use of their output as input for other programs.
-
-An example of the latter is a table where all the columns are lined up by
-the use of a variable number of spaces and @emph{empty fields are just
-spaces}. Clearly, @code{awk}'s normal field splitting based on @code{FS}
-will not work well in this case. (Although a portable @code{awk} program
-can use a series of @code{substr} calls on @code{$0}, this is awkward and
-inefficient for a large number of fields.)@refill
-
-The splitting of an input record into fixed-width fields is specified by
-assigning a string containing space-separated numbers to the built-in
-variable @code{FIELDWIDTHS}. Each number specifies the width of the field
-@emph{including} columns between fields. If you want to ignore the columns
-between fields, you can specify the width as a separate field that is
-subsequently ignored.
-
-The following data is the output of the @code{w} utility. It is useful
-to illustrate the use of @code{FIELDWIDTHS}.
-
-@smallexample
- 10:06pm up 21 days, 14:04, 23 users
-User tty login@ idle JCPU PCPU what
-hzuo ttyV0 8:58pm 9 5 vi p24.tex
-hzang ttyV3 6:37pm 50 -csh
-eklye ttyV5 9:53pm 7 1 em thes.tex
-dportein ttyV6 8:17pm 1:47 -csh
-gierd ttyD3 10:00pm 1 elm
-dave ttyD4 9:47pm 4 4 w
-brent ttyp0 26Jun91 4:46 26:46 4:41 bash
-dave ttyq4 26Jun9115days 46 46 wnewmail
-@end smallexample
-
-The following program takes the above input, converts the idle time to
-number of seconds and prints out the first two fields and the calculated
-idle time. (This program uses a number of @code{awk} features that
-haven't been introduced yet.)@refill
-
-@smallexample
-BEGIN @{ FIELDWIDTHS = "9 6 10 6 7 7 35" @}
-NR > 2 @{
- idle = $4
- sub(/^ */, "", idle) # strip leading spaces
- if (idle == "") idle = 0
- if (idle ~ /:/) @{ split(idle, t, ":"); idle = t[1] * 60 + t[2] @}
- if (idle ~ /days/) @{ idle *= 24 * 60 * 60 @}
-
- print $1, $2, idle
-@}
-@end smallexample
-
-Here is the result of running the program on the data:
-
-@smallexample
-hzuo ttyV0 0
-hzang ttyV3 50
-eklye ttyV5 0
-dportein ttyV6 107
-gierd ttyD3 1
-dave ttyD4 0
-brent ttyp0 286
-dave ttyq4 1296000
-@end smallexample
-
-Another (possibly more practical) example of fixed-width input data
-would be the input from a deck of balloting cards. In some parts of
-the United States, voters make their choices by punching holes in computer
-cards. These cards are then processed to count the votes for any particular
-candidate or on any particular issue. Since a voter may choose not to
-vote on some issue, any column on the card may be empty. An @code{awk}
-program for processing such data could use the @code{FIELDWIDTHS} feature
-to simplify reading the data.@refill
-
-@c of course, getting gawk to run on a system with card readers is
-@c another story!
-
-This feature is still experimental, and will likely evolve over time.
-
-@node Multiple Line, Getline, Constant Size, Reading Files
-@section Multiple-Line Records
-
-@cindex multiple line records
-@cindex input, multiple line records
-@cindex reading files, multiple line records
-@cindex records, multiple line
-In some data bases, a single line cannot conveniently hold all the
-information in one entry. In such cases, you can use multi-line
-records.
-
-The first step in doing this is to choose your data format: when records
-are not defined as single lines, how do you want to define them?
-What should separate records?
-
-One technique is to use an unusual character or string to separate
-records. For example, you could use the formfeed character (written
-@code{\f} in @code{awk}, as in C) to separate them, making each record
-a page of the file. To do this, just set the variable @code{RS} to
-@code{"\f"} (a string containing the formfeed character). Any
-other character could equally well be used, as long as it won't be part
-of the data in a record.@refill
-
-@ignore
-Another technique is to have blank lines separate records. The string
-@code{"^\n+"} is a regular expression that matches any sequence of
-newlines starting at the beginning of a line---in other words, it
-matches a sequence of blank lines. If you set @code{RS} to this string,
-a record always ends at the first blank line encountered. In
-addition, a regular expression always matches the longest possible
-sequence when there is a choice. So the next record doesn't start until
-the first nonblank line that follows---no matter how many blank lines
-appear in a row, they are considered one record-separator.
-@end ignore
-
-Another technique is to have blank lines separate records. By a special
-dispensation, a null string as the value of @code{RS} indicates that
-records are separated by one or more blank lines. If you set @code{RS}
-to the null string, a record always ends at the first blank line
-encountered. And the next record doesn't start until the first nonblank
-line that follows---no matter how many blank lines appear in a row, they
-are considered one record-separator. (End of file is also considered
-a record separator.)@refill
-@c !!! This use of `end of file' is confusing. Needs to be clarified.
-
-The second step is to separate the fields in the record. One way to do
-this is to put each field on a separate line: to do this, just set the
-variable @code{FS} to the string @code{"\n"}. (This simple regular
-expression matches a single newline.)
-
-Another way to separate fields is to divide each of the lines into fields
-in the normal manner. This happens by default as a result of a special
-feature: when @code{RS} is set to the null string, the newline character
-@emph{always} acts as a field separator. This is in addition to whatever
-field separations result from @code{FS}.
-
-The original motivation for this special exception was probably so that
-you get useful behavior in the default case (i.e., @w{@code{FS == " "}}).
-This feature can be a problem if you really don't want the
-newline character to separate fields, since there is no way to
-prevent it. However, you can work around this by using the @code{split}
-function to break up the record manually
-(@pxref{String Functions, ,Built-in Functions for String Manipulation}).@refill
-
-@ignore
-Here are two ways to use records separated by blank lines and break each
-line into fields normally:
-
-@example
-awk 'BEGIN @{ RS = ""; FS = "[ \t\n]+" @} @{ print $1 @}' BBS-list
-
-@exdent @r{or}
-
-awk 'BEGIN @{ RS = "^\n+"; FS = "[ \t\n]+" @} @{ print $1 @}' BBS-list
-@end example
-@end ignore
-
-@ignore
-Here is how to use records separated by blank lines and break each
-line into fields normally:
-
-@example
-awk 'BEGIN @{ RS = ""; FS = "[ \t\n]+" @} ; @{ print $1 @}' BBS-list
-@end example
-@end ignore
-
-@node Getline, Close Input, Multiple Line, Reading Files
-@section Explicit Input with @code{getline}
-
-@findex getline
-@cindex input, explicit
-@cindex explicit input
-@cindex input, @code{getline} command
-@cindex reading files, @code{getline} command
-So far we have been getting our input files from @code{awk}'s main
-input stream---either the standard input (usually your terminal) or the
-files specified on the command line. The @code{awk} language has a
-special built-in command called @code{getline} that
-can be used to read input under your explicit control.@refill
-
-This command is quite complex and should @emph{not} be used by
-beginners. It is covered here because this is the chapter on input.
-The examples that follow the explanation of the @code{getline} command
-include material that has not been covered yet. Therefore, come back
-and study the @code{getline} command @emph{after} you have reviewed the
-rest of this manual and have a good knowledge of how @code{awk} works.
-
-@vindex ERRNO
-@cindex differences: @code{gawk} and @code{awk}
-@code{getline} returns 1 if it finds a record, and 0 if the end of the
-file is encountered. If there is some error in getting a record, such
-as a file that cannot be opened, then @code{getline} returns @minus{}1.
-In this case, @code{gawk} sets the variable @code{ERRNO} to a string
-describing the error that occurred.
-
-In the following examples, @var{command} stands for a string value that
-represents a shell command.
-
-@table @code
-@item getline
-The @code{getline} command can be used without arguments to read input
-from the current input file. All it does in this case is read the next
-input record and split it up into fields. This is useful if you've
-finished processing the current record, but you want to do some special
-processing @emph{right now} on the next record. Here's an
-example:@refill
-
-@example
-awk '@{
- if (t = index($0, "/*")) @{
- if (t > 1)
- tmp = substr($0, 1, t - 1)
- else
- tmp = ""
- u = index(substr($0, t + 2), "*/")
- while (u == 0) @{
- getline
- t = -1
- u = index($0, "*/")
- @}
- if (u <= length($0) - 2)
- $0 = tmp substr($0, t + u + 3)
- else
- $0 = tmp
- @}
- print $0
-@}'
-@end example
-
-This @code{awk} program deletes all C-style comments, @samp{/* @dots{}
-*/}, from the input. By replacing the @samp{print $0} with other
-statements, you could perform more complicated processing on the
-decommented input, like searching for matches of a regular
-expression. (This program has a subtle problem---can you spot it?)
-
-@c the program to remove comments doesn't work if one
-@c comment ends and another begins on the same line. (Your
-@c idea for restart would be useful here). --- brennan@boeing.com
-
-This form of the @code{getline} command sets @code{NF} (the number of
-fields; @pxref{Fields, ,Examining Fields}), @code{NR} (the number of
-records read so far; @pxref{Records, ,How Input is Split into Records}),
-@code{FNR} (the number of records read from this input file), and the
-value of @code{$0}.
-
-@strong{Note:} the new value of @code{$0} is used in testing
-the patterns of any subsequent rules. The original value
-of @code{$0} that triggered the rule which executed @code{getline}
-is lost. By contrast, the @code{next} statement reads a new record
-but immediately begins processing it normally, starting with the first
-rule in the program. @xref{Next Statement, ,The @code{next} Statement}.
-
-@item getline @var{var}
-This form of @code{getline} reads a record into the variable @var{var}.
-This is useful when you want your program to read the next record from
-the current input file, but you don't want to subject the record to the
-normal input processing.
-
-For example, suppose the next line is a comment, or a special string,
-and you want to read it, but you must make certain that it won't trigger
-any rules. This version of @code{getline} allows you to read that line
-and store it in a variable so that the main
-read-a-line-and-check-each-rule loop of @code{awk} never sees it.
-
-The following example swaps every two lines of input. For example, given:
-
-@example
-wan
-tew
-free
-phore
-@end example
-
-@noindent
-it outputs:
-
-@example
-tew
-wan
-phore
-free
-@end example
-
-@noindent
-Here's the program:
-
-@example
-@group
-awk '@{
- if ((getline tmp) > 0) @{
- print tmp
- print $0
- @} else
- print $0
-@}'
-@end group
-@end example
-
-The @code{getline} function used in this way sets only the variables
-@code{NR} and @code{FNR} (and of course, @var{var}). The record is not
-split into fields, so the values of the fields (including @code{$0}) and
-the value of @code{NF} do not change.@refill
-
-@item getline < @var{file}
-@cindex input redirection
-@cindex redirection of input
-This form of the @code{getline} function takes its input from the file
-@var{file}. Here @var{file} is a string-valued expression that
-specifies the file name. @samp{< @var{file}} is called a @dfn{redirection}
-since it directs input to come from a different place.
-
-This form is useful if you want to read your input from a particular
-file, instead of from the main input stream. For example, the following
-program reads its input record from the file @file{foo.input} when it
-encounters a first field with a value equal to 10 in the current input
-file.@refill
-
-@example
-awk '@{
- if ($1 == 10) @{
- getline < "foo.input"
- print
- @} else
- print
-@}'
-@end example
-
-Since the main input stream is not used, the values of @code{NR} and
-@code{FNR} are not changed. But the record read is split into fields in
-the normal manner, so the values of @code{$0} and other fields are
-changed. So is the value of @code{NF}.
-
-This does not cause the record to be tested against all the patterns
-in the @code{awk} program, in the way that would happen if the record
-were read normally by the main processing loop of @code{awk}. However
-the new record is tested against any subsequent rules, just as when
-@code{getline} is used without a redirection.
-
-@item getline @var{var} < @var{file}
-This form of the @code{getline} function takes its input from the file
-@var{file} and puts it in the variable @var{var}. As above, @var{file}
-is a string-valued expression that specifies the file from which to read.
-
-In this version of @code{getline}, none of the built-in variables are
-changed, and the record is not split into fields. The only variable
-changed is @var{var}.
-
-For example, the following program copies all the input files to the
-output, except for records that say @w{@samp{@@include @var{filename}}}.
-Such a record is replaced by the contents of the file
-@var{filename}.@refill
-
-@example
-awk '@{
- if (NF == 2 && $1 == "@@include") @{
- while ((getline line < $2) > 0)
- print line
- close($2)
- @} else
- print
-@}'
-@end example
-
-Note here how the name of the extra input file is not built into
-the program; it is taken from the data, from the second field on
-the @samp{@@include} line.@refill
-
-The @code{close} function is called to ensure that if two identical
-@samp{@@include} lines appear in the input, the entire specified file is
-included twice. @xref{Close Input, ,Closing Input Files and Pipes}.@refill
-
-One deficiency of this program is that it does not process nested
-@samp{@@include} statements the way a true macro preprocessor would.
-
-@item @var{command} | getline
-You can @dfn{pipe} the output of a command into @code{getline}. A pipe is
-simply a way to link the output of one program to the input of another. In
-this case, the string @var{command} is run as a shell command and its output
-is piped into @code{awk} to be used as input. This form of @code{getline}
-reads one record from the pipe.
-
-For example, the following program copies input to output, except for lines
-that begin with @samp{@@execute}, which are replaced by the output produced by
-running the rest of the line as a shell command:
-
-@example
-awk '@{
- if ($1 == "@@execute") @{
- tmp = substr($0, 10)
- while ((tmp | getline) > 0)
- print
- close(tmp)
- @} else
- print
-@}'
-@end example
-
-@noindent
-The @code{close} function is called to ensure that if two identical
-@samp{@@execute} lines appear in the input, the command is run for
-each one. @xref{Close Input, ,Closing Input Files and Pipes}.
-
-Given the input:
-
-@example
-foo
-bar
-baz
-@@execute who
-bletch
-@end example
-
-@noindent
-the program might produce:
-
-@example
-foo
-bar
-baz
-hack ttyv0 Jul 13 14:22
-hack ttyp0 Jul 13 14:23 (gnu:0)
-hack ttyp1 Jul 13 14:23 (gnu:0)
-hack ttyp2 Jul 13 14:23 (gnu:0)
-hack ttyp3 Jul 13 14:23 (gnu:0)
-bletch
-@end example
-
-@noindent
-Notice that this program ran the command @code{who} and printed the result.
-(If you try this program yourself, you will get different results, showing
-you who is logged in on your system.)
-
-This variation of @code{getline} splits the record into fields, sets the
-value of @code{NF} and recomputes the value of @code{$0}. The values of
-@code{NR} and @code{FNR} are not changed.
-
-@item @var{command} | getline @var{var}
-The output of the command @var{command} is sent through a pipe to
-@code{getline} and into the variable @var{var}. For example, the
-following program reads the current date and time into the variable
-@code{current_time}, using the @code{date} utility, and then
-prints it.@refill
-
-@example
-awk 'BEGIN @{
- "date" | getline current_time
- close("date")
- print "Report printed on " current_time
-@}'
-@end example
-
-In this version of @code{getline}, none of the built-in variables are
-changed, and the record is not split into fields.
-@end table
-
-@node Close Input, , Getline, Reading Files
-@section Closing Input Files and Pipes
-@cindex closing input files and pipes
-@findex close
-
-If the same file name or the same shell command is used with
-@code{getline} more than once during the execution of an @code{awk}
-program, the file is opened (or the command is executed) only the first time.
-At that time, the first record of input is read from that file or command.
-The next time the same file or command is used in @code{getline}, another
-record is read from it, and so on.
-
-This implies that if you want to start reading the same file again from
-the beginning, or if you want to rerun a shell command (rather than
-reading more output from the command), you must take special steps.
-What you must do is use the @code{close} function, as follows:
-
-@example
-close(@var{filename})
-@end example
-
-@noindent
-or
-
-@example
-close(@var{command})
-@end example
-
-The argument @var{filename} or @var{command} can be any expression. Its
-value must exactly equal the string that was used to open the file or
-start the command---for example, if you open a pipe with this:
-
-@example
-"sort -r names" | getline foo
-@end example
-
-@noindent
-then you must close it with this:
-
-@example
-close("sort -r names")
-@end example
-
-Once this function call is executed, the next @code{getline} from that
-file or command will reopen the file or rerun the command.
-
-@iftex
-@vindex ERRNO
-@cindex differences: @code{gawk} and @code{awk}
-@end iftex
-@code{close} returns a value of zero if the close succeeded.
-Otherwise, the value will be non-zero.
-In this case, @code{gawk} sets the variable @code{ERRNO} to a string
-describing the error that occurred.
-
-@node Printing, One-liners, Reading Files, Top
-@chapter Printing Output
-
-@cindex printing
-@cindex output
-One of the most common things that actions do is to output or @dfn{print}
-some or all of the input. For simple output, use the @code{print}
-statement. For fancier formatting use the @code{printf} statement.
-Both are described in this chapter.
-
-@menu
-* Print:: The @code{print} statement.
-* Print Examples:: Simple examples of @code{print} statements.
-* Output Separators:: The output separators and how to change them.
-* OFMT:: Controlling Numeric Output With @code{print}.
-* Printf:: The @code{printf} statement.
-* Redirection:: How to redirect output to multiple
- files and pipes.
-* Special Files:: File name interpretation in @code{gawk}.
- @code{gawk} allows access to
- inherited file descriptors.
-@end menu
-
-@node Print, Print Examples, Printing, Printing
-@section The @code{print} Statement
-@cindex @code{print} statement
-
-The @code{print} statement does output with simple, standardized
-formatting. You specify only the strings or numbers to be printed, in a
-list separated by commas. They are output, separated by single spaces,
-followed by a newline. The statement looks like this:
-
-@example
-print @var{item1}, @var{item2}, @dots{}
-@end example
-
-@noindent
-The entire list of items may optionally be enclosed in parentheses. The
-parentheses are necessary if any of the item expressions uses a
-relational operator; otherwise it could be confused with a redirection
-(@pxref{Redirection, ,Redirecting Output of @code{print} and @code{printf}}).
-The relational operators are @samp{==},
-@samp{!=}, @samp{<}, @samp{>}, @samp{>=}, @samp{<=}, @samp{~} and
-@samp{!~} (@pxref{Comparison Ops, ,Comparison Expressions}).@refill
-
-The items printed can be constant strings or numbers, fields of the
-current record (such as @code{$1}), variables, or any @code{awk}
-expressions. The @code{print} statement is completely general for
-computing @emph{what} values to print. With two exceptions,
-you cannot specify @emph{how} to print them---how many
-columns, whether to use exponential notation or not, and so on.
-(@xref{Output Separators}, and
-@ref{OFMT, ,Controlling Numeric Output with @code{print}}.)
-For that, you need the @code{printf} statement
-(@pxref{Printf, ,Using @code{printf} Statements for Fancier Printing}).@refill
-
-The simple statement @samp{print} with no items is equivalent to
-@samp{print $0}: it prints the entire current record. To print a blank
-line, use @samp{print ""}, where @code{""} is the null, or empty,
-string.
-
-To print a fixed piece of text, use a string constant such as
-@w{@code{"Hello there"}} as one item. If you forget to use the
-double-quote characters, your text will be taken as an @code{awk}
-expression, and you will probably get an error. Keep in mind that a
-space is printed between any two items.
-
-Most often, each @code{print} statement makes one line of output. But it
-isn't limited to one line. If an item value is a string that contains a
-newline, the newline is output along with the rest of the string. A
-single @code{print} can make any number of lines this way.
-
-@node Print Examples, Output Separators, Print, Printing
-@section Examples of @code{print} Statements
-
-Here is an example of printing a string that contains embedded newlines:
-
-@example
-awk 'BEGIN @{ print "line one\nline two\nline three" @}'
-@end example
-
-@noindent
-produces output like this:
-
-@example
-line one
-line two
-line three
-@end example
-
-Here is an example that prints the first two fields of each input record,
-with a space between them:
-
-@example
-awk '@{ print $1, $2 @}' inventory-shipped
-@end example
-
-@noindent
-Its output looks like this:
-
-@example
-Jan 13
-Feb 15
-Mar 15
-@dots{}
-@end example
-
-A common mistake in using the @code{print} statement is to omit the comma
-between two items. This often has the effect of making the items run
-together in the output, with no space. The reason for this is that
-juxtaposing two string expressions in @code{awk} means to concatenate
-them. For example, without the comma:
-
-@example
-awk '@{ print $1 $2 @}' inventory-shipped
-@end example
-
-@noindent
-prints:
-
-@example
-@group
-Jan13
-Feb15
-Mar15
-@dots{}
-@end group
-@end example
-
-Neither example's output makes much sense to someone unfamiliar with the
-file @file{inventory-shipped}. A heading line at the beginning would make
-it clearer. Let's add some headings to our table of months (@code{$1}) and
-green crates shipped (@code{$2}). We do this using the @code{BEGIN} pattern
-(@pxref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}) to force the headings to be printed only once:
-
-@example
-awk 'BEGIN @{ print "Month Crates"
- print "----- ------" @}
- @{ print $1, $2 @}' inventory-shipped
-@end example
-
-@noindent
-Did you already guess what happens? This program prints the following:
-
-@example
-@group
-Month Crates
------ ------
-Jan 13
-Feb 15
-Mar 15
-@dots{}
-@end group
-@end example
-
-@noindent
-The headings and the table data don't line up! We can fix this by printing
-some spaces between the two fields:
-
-@example
-awk 'BEGIN @{ print "Month Crates"
- print "----- ------" @}
- @{ print $1, " ", $2 @}' inventory-shipped
-@end example
-
-You can imagine that this way of lining up columns can get pretty
-complicated when you have many columns to fix. Counting spaces for two
-or three columns can be simple, but more than this and you can get
-``lost'' quite easily. This is why the @code{printf} statement was
-created (@pxref{Printf, ,Using @code{printf} Statements for Fancier Printing});
-one of its specialties is lining up columns of data.@refill
-
-@node Output Separators, OFMT, Print Examples, Printing
-@section Output Separators
-
-@cindex output field separator, @code{OFS}
-@vindex OFS
-@vindex ORS
-@cindex output record separator, @code{ORS}
-As mentioned previously, a @code{print} statement contains a list
-of items, separated by commas. In the output, the items are normally
-separated by single spaces. But they do not have to be spaces; a
-single space is only the default. You can specify any string of
-characters to use as the @dfn{output field separator} by setting the
-built-in variable @code{OFS}. The initial value of this variable
-is the string @w{@code{" "}}, that is, just a single space.@refill
-
-The output from an entire @code{print} statement is called an
-@dfn{output record}. Each @code{print} statement outputs one output
-record and then outputs a string called the @dfn{output record separator}.
-The built-in variable @code{ORS} specifies this string. The initial
-value of the variable is the string @code{"\n"} containing a newline
-character; thus, normally each @code{print} statement makes a separate line.
-
-You can change how output fields and records are separated by assigning
-new values to the variables @code{OFS} and/or @code{ORS}. The usual
-place to do this is in the @code{BEGIN} rule
-(@pxref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}), so
-that it happens before any input is processed. You may also do this
-with assignments on the command line, before the names of your input
-files.@refill
-
-The following example prints the first and second fields of each input
-record separated by a semicolon, with a blank line added after each
-line:@refill
-
-@example
-@group
-awk 'BEGIN @{ OFS = ";"; ORS = "\n\n" @}
- @{ print $1, $2 @}' BBS-list
-@end group
-@end example
-
-If the value of @code{ORS} does not contain a newline, all your output
-will be run together on a single line, unless you output newlines some
-other way.
-
-@node OFMT, Printf, Output Separators, Printing
-@section Controlling Numeric Output with @code{print}
-@vindex OFMT
-When you use the @code{print} statement to print numeric values,
-@code{awk} internally converts the number to a string of characters,
-and prints that string. @code{awk} uses the @code{sprintf} function
-to do this conversion. For now, it suffices to say that the @code{sprintf}
-function accepts a @dfn{format specification} that tells it how to format
-numbers (or strings), and that there are a number of different ways that
-numbers can be formatted. The different format specifications are discussed
-more fully in
-@ref{Printf, ,Using @code{printf} Statements for Fancier Printing}.@refill
-
-The built-in variable @code{OFMT} contains the default format specification
-that @code{print} uses with @code{sprintf} when it wants to convert a
-number to a string for printing. By supplying different format specifications
-as the value of @code{OFMT}, you can change how @code{print} will print
-your numbers. As a brief example:
-
-@example
-@group
-awk 'BEGIN @{ OFMT = "%d" # print numbers as integers
- print 17.23 @}'
-@end group
-@end example
-
-@noindent
-will print @samp{17}.
-
-@node Printf, Redirection, OFMT, Printing
-@section Using @code{printf} Statements for Fancier Printing
-@cindex formatted output
-@cindex output, formatted
-
-If you want more precise control over the output format than
-@code{print} gives you, use @code{printf}. With @code{printf} you can
-specify the width to use for each item, and you can specify various
-stylistic choices for numbers (such as what radix to use, whether to
-print an exponent, whether to print a sign, and how many digits to print
-after the decimal point). You do this by specifying a string, called
-the @dfn{format string}, which controls how and where to print the other
-arguments.
-
-@menu
-* Basic Printf:: Syntax of the @code{printf} statement.
-* Control Letters:: Format-control letters.
-* Format Modifiers:: Format-specification modifiers.
-* Printf Examples:: Several examples.
-@end menu
-
-@node Basic Printf, Control Letters, Printf, Printf
-@subsection Introduction to the @code{printf} Statement
-
-@cindex @code{printf} statement, syntax of
-The @code{printf} statement looks like this:@refill
-
-@example
-printf @var{format}, @var{item1}, @var{item2}, @dots{}
-@end example
-
-@noindent
-The entire list of arguments may optionally be enclosed in parentheses. The
-parentheses are necessary if any of the item expressions uses a
-relational operator; otherwise it could be confused with a redirection
-(@pxref{Redirection, ,Redirecting Output of @code{print} and @code{printf}}).
-The relational operators are @samp{==},
-@samp{!=}, @samp{<}, @samp{>}, @samp{>=}, @samp{<=}, @samp{~} and
-@samp{!~} (@pxref{Comparison Ops, ,Comparison Expressions}).@refill
-
-@cindex format string
-The difference between @code{printf} and @code{print} is the argument
-@var{format}. This is an expression whose value is taken as a string; it
-specifies how to output each of the other arguments. It is called
-the @dfn{format string}.
-
-The format string is the same as in the @sc{ansi} C library function
-@code{printf}. Most of @var{format} is text to be output verbatim.
-Scattered among this text are @dfn{format specifiers}, one per item.
-Each format specifier says to output the next item at that place in the
-format.@refill
-
-The @code{printf} statement does not automatically append a newline to its
-output. It outputs only what the format specifies. So if you want
-a newline, you must include one in the format. The output separator
-variables @code{OFS} and @code{ORS} have no effect on @code{printf}
-statements.@refill
-
-@node Control Letters, Format Modifiers, Basic Printf, Printf
-@subsection Format-Control Letters
-@cindex @code{printf}, format-control characters
-@cindex format specifier
-
-A format specifier starts with the character @samp{%} and ends with a
-@dfn{format-control letter}; it tells the @code{printf} statement how
-to output one item. (If you actually want to output a @samp{%}, write
-@samp{%%}.) The format-control letter specifies what kind of value to
-print. The rest of the format specifier is made up of optional
-@dfn{modifiers} which are parameters such as the field width to use.@refill
-
-Here is a list of the format-control letters:
-
-@table @samp
-@item c
-This prints a number as an ASCII character. Thus, @samp{printf "%c",
-65} outputs the letter @samp{A}. The output for a string value is
-the first character of the string.
-
-@item d
-This prints a decimal integer.
-
-@item i
-This also prints a decimal integer.
-
-@item e
-This prints a number in scientific (exponential) notation.
-For example,
-
-@example
-printf "%4.3e", 1950
-@end example
-
-@noindent
-prints @samp{1.950e+03}, with a total of four significant figures of
-which three follow the decimal point. The @samp{4.3} are @dfn{modifiers},
-discussed below.
-
-@item f
-This prints a number in floating point notation.
-
-@item g
-This prints a number in either scientific notation or floating point
-notation, whichever uses fewer characters.
-@ignore
-From: gatech!ames!elroy!cit-vax!EQL.Caltech.Edu!rankin (Pat Rankin)
-
-In the description of printf formats (p.43), the information for %g
-is incorrect (mainly, it's too much of an oversimplification). It's
-wrong in the AWK book too, and in the gawk man page. I suggested to
-David Trueman before 2.13 was released that the latter be revised, so
-that it matched gawk's behavior (rather than trying to change gawk to
-match the docs ;-). The documented description is nice and simple, but
-it doesn't match the actual underlying behavior of %g in the various C
-run-time libraries that gawk relies on. The precision value for g format
-is different than for f and e formats, so it's inaccurate to say 'g' is
-the shorter of 'e' or 'f'. For 'g', precision represents the number of
-significant digits rather than the number of decimal places, and it has
-special rules about how to format numbers with range between 10E-1 and
-10E-4. All in all, it's pretty messy, and I had to add that clumsy
-GFMT_WORKAROUND code because the VMS run-time library doesn't conform to
-the ANSI-C specifications.
-@end ignore
-
-@item o
-This prints an unsigned octal integer.
-
-@item s
-This prints a string.
-
-@item x
-This prints an unsigned hexadecimal integer.
-
-@item X
-This prints an unsigned hexadecimal integer. However, for the values 10
-through 15, it uses the letters @samp{A} through @samp{F} instead of
-@samp{a} through @samp{f}.
-
-@item %
-This isn't really a format-control letter, but it does have a meaning
-when used after a @samp{%}: the sequence @samp{%%} outputs one
-@samp{%}. It does not consume an argument.
-@end table
-
-@node Format Modifiers, Printf Examples, Control Letters, Printf
-@subsection Modifiers for @code{printf} Formats
-
-@cindex @code{printf}, modifiers
-@cindex modifiers (in format specifiers)
-A format specification can also include @dfn{modifiers} that can control
-how much of the item's value is printed and how much space it gets. The
-modifiers come between the @samp{%} and the format-control letter. Here
-are the possible modifiers, in the order in which they may appear:
-
-@table @samp
-@item -
-The minus sign, used before the width modifier, says to left-justify
-the argument within its specified width. Normally the argument
-is printed right-justified in the specified width. Thus,
-
-@example
-printf "%-4s", "foo"
-@end example
-
-@noindent
-prints @samp{foo }.
-
-@item @var{width}
-This is a number representing the desired width of a field. Inserting any
-number between the @samp{%} sign and the format control character forces the
-field to be expanded to this width. The default way to do this is to
-pad with spaces on the left. For example,
-
-@example
-printf "%4s", "foo"
-@end example
-
-@noindent
-prints @samp{ foo}.
-
-The value of @var{width} is a minimum width, not a maximum. If the item
-value requires more than @var{width} characters, it can be as wide as
-necessary. Thus,
-
-@example
-printf "%4s", "foobar"
-@end example
-
-@noindent
-prints @samp{foobar}.
-
-Preceding the @var{width} with a minus sign causes the output to be
-padded with spaces on the right, instead of on the left.
-
-@item .@var{prec}
-This is a number that specifies the precision to use when printing.
-This specifies the number of digits you want printed to the right of the
-decimal point. For a string, it specifies the maximum number of
-characters from the string that should be printed.
-@end table
-
-The C library @code{printf}'s dynamic @var{width} and @var{prec}
-capability (for example, @code{"%*.*s"}) is supported. Instead of
-supplying explicit @var{width} and/or @var{prec} values in the format
-string, you pass them in the argument list. For example:@refill
-
-@example
-w = 5
-p = 3
-s = "abcdefg"
-printf "<%*.*s>\n", w, p, s
-@end example
-
-@noindent
-is exactly equivalent to
-
-@example
-s = "abcdefg"
-printf "<%5.3s>\n", s
-@end example
-
-@noindent
-Both programs output @samp{@w{<@bullet{}@bullet{}abc>}}. (We have
-used the bullet symbol ``@bullet{}'' to represent a space, to clearly
-show you that there are two spaces in the output.)@refill
-
-Earlier versions of @code{awk} did not support this capability. You may
-simulate it by using concatenation to build up the format string,
-like so:@refill
-
-@example
-w = 5
-p = 3
-s = "abcdefg"
-printf "<%" w "." p "s>\n", s
-@end example
-
-@noindent
-This is not particularly easy to read, however.
-
-@node Printf Examples, , Format Modifiers, Printf
-@subsection Examples of Using @code{printf}
-
-Here is how to use @code{printf} to make an aligned table:
-
-@example
-awk '@{ printf "%-10s %s\n", $1, $2 @}' BBS-list
-@end example
-
-@noindent
-prints the names of bulletin boards (@code{$1}) of the file
-@file{BBS-list} as a string of 10 characters, left justified. It also
-prints the phone numbers (@code{$2}) afterward on the line. This
-produces an aligned two-column table of names and phone numbers:@refill
-
-@example
-@group
-aardvark 555-5553
-alpo-net 555-3412
-barfly 555-7685
-bites 555-1675
-camelot 555-0542
-core 555-2912
-fooey 555-1234
-foot 555-6699
-macfoo 555-6480
-sdace 555-3430
-sabafoo 555-2127
-@end group
-@end example
-
-Did you notice that we did not specify that the phone numbers be printed
-as numbers? They had to be printed as strings because the numbers are
-separated by a dash. This dash would be interpreted as a minus sign if
-we had tried to print the phone numbers as numbers. This would have led
-to some pretty confusing results.
-
-We did not specify a width for the phone numbers because they are the
-last things on their lines. We don't need to put spaces after them.
-
-We could make our table look even nicer by adding headings to the tops
-of the columns. To do this, use the @code{BEGIN} pattern
-(@pxref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns})
-to force the header to be printed only once, at the beginning of
-the @code{awk} program:@refill
-
-@example
-@group
-awk 'BEGIN @{ print "Name Number"
- print "---- ------" @}
- @{ printf "%-10s %s\n", $1, $2 @}' BBS-list
-@end group
-@end example
-
-Did you notice that we mixed @code{print} and @code{printf} statements in
-the above example? We could have used just @code{printf} statements to get
-the same results:
-
-@example
-@group
-awk 'BEGIN @{ printf "%-10s %s\n", "Name", "Number"
- printf "%-10s %s\n", "----", "------" @}
- @{ printf "%-10s %s\n", $1, $2 @}' BBS-list
-@end group
-@end example
-
-@noindent
-By outputting each column heading with the same format specification
-used for the elements of the column, we have made sure that the headings
-are aligned just like the columns.
-
-The fact that the same format specification is used three times can be
-emphasized by storing it in a variable, like this:
-
-@example
-awk 'BEGIN @{ format = "%-10s %s\n"
- printf format, "Name", "Number"
- printf format, "----", "------" @}
- @{ printf format, $1, $2 @}' BBS-list
-@end example
-
-See if you can use the @code{printf} statement to line up the headings and
-table data for our @file{inventory-shipped} example covered earlier in the
-section on the @code{print} statement
-(@pxref{Print, ,The @code{print} Statement}).@refill
-
-@node Redirection, Special Files, Printf, Printing
-@section Redirecting Output of @code{print} and @code{printf}
-
-@cindex output redirection
-@cindex redirection of output
-So far we have been dealing only with output that prints to the standard
-output, usually your terminal. Both @code{print} and @code{printf} can
-also send their output to other places.
-This is called @dfn{redirection}.@refill
-
-A redirection appears after the @code{print} or @code{printf} statement.
-Redirections in @code{awk} are written just like redirections in shell
-commands, except that they are written inside the @code{awk} program.
-
-@menu
-* File/Pipe Redirection:: Redirecting Output to Files and Pipes.
-* Close Output:: How to close output files and pipes.
-@end menu
-
-@node File/Pipe Redirection, Close Output, Redirection, Redirection
-@subsection Redirecting Output to Files and Pipes
-
-Here are the three forms of output redirection. They are all shown for
-the @code{print} statement, but they work identically for @code{printf}
-also.@refill
-
-@table @code
-@item print @var{items} > @var{output-file}
-This type of redirection prints the items onto the output file
-@var{output-file}. The file name @var{output-file} can be any
-expression. Its value is changed to a string and then used as a
-file name (@pxref{Expressions, ,Expressions as Action Statements}).@refill
-
-When this type of redirection is used, the @var{output-file} is erased
-before the first output is written to it. Subsequent writes do not
-erase @var{output-file}, but append to it. If @var{output-file} does
-not exist, then it is created.@refill
-
-For example, here is how one @code{awk} program can write a list of
-BBS names to a file @file{name-list} and a list of phone numbers to a
-file @file{phone-list}. Each output file contains one name or number
-per line.
-
-@smallexample
-awk '@{ print $2 > "phone-list"
- print $1 > "name-list" @}' BBS-list
-@end smallexample
-
-@item print @var{items} >> @var{output-file}
-This type of redirection prints the items onto the output file
-@var{output-file}. The difference between this and the
-single-@samp{>} redirection is that the old contents (if any) of
-@var{output-file} are not erased. Instead, the @code{awk} output is
-appended to the file.
-
-@cindex pipes for output
-@cindex output, piping
-@item print @var{items} | @var{command}
-It is also possible to send output through a @dfn{pipe} instead of into a
-file. This type of redirection opens a pipe to @var{command} and writes
-the values of @var{items} through this pipe, to another process created
-to execute @var{command}.@refill
-
-The redirection argument @var{command} is actually an @code{awk}
-expression. Its value is converted to a string, whose contents give the
-shell command to be run.
-
-For example, this produces two files, one unsorted list of BBS names
-and one list sorted in reverse alphabetical order:
-
-@smallexample
-awk '@{ print $1 > "names.unsorted"
- print $1 | "sort -r > names.sorted" @}' BBS-list
-@end smallexample
-
-Here the unsorted list is written with an ordinary redirection while
-the sorted list is written by piping through the @code{sort} utility.
-
-Here is an example that uses redirection to mail a message to a mailing
-list @samp{bug-system}. This might be useful when trouble is encountered
-in an @code{awk} script run periodically for system maintenance.
-
-@smallexample
-report = "mail bug-system"
-print "Awk script failed:", $0 | report
-print "at record number", FNR, "of", FILENAME | report
-close(report)
-@end smallexample
-
-We call the @code{close} function here because it's a good idea to close
-the pipe as soon as all the intended output has been sent to it.
-@xref{Close Output, ,Closing Output Files and Pipes}, for more information
-on this. This example also illustrates the use of a variable to represent
-a @var{file} or @var{command}: it is not necessary to always
-use a string constant. Using a variable is generally a good idea,
-since @code{awk} requires you to spell the string value identically
-every time.
-@end table
-
-Redirecting output using @samp{>}, @samp{>>}, or @samp{|} asks the system
-to open a file or pipe only if the particular @var{file} or @var{command}
-you've specified has not already been written to by your program, or if
-it has been closed since it was last written to.@refill
-
-@node Close Output, , File/Pipe Redirection, Redirection
-@subsection Closing Output Files and Pipes
-@cindex closing output files and pipes
-@findex close
-
-When a file or pipe is opened, the file name or command associated with
-it is remembered by @code{awk} and subsequent writes to the same file or
-command are appended to the previous writes. The file or pipe stays
-open until @code{awk} exits. This is usually convenient.
-
-Sometimes there is a reason to close an output file or pipe earlier
-than that. To do this, use the @code{close} function, as follows:
-
-@example
-close(@var{filename})
-@end example
-
-@noindent
-or
-
-@example
-close(@var{command})
-@end example
-
-The argument @var{filename} or @var{command} can be any expression.
-Its value must exactly equal the string used to open the file or pipe
-to begin with---for example, if you open a pipe with this:
-
-@example
-print $1 | "sort -r > names.sorted"
-@end example
-
-@noindent
-then you must close it with this:
-
-@example
-close("sort -r > names.sorted")
-@end example
-
-Here are some reasons why you might need to close an output file:
-
-@itemize @bullet
-@item
-To write a file and read it back later on in the same @code{awk}
-program. Close the file when you are finished writing it; then
-you can start reading it with @code{getline}
-(@pxref{Getline, ,Explicit Input with @code{getline}}).@refill
-
-@item
-To write numerous files, successively, in the same @code{awk}
-program. If you don't close the files, eventually you may exceed a
-system limit on the number of open files in one process. So close
-each one when you are finished writing it.
-
-@item
-To make a command finish. When you redirect output through a pipe,
-the command reading the pipe normally continues to try to read input
-as long as the pipe is open. Often this means the command cannot
-really do its work until the pipe is closed. For example, if you
-redirect output to the @code{mail} program, the message is not
-actually sent until the pipe is closed.
-
-@item
-To run the same program a second time, with the same arguments.
-This is not the same thing as giving more input to the first run!
-
-For example, suppose you pipe output to the @code{mail} program. If you
-output several lines redirected to this pipe without closing it, they make
-a single message of several lines. By contrast, if you close the pipe
-after each line of output, then each line makes a separate message.
-@end itemize
-
-@iftex
-@vindex ERRNO
-@cindex differences: @code{gawk} and @code{awk}
-@end iftex
-@code{close} returns a value of zero if the close succeeded.
-Otherwise, the value will be non-zero.
-In this case, @code{gawk} sets the variable @code{ERRNO} to a string
-describing the error that occurred.
-
-@node Special Files, , Redirection, Printing
-@section Standard I/O Streams
-@cindex standard input
-@cindex standard output
-@cindex standard error output
-@cindex file descriptors
-
-Running programs conventionally have three input and output streams
-already available to them for reading and writing. These are known as
-the @dfn{standard input}, @dfn{standard output}, and @dfn{standard error
-output}. These streams are, by default, terminal input and output, but
-they are often redirected with the shell, via the @samp{<}, @samp{<<},
-@samp{>}, @samp{>>}, @samp{>&} and @samp{|} operators. Standard error
-is used only for writing error messages; the reason we have two separate
-streams, standard output and standard error, is so that they can be
-redirected separately.
-
-@iftex
-@cindex differences: @code{gawk} and @code{awk}
-@end iftex
-In other implementations of @code{awk}, the only way to write an error
-message to standard error in an @code{awk} program is as follows:
-
-@smallexample
-print "Serious error detected!\n" | "cat 1>&2"
-@end smallexample
-
-@noindent
-This works by opening a pipeline to a shell command which can access the
-standard error stream which it inherits from the @code{awk} process.
-This is far from elegant, and is also inefficient, since it requires a
-separate process. So people writing @code{awk} programs have often
-neglected to do this. Instead, they have sent the error messages to the
-terminal, like this:
-
-@smallexample
-@group
-NF != 4 @{
- printf("line %d skipped: doesn't have 4 fields\n", FNR) > "/dev/tty"
-@}
-@end group
-@end smallexample
-
-@noindent
-This has the same effect most of the time, but not always: although the
-standard error stream is usually the terminal, it can be redirected, and
-when that happens, writing to the terminal is not correct. In fact, if
-@code{awk} is run from a background job, it may not have a terminal at all.
-Then opening @file{/dev/tty} will fail.
-
-@code{gawk} provides special file names for accessing the three standard
-streams. When you redirect input or output in @code{gawk}, if the file name
-matches one of these special names, then @code{gawk} directly uses the
-stream it stands for.
-
-@cindex @file{/dev/stdin}
-@cindex @file{/dev/stdout}
-@cindex @file{/dev/stderr}
-@cindex @file{/dev/fd/}
-@table @file
-@item /dev/stdin
-The standard input (file descriptor 0).
-
-@item /dev/stdout
-The standard output (file descriptor 1).
-
-@item /dev/stderr
-The standard error output (file descriptor 2).
-
-@item /dev/fd/@var{N}
-The file associated with file descriptor @var{N}. Such a file must have
-been opened by the program initiating the @code{awk} execution (typically
-the shell). Unless you take special pains, only descriptors 0, 1 and 2
-are available.
-@end table
-
-The file names @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr}
-are aliases for @file{/dev/fd/0}, @file{/dev/fd/1}, and @file{/dev/fd/2},
-respectively, but they are more self-explanatory.
-
-The proper way to write an error message in a @code{gawk} program
-is to use @file{/dev/stderr}, like this:
-
-@smallexample
-NF != 4 @{
- printf("line %d skipped: doesn't have 4 fields\n", FNR) > "/dev/stderr"
-@}
-@end smallexample
-
-@code{gawk} also provides special file names that give access to information
-about the running @code{gawk} process. Each of these ``files'' provides
-a single record of information. To read them more than once, you must
-first close them with the @code{close} function
-(@pxref{Close Input, ,Closing Input Files and Pipes}).
-The filenames are:
-
-@cindex @file{/dev/pid}
-@cindex @file{/dev/pgrpid}
-@cindex @file{/dev/ppid}
-@cindex @file{/dev/user}
-@table @file
-@item /dev/pid
-Reading this file returns the process ID of the current process,
-in decimal, terminated with a newline.
-
-@item /dev/ppid
-Reading this file returns the parent process ID of the current process,
-in decimal, terminated with a newline.
-
-@item /dev/pgrpid
-Reading this file returns the process group ID of the current process,
-in decimal, terminated with a newline.
-
-@item /dev/user
-Reading this file returns a single record terminated with a newline.
-The fields are separated with blanks. The fields represent the
-following information:
-
-@table @code
-@item $1
-The value of the @code{getuid} system call.
-
-@item $2
-The value of the @code{geteuid} system call.
-
-@item $3
-The value of the @code{getgid} system call.
-
-@item $4
-The value of the @code{getegid} system call.
-@end table
-
-If there are any additional fields, they are the group IDs returned by
-@code{getgroups} system call.
-(Multiple groups may not be supported on all systems.)@refill
-@end table
-
-These special file names may be used on the command line as data
-files, as well as for I/O redirections within an @code{awk} program.
-They may not be used as source files with the @samp{-f} option.
-
-Recognition of these special file names is disabled if @code{gawk} is in
-compatibility mode (@pxref{Command Line, ,Invoking @code{awk}}).
-
-@quotation
-@strong{Caution}: Unless your system actually has a @file{/dev/fd} directory
-(or any of the other above listed special files),
-the interpretation of these file names is done by @code{gawk} itself.
-For example, using @samp{/dev/fd/4} for output will actually write on
-file descriptor 4, and not on a new file descriptor that was @code{dup}'ed
-from file descriptor 4. Most of the time this does not matter; however, it
-is important to @emph{not} close any of the files related to file descriptors
-0, 1, and 2. If you do close one of these files, unpredictable behavior
-will result.
-@end quotation
-
-@node One-liners, Patterns, Printing, Top
-@chapter Useful ``One-liners''
-
-@cindex one-liners
-Useful @code{awk} programs are often short, just a line or two. Here is a
-collection of useful, short programs to get you started. Some of these
-programs contain constructs that haven't been covered yet. The description
-of the program will give you a good idea of what is going on, but please
-read the rest of the manual to become an @code{awk} expert!
-
-@c Per suggestions from Michal Jaegermann
-@ifinfo
-Since you are reading this in Info, each line of the example code is
-enclosed in quotes, to represent text that you would type literally.
-The examples themselves represent shell commands that use single quotes
-to keep the shell from interpreting the contents of the program.
-When reading the examples, focus on the text between the open and close
-quotes.
-@end ifinfo
-
-@table @code
-@item awk '@{ if (NF > max) max = NF @}
-@itemx @ @ @ @ @ END @{ print max @}'
-This program prints the maximum number of fields on any input line.
-
-@item awk 'length($0) > 80'
-This program prints every line longer than 80 characters. The sole
-rule has a relational expression as its pattern, and has no action (so the
-default action, printing the record, is used).
-
-@item awk 'NF > 0'
-This program prints every line that has at least one field. This is an
-easy way to delete blank lines from a file (or rather, to create a new
-file similar to the old file but from which the blank lines have been
-deleted).
-
-@item awk '@{ if (NF > 0) print @}'
-This program also prints every line that has at least one field. Here we
-allow the rule to match every line, then decide in the action whether
-to print.
-
-@item awk@ 'BEGIN@ @{@ for (i = 1; i <= 7; i++)
-@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ print int(101 * rand()) @}'
-This program prints 7 random numbers from 0 to 100, inclusive.
-
-@item ls -l @var{files} | awk '@{ x += $4 @} ; END @{ print "total bytes: " x @}'
-This program prints the total number of bytes used by @var{files}.
-
-@item expand@ @var{file}@ |@ awk@ '@{ if (x < length()) x = length() @}
-@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ END @{ print "maximum line length is " x @}'
-This program prints the maximum line length of @var{file}. The input
-is piped through the @code{expand} program to change tabs into spaces,
-so the widths compared are actually the right-margin columns.
-
-@item awk 'BEGIN @{ FS = ":" @}
-@itemx @ @ @ @ @ @{ print $1 | "sort" @}' /etc/passwd
-This program prints a sorted list of the login names of all users.
-
-@item awk '@{ nlines++ @}
-@itemx @ @ @ @ @ END@ @{ print nlines @}'
-This programs counts lines in a file.
-
-@item awk 'END @{ print NR @}'
-This program also counts lines in a file, but lets @code{awk} do the work.
-
-@item awk '@{ print NR, $0 @}'
-This program adds line numbers to all its input files,
-similar to @samp{cat -n}.
-@end table
-
-@node Patterns, Actions, One-liners, Top
-@chapter Patterns
-@cindex pattern, definition of
-
-Patterns in @code{awk} control the execution of rules: a rule is
-executed when its pattern matches the current input record. This
-chapter tells all about how to write patterns.
-
-@menu
-* Kinds of Patterns:: A list of all kinds of patterns.
- The following subsections describe
- them in detail.
-* Regexp:: Regular expressions such as @samp{/foo/}.
-* Comparison Patterns:: Comparison expressions such as @code{$1 > 10}.
-* Boolean Patterns:: Combining comparison expressions.
-* Expression Patterns:: Any expression can be used as a pattern.
-* Ranges:: Pairs of patterns specify record ranges.
-* BEGIN/END:: Specifying initialization and cleanup rules.
-* Empty:: The empty pattern, which matches every record.
-@end menu
-
-@node Kinds of Patterns, Regexp, Patterns, Patterns
-@section Kinds of Patterns
-@cindex patterns, types of
-
-Here is a summary of the types of patterns supported in @code{awk}.
-@c At the next rewrite, check to see that this order matches the
-@c order in the text. It might not matter to a reader, but it's good
-@c style. Also, it might be nice to mention all the topics of sections
-@c that follow in this list; that way people can scan and know when to
-@c expect a specific topic. Specifically please also make an entry
-@c for Boolean operators as patterns in the right place. --mew
-
-@table @code
-@item /@var{regular expression}/
-A regular expression as a pattern. It matches when the text of the
-input record fits the regular expression.
-(@xref{Regexp, ,Regular Expressions as Patterns}.)@refill
-
-@item @var{expression}
-A single expression. It matches when its value, converted to a number,
-is nonzero (if a number) or nonnull (if a string).
-(@xref{Expression Patterns, ,Expressions as Patterns}.)@refill
-
-@item @var{pat1}, @var{pat2}
-A pair of patterns separated by a comma, specifying a range of records.
-(@xref{Ranges, ,Specifying Record Ranges with Patterns}.)
-
-@item BEGIN
-@itemx END
-Special patterns to supply start-up or clean-up information to
-@code{awk}. (@xref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}.)
-
-@item @var{null}
-The empty pattern matches every input record.
-(@xref{Empty, ,The Empty Pattern}.)@refill
-@end table
-
-
-@node Regexp, Comparison Patterns, Kinds of Patterns, Patterns
-@section Regular Expressions as Patterns
-@cindex pattern, regular expressions
-@cindex regexp
-@cindex regular expressions as patterns
-
-A @dfn{regular expression}, or @dfn{regexp}, is a way of describing a
-class of strings. A regular expression enclosed in slashes (@samp{/})
-is an @code{awk} pattern that matches every input record whose text
-belongs to that class.
-
-The simplest regular expression is a sequence of letters, numbers, or
-both. Such a regexp matches any string that contains that sequence.
-Thus, the regexp @samp{foo} matches any string containing @samp{foo}.
-Therefore, the pattern @code{/foo/} matches any input record containing
-@samp{foo}. Other kinds of regexps let you specify more complicated
-classes of strings.
-
-@menu
-* Regexp Usage:: How to Use Regular Expressions
-* Regexp Operators:: Regular Expression Operators
-* Case-sensitivity:: How to do case-insensitive matching.
-@end menu
-
-@node Regexp Usage, Regexp Operators, Regexp, Regexp
-@subsection How to Use Regular Expressions
-
-A regular expression can be used as a pattern by enclosing it in
-slashes. Then the regular expression is matched against the
-entire text of each record. (Normally, it only needs
-to match some part of the text in order to succeed.) For example, this
-prints the second field of each record that contains @samp{foo} anywhere:
-
-@example
-awk '/foo/ @{ print $2 @}' BBS-list
-@end example
-
-@cindex regular expression matching operators
-@cindex string-matching operators
-@cindex operators, string-matching
-@cindex operators, regexp matching
-@cindex regexp search operators
-Regular expressions can also be used in comparison expressions. Then
-you can specify the string to match against; it need not be the entire
-current input record. These comparison expressions can be used as
-patterns or in @code{if}, @code{while}, @code{for}, and @code{do} statements.
-
-@table @code
-@item @var{exp} ~ /@var{regexp}/
-This is true if the expression @var{exp} (taken as a character string)
-is matched by @var{regexp}. The following example matches, or selects,
-all input records with the upper-case letter @samp{J} somewhere in the
-first field:@refill
-
-@example
-awk '$1 ~ /J/' inventory-shipped
-@end example
-
-So does this:
-
-@example
-awk '@{ if ($1 ~ /J/) print @}' inventory-shipped
-@end example
-
-@item @var{exp} !~ /@var{regexp}/
-This is true if the expression @var{exp} (taken as a character string)
-is @emph{not} matched by @var{regexp}. The following example matches,
-or selects, all input records whose first field @emph{does not} contain
-the upper-case letter @samp{J}:@refill
-
-@example
-awk '$1 !~ /J/' inventory-shipped
-@end example
-@end table
-
-@cindex computed regular expressions
-@cindex regular expressions, computed
-@cindex dynamic regular expressions
-The right hand side of a @samp{~} or @samp{!~} operator need not be a
-constant regexp (i.e., a string of characters between slashes). It may
-be any expression. The expression is evaluated, and converted if
-necessary to a string; the contents of the string are used as the
-regexp. A regexp that is computed in this way is called a @dfn{dynamic
-regexp}. For example:
-
-@example
-identifier_regexp = "[A-Za-z_][A-Za-z_0-9]+"
-$0 ~ identifier_regexp
-@end example
-
-@noindent
-sets @code{identifier_regexp} to a regexp that describes @code{awk}
-variable names, and tests if the input record matches this regexp.
-
-@node Regexp Operators, Case-sensitivity, Regexp Usage, Regexp
-@subsection Regular Expression Operators
-@cindex metacharacters
-@cindex regular expression metacharacters
-
-You can combine regular expressions with the following characters,
-called @dfn{regular expression operators}, or @dfn{metacharacters}, to
-increase the power and versatility of regular expressions.
-
-Here is a table of metacharacters. All characters not listed in the
-table stand for themselves.
-
-@table @code
-@item ^
-This matches the beginning of the string or the beginning of a line
-within the string. For example:
-
-@example
-^@@chapter
-@end example
-
-@noindent
-matches the @samp{@@chapter} at the beginning of a string, and can be used
-to identify chapter beginnings in Texinfo source files.
-
-@item $
-This is similar to @samp{^}, but it matches only at the end of a string
-or the end of a line within the string. For example:
-
-@example
-p$
-@end example
-
-@noindent
-matches a record that ends with a @samp{p}.
-
-@item .
-This matches any single character except a newline. For example:
-
-@example
-.P
-@end example
-
-@noindent
-matches any single character followed by a @samp{P} in a string. Using
-concatenation we can make regular expressions like @samp{U.A}, which
-matches any three-character sequence that begins with @samp{U} and ends
-with @samp{A}.
-
-@item [@dots{}]
-This is called a @dfn{character set}. It matches any one of the
-characters that are enclosed in the square brackets. For example:
-
-@example
-[MVX]
-@end example
-
-@noindent
-matches any one of the characters @samp{M}, @samp{V}, or @samp{X} in a
-string.@refill
-
-Ranges of characters are indicated by using a hyphen between the beginning
-and ending characters, and enclosing the whole thing in brackets. For
-example:@refill
-
-@example
-[0-9]
-@end example
-
-@noindent
-matches any digit.
-
-To include the character @samp{\}, @samp{]}, @samp{-} or @samp{^} in a
-character set, put a @samp{\} in front of it. For example:
-
-@example
-[d\]]
-@end example
-
-@noindent
-matches either @samp{d}, or @samp{]}.@refill
-
-This treatment of @samp{\} is compatible with other @code{awk}
-implementations, and is also mandated by the @sc{posix} Command Language
-and Utilities standard. The regular expressions in @code{awk} are a superset
-of the @sc{posix} specification for Extended Regular Expressions (EREs).
-@sc{posix} EREs are based on the regular expressions accepted by the
-traditional @code{egrep} utility.
-
-In @code{egrep} syntax, backslash is not syntactically special within
-square brackets. This means that special tricks have to be used to
-represent the characters @samp{]}, @samp{-} and @samp{^} as members of a
-character set.
-
-In @code{egrep} syntax, to match @samp{-}, write it as @samp{---},
-which is a range containing only @w{@samp{-}.} You may also give @samp{-}
-as the first or last character in the set. To match @samp{^}, put it
-anywhere except as the first character of a set. To match a @samp{]},
-make it the first character in the set. For example:@refill
-
-@example
-[]d^]
-@end example
-
-@noindent
-matches either @samp{]}, @samp{d} or @samp{^}.@refill
-
-@item [^ @dots{}]
-This is a @dfn{complemented character set}. The first character after
-the @samp{[} @emph{must} be a @samp{^}. It matches any characters
-@emph{except} those in the square brackets (or newline). For example:
-
-@example
-[^0-9]
-@end example
-
-@noindent
-matches any character that is not a digit.
-
-@item |
-This is the @dfn{alternation operator} and it is used to specify
-alternatives. For example:
-
-@example
-^P|[0-9]
-@end example
-
-@noindent
-matches any string that matches either @samp{^P} or @samp{[0-9]}. This
-means it matches any string that contains a digit or starts with @samp{P}.
-
-The alternation applies to the largest possible regexps on either side.
-@item (@dots{})
-Parentheses are used for grouping in regular expressions as in
-arithmetic. They can be used to concatenate regular expressions
-containing the alternation operator, @samp{|}.
-
-@item *
-This symbol means that the preceding regular expression is to be
-repeated as many times as possible to find a match. For example:
-
-@example
-ph*
-@end example
-
-@noindent
-applies the @samp{*} symbol to the preceding @samp{h} and looks for matches
-to one @samp{p} followed by any number of @samp{h}s. This will also match
-just @samp{p} if no @samp{h}s are present.
-
-The @samp{*} repeats the @emph{smallest} possible preceding expression.
-(Use parentheses if you wish to repeat a larger expression.) It finds
-as many repetitions as possible. For example:
-
-@example
-awk '/\(c[ad][ad]*r x\)/ @{ print @}' sample
-@end example
-
-@noindent
-prints every record in the input containing a string of the form
-@samp{(car x)}, @samp{(cdr x)}, @samp{(cadr x)}, and so on.@refill
-
-@item +
-This symbol is similar to @samp{*}, but the preceding expression must be
-matched at least once. This means that:
-
-@example
-wh+y
-@end example
-
-@noindent
-would match @samp{why} and @samp{whhy} but not @samp{wy}, whereas
-@samp{wh*y} would match all three of these strings. This is a simpler
-way of writing the last @samp{*} example:
-
-@example
-awk '/\(c[ad]+r x\)/ @{ print @}' sample
-@end example
-
-@item ?
-This symbol is similar to @samp{*}, but the preceding expression can be
-matched once or not at all. For example:
-
-@example
-fe?d
-@end example
-
-@noindent
-will match @samp{fed} and @samp{fd}, but nothing else.@refill
-
-@item \
-This is used to suppress the special meaning of a character when
-matching. For example:
-
-@example
-\$
-@end example
-
-@noindent
-matches the character @samp{$}.
-
-The escape sequences used for string constants
-(@pxref{Constants, ,Constant Expressions}) are
-valid in regular expressions as well; they are also introduced by a
-@samp{\}.@refill
-@end table
-
-In regular expressions, the @samp{*}, @samp{+}, and @samp{?} operators have
-the highest precedence, followed by concatenation, and finally by @samp{|}.
-As in arithmetic, parentheses can change how operators are grouped.@refill
-
-@node Case-sensitivity, , Regexp Operators, Regexp
-@subsection Case-sensitivity in Matching
-
-Case is normally significant in regular expressions, both when matching
-ordinary characters (i.e., not metacharacters), and inside character
-sets. Thus a @samp{w} in a regular expression matches only a lower case
-@samp{w} and not an upper case @samp{W}.
-
-The simplest way to do a case-independent match is to use a character
-set: @samp{[Ww]}. However, this can be cumbersome if you need to use it
-often; and it can make the regular expressions harder for humans to
-read. There are two other alternatives that you might prefer.
-
-One way to do a case-insensitive match at a particular point in the
-program is to convert the data to a single case, using the
-@code{tolower} or @code{toupper} built-in string functions (which we
-haven't discussed yet;
-@pxref{String Functions, ,Built-in Functions for String Manipulation}).
-For example:@refill
-
-@example
-tolower($1) ~ /foo/ @{ @dots{} @}
-@end example
-
-@noindent
-converts the first field to lower case before matching against it.
-
-Another method is to set the variable @code{IGNORECASE} to a nonzero
-value (@pxref{Built-in Variables}). When @code{IGNORECASE} is not zero,
-@emph{all} regexp operations ignore case. Changing the value of
-@code{IGNORECASE} dynamically controls the case sensitivity of your
-program as it runs. Case is significant by default because
-@code{IGNORECASE} (like most variables) is initialized to zero.
-
-@example
-x = "aB"
-if (x ~ /ab/) @dots{} # this test will fail
-
-IGNORECASE = 1
-if (x ~ /ab/) @dots{} # now it will succeed
-@end example
-
-In general, you cannot use @code{IGNORECASE} to make certain rules
-case-insensitive and other rules case-sensitive, because there is no way
-to set @code{IGNORECASE} just for the pattern of a particular rule. To
-do this, you must use character sets or @code{tolower}. However, one
-thing you can do only with @code{IGNORECASE} is turn case-sensitivity on
-or off dynamically for all the rules at once.@refill
-
-@code{IGNORECASE} can be set on the command line, or in a @code{BEGIN}
-rule. Setting @code{IGNORECASE} from the command line is a way to make
-a program case-insensitive without having to edit it.
-
-The value of @code{IGNORECASE} has no effect if @code{gawk} is in
-compatibility mode (@pxref{Command Line, ,Invoking @code{awk}}).
-Case is always significant in compatibility mode.@refill
-
-@node Comparison Patterns, Boolean Patterns, Regexp, Patterns
-@section Comparison Expressions as Patterns
-@cindex comparison expressions as patterns
-@cindex pattern, comparison expressions
-@cindex relational operators
-@cindex operators, relational
-
-@dfn{Comparison patterns} test relationships such as equality between
-two strings or numbers. They are a special case of expression patterns
-(@pxref{Expression Patterns, ,Expressions as Patterns}). They are written
-with @dfn{relational operators}, which are a superset of those in C.
-Here is a table of them:@refill
-
-@table @code
-@item @var{x} < @var{y}
-True if @var{x} is less than @var{y}.
-
-@item @var{x} <= @var{y}
-True if @var{x} is less than or equal to @var{y}.
-
-@item @var{x} > @var{y}
-True if @var{x} is greater than @var{y}.
-
-@item @var{x} >= @var{y}
-True if @var{x} is greater than or equal to @var{y}.
-
-@item @var{x} == @var{y}
-True if @var{x} is equal to @var{y}.
-
-@item @var{x} != @var{y}
-True if @var{x} is not equal to @var{y}.
-
-@item @var{x} ~ @var{y}
-True if @var{x} matches the regular expression described by @var{y}.
-
-@item @var{x} !~ @var{y}
-True if @var{x} does not match the regular expression described by @var{y}.
-@end table
-
-The operands of a relational operator are compared as numbers if they
-are both numbers. Otherwise they are converted to, and compared as,
-strings (@pxref{Conversion, ,Conversion of Strings and Numbers},
-for the detailed rules). Strings are compared by comparing the first
-character of each, then the second character of each,
-and so on, until there is a difference. If the two strings are equal until
-the shorter one runs out, the shorter one is considered to be less than the
-longer one. Thus, @code{"10"} is less than @code{"9"}, and @code{"abc"}
-is less than @code{"abcd"}.@refill
-
-The left operand of the @samp{~} and @samp{!~} operators is a string.
-The right operand is either a constant regular expression enclosed in
-slashes (@code{/@var{regexp}/}), or any expression, whose string value
-is used as a dynamic regular expression
-(@pxref{Regexp Usage, ,How to Use Regular Expressions}).@refill
-
-The following example prints the second field of each input record
-whose first field is precisely @samp{foo}.
-
-@example
-awk '$1 == "foo" @{ print $2 @}' BBS-list
-@end example
-
-@noindent
-Contrast this with the following regular expression match, which would
-accept any record with a first field that contains @samp{foo}:
-
-@example
-awk '$1 ~ "foo" @{ print $2 @}' BBS-list
-@end example
-
-@noindent
-or, equivalently, this one:
-
-@example
-awk '$1 ~ /foo/ @{ print $2 @}' BBS-list
-@end example
-
-@node Boolean Patterns, Expression Patterns, Comparison Patterns, Patterns
-@section Boolean Operators and Patterns
-@cindex patterns, boolean
-@cindex boolean patterns
-
-A @dfn{boolean pattern} is an expression which combines other patterns
-using the @dfn{boolean operators} ``or'' (@samp{||}), ``and''
-(@samp{&&}), and ``not'' (@samp{!}). Whether the boolean pattern
-matches an input record depends on whether its subpatterns match.
-
-For example, the following command prints all records in the input file
-@file{BBS-list} that contain both @samp{2400} and @samp{foo}.@refill
-
-@example
-awk '/2400/ && /foo/' BBS-list
-@end example
-
-The following command prints all records in the input file
-@file{BBS-list} that contain @emph{either} @samp{2400} or @samp{foo}, or
-both.@refill
-
-@example
-awk '/2400/ || /foo/' BBS-list
-@end example
-
-The following command prints all records in the input file
-@file{BBS-list} that do @emph{not} contain the string @samp{foo}.
-
-@example
-awk '! /foo/' BBS-list
-@end example
-
-Note that boolean patterns are a special case of expression patterns
-(@pxref{Expression Patterns, ,Expressions as Patterns}); they are
-expressions that use the boolean operators.
-@xref{Boolean Ops, ,Boolean Expressions}, for complete information
-on the boolean operators.@refill
-
-The subpatterns of a boolean pattern can be constant regular
-expressions, comparisons, or any other @code{awk} expressions. Range
-patterns are not expressions, so they cannot appear inside boolean
-patterns. Likewise, the special patterns @code{BEGIN} and @code{END},
-which never match any input record, are not expressions and cannot
-appear inside boolean patterns.
-
-@node Expression Patterns, Ranges, Boolean Patterns, Patterns
-@section Expressions as Patterns
-
-Any @code{awk} expression is also valid as an @code{awk} pattern.
-Then the pattern ``matches'' if the expression's value is nonzero (if a
-number) or nonnull (if a string).
-
-The expression is reevaluated each time the rule is tested against a new
-input record. If the expression uses fields such as @code{$1}, the
-value depends directly on the new input record's text; otherwise, it
-depends only on what has happened so far in the execution of the
-@code{awk} program, but that may still be useful.
-
-Comparison patterns are actually a special case of this. For
-example, the expression @code{$5 == "foo"} has the value 1 when the
-value of @code{$5} equals @code{"foo"}, and 0 otherwise; therefore, this
-expression as a pattern matches when the two values are equal.
-
-Boolean patterns are also special cases of expression patterns.
-
-A constant regexp as a pattern is also a special case of an expression
-pattern. @code{/foo/} as an expression has the value 1 if @samp{foo}
-appears in the current input record; thus, as a pattern, @code{/foo/}
-matches any record containing @samp{foo}.
-
-Other implementations of @code{awk} that are not yet @sc{posix} compliant
-are less general than @code{gawk}: they allow comparison expressions, and
-boolean combinations thereof (optionally with parentheses), but not
-necessarily other kinds of expressions.
-
-@node Ranges, BEGIN/END, Expression Patterns, Patterns
-@section Specifying Record Ranges with Patterns
-
-@cindex range pattern
-@cindex patterns, range
-A @dfn{range pattern} is made of two patterns separated by a comma, of
-the form @code{@var{begpat}, @var{endpat}}. It matches ranges of
-consecutive input records. The first pattern @var{begpat} controls
-where the range begins, and the second one @var{endpat} controls where
-it ends. For example,@refill
-
-@example
-awk '$1 == "on", $1 == "off"'
-@end example
-
-@noindent
-prints every record between @samp{on}/@samp{off} pairs, inclusive.
-
-A range pattern starts out by matching @var{begpat}
-against every input record; when a record matches @var{begpat}, the
-range pattern becomes @dfn{turned on}. The range pattern matches this
-record. As long as it stays turned on, it automatically matches every
-input record read. It also matches @var{endpat} against
-every input record; when that succeeds, the range pattern is turned
-off again for the following record. Now it goes back to checking
-@var{begpat} against each record.
-
-The record that turns on the range pattern and the one that turns it
-off both match the range pattern. If you don't want to operate on
-these records, you can write @code{if} statements in the rule's action
-to distinguish them.
-
-It is possible for a pattern to be turned both on and off by the same
-record, if both conditions are satisfied by that record. Then the action is
-executed for just that record.
-
-@node BEGIN/END, Empty, Ranges, Patterns
-@section @code{BEGIN} and @code{END} Special Patterns
-
-@cindex @code{BEGIN} special pattern
-@cindex patterns, @code{BEGIN}
-@cindex @code{END} special pattern
-@cindex patterns, @code{END}
-@code{BEGIN} and @code{END} are special patterns. They are not used to
-match input records. Rather, they are used for supplying start-up or
-clean-up information to your @code{awk} script. A @code{BEGIN} rule is
-executed, once, before the first input record has been read. An @code{END}
-rule is executed, once, after all the input has been read. For
-example:@refill
-
-@example
-awk 'BEGIN @{ print "Analysis of `foo'" @}
- /foo/ @{ ++foobar @}
- END @{ print "`foo' appears " foobar " times." @}' BBS-list
-@end example
-
-This program finds the number of records in the input file @file{BBS-list}
-that contain the string @samp{foo}. The @code{BEGIN} rule prints a title
-for the report. There is no need to use the @code{BEGIN} rule to
-initialize the counter @code{foobar} to zero, as @code{awk} does this
-for us automatically (@pxref{Variables}).
-
-The second rule increments the variable @code{foobar} every time a
-record containing the pattern @samp{foo} is read. The @code{END} rule
-prints the value of @code{foobar} at the end of the run.@refill
-
-The special patterns @code{BEGIN} and @code{END} cannot be used in ranges
-or with boolean operators (indeed, they cannot be used with any operators).
-
-An @code{awk} program may have multiple @code{BEGIN} and/or @code{END}
-rules. They are executed in the order they appear, all the @code{BEGIN}
-rules at start-up and all the @code{END} rules at termination.
-
-Multiple @code{BEGIN} and @code{END} sections are useful for writing
-library functions, since each library can have its own @code{BEGIN} or
-@code{END} rule to do its own initialization and/or cleanup. Note that
-the order in which library functions are named on the command line
-controls the order in which their @code{BEGIN} and @code{END} rules are
-executed. Therefore you have to be careful to write such rules in
-library files so that the order in which they are executed doesn't matter.
-@xref{Command Line, ,Invoking @code{awk}}, for more information on
-using library functions.
-
-If an @code{awk} program only has a @code{BEGIN} rule, and no other
-rules, then the program exits after the @code{BEGIN} rule has been run.
-(Older versions of @code{awk} used to keep reading and ignoring input
-until end of file was seen.) However, if an @code{END} rule exists as
-well, then the input will be read, even if there are no other rules in
-the program. This is necessary in case the @code{END} rule checks the
-@code{NR} variable.
-
-@code{BEGIN} and @code{END} rules must have actions; there is no default
-action for these rules since there is no current record when they run.
-
-@node Empty, , BEGIN/END, Patterns
-@comment node-name, next, previous, up
-@section The Empty Pattern
-
-@cindex empty pattern
-@cindex pattern, empty
-An empty pattern is considered to match @emph{every} input record. For
-example, the program:@refill
-
-@example
-awk '@{ print $1 @}' BBS-list
-@end example
-
-@noindent
-prints the first field of every record.
-
-@node Actions, Expressions, Patterns, Top
-@chapter Overview of Actions
-@cindex action, definition of
-@cindex curly braces
-@cindex action, curly braces
-@cindex action, separating statements
-
-An @code{awk} program or script consists of a series of
-rules and function definitions, interspersed. (Functions are
-described later. @xref{User-defined, ,User-defined Functions}.)
-
-A rule contains a pattern and an action, either of which may be
-omitted. The purpose of the @dfn{action} is to tell @code{awk} what to do
-once a match for the pattern is found. Thus, the entire program
-looks somewhat like this:
-
-@example
-@r{[}@var{pattern}@r{]} @r{[}@{ @var{action} @}@r{]}
-@r{[}@var{pattern}@r{]} @r{[}@{ @var{action} @}@r{]}
-@dots{}
-function @var{name} (@var{args}) @{ @dots{} @}
-@dots{}
-@end example
-
-An action consists of one or more @code{awk} @dfn{statements}, enclosed
-in curly braces (@samp{@{} and @samp{@}}). Each statement specifies one
-thing to be done. The statements are separated by newlines or
-semicolons.
-
-The curly braces around an action must be used even if the action
-contains only one statement, or even if it contains no statements at
-all. However, if you omit the action entirely, omit the curly braces as
-well. (An omitted action is equivalent to @samp{@{ print $0 @}}.)
-
-Here are the kinds of statements supported in @code{awk}:
-
-@itemize @bullet
-@item
-Expressions, which can call functions or assign values to variables
-(@pxref{Expressions, ,Expressions as Action Statements}). Executing
-this kind of statement simply computes the value of the expression and
-then ignores it. This is useful when the expression has side effects
-(@pxref{Assignment Ops, ,Assignment Expressions}).@refill
-
-@item
-Control statements, which specify the control flow of @code{awk}
-programs. The @code{awk} language gives you C-like constructs
-(@code{if}, @code{for}, @code{while}, and so on) as well as a few
-special ones (@pxref{Statements, ,Control Statements in Actions}).@refill
-
-@item
-Compound statements, which consist of one or more statements enclosed in
-curly braces. A compound statement is used in order to put several
-statements together in the body of an @code{if}, @code{while}, @code{do}
-or @code{for} statement.
-
-@item
-Input control, using the @code{getline} command
-(@pxref{Getline, ,Explicit Input with @code{getline}}), and the @code{next}
-statement (@pxref{Next Statement, ,The @code{next} Statement}).
-
-@item
-Output statements, @code{print} and @code{printf}.
-@xref{Printing, ,Printing Output}.@refill
-
-@item
-Deletion statements, for deleting array elements.
-@xref{Delete, ,The @code{delete} Statement}.@refill
-@end itemize
-
-@iftex
-The next two chapters cover in detail expressions and control
-statements, respectively. We go on to treat arrays and built-in
-functions, both of which are used in expressions. Then we proceed
-to discuss how to define your own functions.
-@end iftex
-
-@node Expressions, Statements, Actions, Top
-@chapter Expressions as Action Statements
-@cindex expression
-
-Expressions are the basic building block of @code{awk} actions. An
-expression evaluates to a value, which you can print, test, store in a
-variable or pass to a function. But beyond that, an expression can assign a new value to a variable
-or a field, with an assignment operator.
-
-An expression can serve as a statement on its own. Most other kinds of
-statements contain one or more expressions which specify data to be
-operated on. As in other languages, expressions in @code{awk} include
-variables, array references, constants, and function calls, as well as
-combinations of these with various operators.
-
-@menu
-* Constants:: String, numeric, and regexp constants.
-* Variables:: Variables give names to values for later use.
-* Arithmetic Ops:: Arithmetic operations (@samp{+}, @samp{-}, etc.)
-* Concatenation:: Concatenating strings.
-* Comparison Ops:: Comparison of numbers and strings
- with @samp{<}, etc.
-* Boolean Ops:: Combining comparison expressions
- using boolean operators
- @samp{||} (``or''), @samp{&&} (``and'') and @samp{!} (``not'').
-
-* Assignment Ops:: Changing the value of a variable or a field.
-* Increment Ops:: Incrementing the numeric value of a variable.
-
-* Conversion:: The conversion of strings to numbers
- and vice versa.
-* Values:: The whole truth about numbers and strings.
-* Conditional Exp:: Conditional expressions select
- between two subexpressions under control
- of a third subexpression.
-* Function Calls:: A function call is an expression.
-* Precedence:: How various operators nest.
-@end menu
-
-@node Constants, Variables, Expressions, Expressions
-@section Constant Expressions
-@cindex constants, types of
-@cindex string constants
-
-The simplest type of expression is the @dfn{constant}, which always has
-the same value. There are three types of constants: numeric constants,
-string constants, and regular expression constants.
-
-@cindex numeric constant
-@cindex numeric value
-A @dfn{numeric constant} stands for a number. This number can be an
-integer, a decimal fraction, or a number in scientific (exponential)
-notation. Note that all numeric values are represented within
-@code{awk} in double-precision floating point. Here are some examples
-of numeric constants, which all have the same value:
-
-@example
-105
-1.05e+2
-1050e-1
-@end example
-
-A string constant consists of a sequence of characters enclosed in
-double-quote marks. For example:
-
-@example
-"parrot"
-@end example
-
-@noindent
-@iftex
-@cindex differences between @code{gawk} and @code{awk}
-@end iftex
-represents the string whose contents are @samp{parrot}. Strings in
-@code{gawk} can be of any length and they can contain all the possible
-8-bit ASCII characters including ASCII NUL. Other @code{awk}
-implementations may have difficulty with some character codes.@refill
-
-@cindex escape sequence notation
-Some characters cannot be included literally in a string constant. You
-represent them instead with @dfn{escape sequences}, which are character
-sequences beginning with a backslash (@samp{\}).
-
-One use of an escape sequence is to include a double-quote character in
-a string constant. Since a plain double-quote would end the string, you
-must use @samp{\"} to represent a single double-quote character as a
-part of the string.
-The
-backslash character itself is another character that cannot be
-included normally; you write @samp{\\} to put one backslash in the
-string. Thus, the string whose contents are the two characters
-@samp{"\} must be written @code{"\"\\"}.
-
-Another use of backslash is to represent unprintable characters
-such as newline. While there is nothing to stop you from writing most
-of these characters directly in a string constant, they may look ugly.
-
-Here is a table of all the escape sequences used in @code{awk}:
-
-@table @code
-@item \\
-Represents a literal backslash, @samp{\}.
-
-@item \a
-Represents the ``alert'' character, control-g, ASCII code 7.
-
-@item \b
-Represents a backspace, control-h, ASCII code 8.
-
-@item \f
-Represents a formfeed, control-l, ASCII code 12.
-
-@item \n
-Represents a newline, control-j, ASCII code 10.
-
-@item \r
-Represents a carriage return, control-m, ASCII code 13.
-
-@item \t
-Represents a horizontal tab, control-i, ASCII code 9.
-
-@item \v
-Represents a vertical tab, control-k, ASCII code 11.
-
-@item \@var{nnn}
-Represents the octal value @var{nnn}, where @var{nnn} are one to three
-digits between 0 and 7. For example, the code for the ASCII ESC
-(escape) character is @samp{\033}.@refill
-
-@item \x@var{hh}@dots{}
-Represents the hexadecimal value @var{hh}, where @var{hh} are hexadecimal
-digits (@samp{0} through @samp{9} and either @samp{A} through @samp{F} or
-@samp{a} through @samp{f}). Like the same construct in @sc{ansi} C, the escape
-sequence continues until the first non-hexadecimal digit is seen. However,
-using more than two hexadecimal digits produces undefined results. (The
-@samp{\x} escape sequence is not allowed in @sc{posix} @code{awk}.)@refill
-@end table
-
-A @dfn{constant regexp} is a regular expression description enclosed in
-slashes, such as @code{/^beginning and end$/}. Most regexps used in
-@code{awk} programs are constant, but the @samp{~} and @samp{!~}
-operators can also match computed or ``dynamic'' regexps
-(@pxref{Regexp Usage, ,How to Use Regular Expressions}).@refill
-
-Constant regexps may be used like simple expressions. When a
-constant regexp is not on the right hand side of the @samp{~} or
-@samp{!~} operators, it has the same meaning as if it appeared
-in a pattern, i.e. @samp{($0 ~ /foo/)}
-(@pxref{Expression Patterns, ,Expressions as Patterns}).
-This means that the two code segments,@refill
-
-@example
-if ($0 ~ /barfly/ || $0 ~ /camelot/)
- print "found"
-@end example
-
-@noindent
-and
-
-@example
-if (/barfly/ || /camelot/)
- print "found"
-@end example
-
-@noindent
-are exactly equivalent. One rather bizarre consequence of this rule is
-that the following boolean expression is legal, but does not do what the user
-intended:@refill
-
-@example
-if (/foo/ ~ $1) print "found foo"
-@end example
-
-This code is ``obviously'' testing @code{$1} for a match against the regexp
-@code{/foo/}. But in fact, the expression @code{(/foo/ ~ $1)} actually means
-@code{(($0 ~ /foo/) ~ $1)}. In other words, first match the input record
-against the regexp @code{/foo/}. The result will be either a 0 or a 1,
-depending upon the success or failure of the match. Then match that result
-against the first field in the record.@refill
-
-Since it is unlikely that you would ever really wish to make this kind of
-test, @code{gawk} will issue a warning when it sees this construct in
-a program.@refill
-
-Another consequence of this rule is that the assignment statement
-
-@example
-matches = /foo/
-@end example
-
-@noindent
-will assign either 0 or 1 to the variable @code{matches}, depending
-upon the contents of the current input record.
-
-Constant regular expressions are also used as the first argument for
-the @code{sub} and @code{gsub} functions
-(@pxref{String Functions, ,Built-in Functions for String Manipulation}).@refill
-
-This feature of the language was never well documented until the
-@sc{posix} specification.
-
-You may be wondering, when is
-
-@example
-$1 ~ /foo/ @{ @dots{} @}
-@end example
-
-@noindent
-preferable to
-
-@example
-$1 ~ "foo" @{ @dots{} @}
-@end example
-
-Since the right-hand sides of both @samp{~} operators are constants,
-it is more efficient to use the @samp{/foo/} form: @code{awk} can note
-that you have supplied a regexp and store it internally in a form that
-makes pattern matching more efficient. In the second form, @code{awk}
-must first convert the string into this internal form, and then perform
-the pattern matching. The first form is also better style; it shows
-clearly that you intend a regexp match.
-
-@node Variables, Arithmetic Ops, Constants, Expressions
-@section Variables
-@cindex variables, user-defined
-@cindex user-defined variables
-@c there should be more than one subsection, ideally. Not a big deal.
-@c But usually there are supposed to be at least two. One way to get
-@c around this is to write the info in the subsection as the info in the
-@c section itself and not have any subsections.. --mew
-
-Variables let you give names to values and refer to them later. You have
-already seen variables in many of the examples. The name of a variable
-must be a sequence of letters, digits and underscores, but it may not begin
-with a digit. Case is significant in variable names; @code{a} and @code{A}
-are distinct variables.
-
-A variable name is a valid expression by itself; it represents the
-variable's current value. Variables are given new values with
-@dfn{assignment operators} and @dfn{increment operators}.
-@xref{Assignment Ops, ,Assignment Expressions}.
-
-A few variables have special built-in meanings, such as @code{FS}, the
-field separator, and @code{NF}, the number of fields in the current
-input record. @xref{Built-in Variables}, for a list of them. These
-built-in variables can be used and assigned just like all other
-variables, but their values are also used or changed automatically by
-@code{awk}. Each built-in variable's name is made entirely of upper case
-letters.
-
-Variables in @code{awk} can be assigned either numeric or string
-values. By default, variables are initialized to the null string, which
-is effectively zero if converted to a number. There is no need to
-``initialize'' each variable explicitly in @code{awk}, the way you would in C or most other traditional languages.
-
-@menu
-* Assignment Options:: Setting variables on the command line
- and a summary of command line syntax.
- This is an advanced method of input.
-@end menu
-
-@node Assignment Options, , Variables, Variables
-@subsection Assigning Variables on the Command Line
-
-You can set any @code{awk} variable by including a @dfn{variable assignment}
-among the arguments on the command line when you invoke @code{awk}
-(@pxref{Command Line, ,Invoking @code{awk}}). Such an assignment has
-this form:@refill
-
-@example
-@var{variable}=@var{text}
-@end example
-
-@noindent
-With it, you can set a variable either at the beginning of the
-@code{awk} run or in between input files.
-
-If you precede the assignment with the @samp{-v} option, like this:
-
-@example
--v @var{variable}=@var{text}
-@end example
-
-@noindent
-then the variable is set at the very beginning, before even the
-@code{BEGIN} rules are run. The @samp{-v} option and its assignment
-must precede all the file name arguments, as well as the program text.
-
-Otherwise, the variable assignment is performed at a time determined by
-its position among the input file arguments: after the processing of the
-preceding input file argument. For example:
-
-@example
-awk '@{ print $n @}' n=4 inventory-shipped n=2 BBS-list
-@end example
-
-@noindent
-prints the value of field number @code{n} for all input records. Before
-the first file is read, the command line sets the variable @code{n}
-equal to 4. This causes the fourth field to be printed in lines from
-the file @file{inventory-shipped}. After the first file has finished,
-but before the second file is started, @code{n} is set to 2, so that the
-second field is printed in lines from @file{BBS-list}.
-
-Command line arguments are made available for explicit examination by
-the @code{awk} program in an array named @code{ARGV}
-(@pxref{Built-in Variables}).@refill
-
-@code{awk} processes the values of command line assignments for escape
-sequences (@pxref{Constants, ,Constant Expressions}).
-
-@node Arithmetic Ops, Concatenation, Variables, Expressions
-@section Arithmetic Operators
-@cindex arithmetic operators
-@cindex operators, arithmetic
-@cindex addition
-@cindex subtraction
-@cindex multiplication
-@cindex division
-@cindex remainder
-@cindex quotient
-@cindex exponentiation
-
-The @code{awk} language uses the common arithmetic operators when
-evaluating expressions. All of these arithmetic operators follow normal
-precedence rules, and work as you would expect them to. This example
-divides field three by field four, adds field two, stores the result
-into field one, and prints the resulting altered input record:
-
-@example
-awk '@{ $1 = $2 + $3 / $4; print @}' inventory-shipped
-@end example
-
-The arithmetic operators in @code{awk} are:
-
-@table @code
-@item @var{x} + @var{y}
-Addition.
-
-@item @var{x} - @var{y}
-Subtraction.
-
-@item - @var{x}
-Negation.
-
-@item + @var{x}
-Unary plus. No real effect on the expression.
-
-@item @var{x} * @var{y}
-Multiplication.
-
-@item @var{x} / @var{y}
-Division. Since all numbers in @code{awk} are double-precision
-floating point, the result is not rounded to an integer: @code{3 / 4}
-has the value 0.75.
-
-@item @var{x} % @var{y}
-@iftex
-@cindex differences between @code{gawk} and @code{awk}
-@end iftex
-Remainder. The quotient is rounded toward zero to an integer,
-multiplied by @var{y} and this result is subtracted from @var{x}.
-This operation is sometimes known as ``trunc-mod.'' The following
-relation always holds:
-
-@example
-b * int(a / b) + (a % b) == a
-@end example
-
-One possibly undesirable effect of this definition of remainder is that
-@code{@var{x} % @var{y}} is negative if @var{x} is negative. Thus,
-
-@example
--17 % 8 = -1
-@end example
-
-In other @code{awk} implementations, the signedness of the remainder
-may be machine dependent.
-
-@item @var{x} ^ @var{y}
-@itemx @var{x} ** @var{y}
-Exponentiation: @var{x} raised to the @var{y} power. @code{2 ^ 3} has
-the value 8. The character sequence @samp{**} is equivalent to
-@samp{^}. (The @sc{posix} standard only specifies the use of @samp{^}
-for exponentiation.)
-@end table
-
-@node Concatenation, Comparison Ops, Arithmetic Ops, Expressions
-@section String Concatenation
-
-@cindex string operators
-@cindex operators, string
-@cindex concatenation
-There is only one string operation: concatenation. It does not have a
-specific operator to represent it. Instead, concatenation is performed by
-writing expressions next to one another, with no operator. For example:
-
-@example
-awk '@{ print "Field number one: " $1 @}' BBS-list
-@end example
-
-@noindent
-produces, for the first record in @file{BBS-list}:
-
-@example
-Field number one: aardvark
-@end example
-
-Without the space in the string constant after the @samp{:}, the line
-would run together. For example:
-
-@example
-awk '@{ print "Field number one:" $1 @}' BBS-list
-@end example
-
-@noindent
-produces, for the first record in @file{BBS-list}:
-
-@example
-Field number one:aardvark
-@end example
-
-Since string concatenation does not have an explicit operator, it is
-often necessary to insure that it happens where you want it to by
-enclosing the items to be concatenated in parentheses. For example, the
-following code fragment does not concatenate @code{file} and @code{name}
-as you might expect:
-
-@example
-file = "file"
-name = "name"
-print "something meaningful" > file name
-@end example
-
-@noindent
-It is necessary to use the following:
-
-@example
-print "something meaningful" > (file name)
-@end example
-
-We recommend you use parentheses around concatenation in all but the
-most common contexts (such as in the right-hand operand of @samp{=}).
-
-@ignore
-@code{gawk} actually now allows a concatenation on the right hand
-side of a @code{>} redirection, but other @code{awk}s don't. So for
-now we won't mention that fact.
-@end ignore
-
-@node Comparison Ops, Boolean Ops, Concatenation, Expressions
-@section Comparison Expressions
-@cindex comparison expressions
-@cindex expressions, comparison
-@cindex relational operators
-@cindex operators, relational
-@cindex regexp operators
-
-@dfn{Comparison expressions} compare strings or numbers for
-relationships such as equality. They are written using @dfn{relational
-operators}, which are a superset of those in C. Here is a table of
-them:
-
-@table @code
-@item @var{x} < @var{y}
-True if @var{x} is less than @var{y}.
-
-@item @var{x} <= @var{y}
-True if @var{x} is less than or equal to @var{y}.
-
-@item @var{x} > @var{y}
-True if @var{x} is greater than @var{y}.
-
-@item @var{x} >= @var{y}
-True if @var{x} is greater than or equal to @var{y}.
-
-@item @var{x} == @var{y}
-True if @var{x} is equal to @var{y}.
-
-@item @var{x} != @var{y}
-True if @var{x} is not equal to @var{y}.
-
-@item @var{x} ~ @var{y}
-True if the string @var{x} matches the regexp denoted by @var{y}.
-
-@item @var{x} !~ @var{y}
-True if the string @var{x} does not match the regexp denoted by @var{y}.
-
-@item @var{subscript} in @var{array}
-True if array @var{array} has an element with the subscript @var{subscript}.
-@end table
-
-Comparison expressions have the value 1 if true and 0 if false.
-
-The rules @code{gawk} uses for performing comparisons are based on those
-in draft 11.2 of the @sc{posix} standard. The @sc{posix} standard introduced
-the concept of a @dfn{numeric string}, which is simply a string that looks
-like a number, for example, @code{@w{" +2"}}.
-
-@vindex CONVFMT
-When performing a relational operation, @code{gawk} considers the type of an
-operand to be the type it received on its last @emph{assignment}, rather
-than the type of its last @emph{use}
-(@pxref{Values, ,Numeric and String Values}).
-This type is @emph{unknown} when the operand is from an ``external'' source:
-field variables, command line arguments, array elements resulting from a
-@code{split} operation, and the value of an @code{ENVIRON} element.
-In this case only, if the operand is a numeric string, then it is
-considered to be of both string type and numeric type. If at least one
-operand of a comparison is of string type only, then a string
-comparison is performed. Any numeric operand will be converted to a
-string using the value of @code{CONVFMT}
-(@pxref{Conversion, ,Conversion of Strings and Numbers}).
-If one operand of a comparison is numeric, and the other operand is
-either numeric or both numeric and string, then @code{gawk} does a
-numeric comparison. If both operands have both types, then the
-comparison is numeric. Strings are compared
-by comparing the first character of each, then the second character of each,
-and so on. Thus @code{"10"} is less than @code{"9"}. If there are two
-strings where one is a prefix of the other, the shorter string is less than
-the longer one. Thus @code{"abc"} is less than @code{"abcd"}.@refill
-
-Here are some sample expressions, how @code{gawk} compares them, and what
-the result of the comparison is.
-
-@table @code
-@item 1.5 <= 2.0
-numeric comparison (true)
-
-@item "abc" >= "xyz"
-string comparison (false)
-
-@item 1.5 != " +2"
-string comparison (true)
-
-@item "1e2" < "3"
-string comparison (true)
-
-@item a = 2; b = "2"
-@itemx a == b
-string comparison (true)
-@end table
-
-@example
-echo 1e2 3 | awk '@{ print ($1 < $2) ? "true" : "false" @}'
-@end example
-
-@noindent
-prints @samp{false} since both @code{$1} and @code{$2} are numeric
-strings and thus have both string and numeric types, thus dictating
-a numeric comparison.
-
-The purpose of the comparison rules and the use of numeric strings is
-to attempt to produce the behavior that is ``least surprising,'' while
-still ``doing the right thing.''
-
-String comparisons and regular expression comparisons are very different.
-For example,
-
-@example
-$1 == "foo"
-@end example
-
-@noindent
-has the value of 1, or is true, if the first field of the current input
-record is precisely @samp{foo}. By contrast,
-
-@example
-$1 ~ /foo/
-@end example
-
-@noindent
-has the value 1 if the first field contains @samp{foo}, such as @samp{foobar}.
-
-The right hand operand of the @samp{~} and @samp{!~} operators may be
-either a constant regexp (@code{/@dots{}/}), or it may be an ordinary
-expression, in which case the value of the expression as a string is a
-dynamic regexp (@pxref{Regexp Usage, ,How to Use Regular Expressions}).
-
-@cindex regexp as expression
-In very recent implementations of @code{awk}, a constant regular
-expression in slashes by itself is also an expression. The regexp
-@code{/@var{regexp}/} is an abbreviation for this comparison expression:
-
-@example
-$0 ~ /@var{regexp}/
-@end example
-
-In some contexts it may be necessary to write parentheses around the
-regexp to avoid confusing the @code{gawk} parser. For example,
-@code{(/x/ - /y/) > threshold} is not allowed, but @code{((/x/) - (/y/))
-> threshold} parses properly.
-
-One special place where @code{/foo/} is @emph{not} an abbreviation for
-@code{$0 ~ /foo/} is when it is the right-hand operand of @samp{~} or
-@samp{!~}! @xref{Constants, ,Constant Expressions}, where this is
-discussed in more detail.
-
-@node Boolean Ops, Assignment Ops, Comparison Ops, Expressions
-@section Boolean Expressions
-@cindex expressions, boolean
-@cindex boolean expressions
-@cindex operators, boolean
-@cindex boolean operators
-@cindex logical operations
-@cindex and operator
-@cindex or operator
-@cindex not operator
-
-A @dfn{boolean expression} is a combination of comparison expressions or
-matching expressions, using the boolean operators ``or''
-(@samp{||}), ``and'' (@samp{&&}), and ``not'' (@samp{!}), along with
-parentheses to control nesting. The truth of the boolean expression is
-computed by combining the truth values of the component expressions.
-
-Boolean expressions can be used wherever comparison and matching
-expressions can be used. They can be used in @code{if}, @code{while}
-@code{do} and @code{for} statements. They have numeric values (1 if true,
-0 if false), which come into play if the result of the boolean expression
-is stored in a variable, or used in arithmetic.@refill
-
-In addition, every boolean expression is also a valid boolean pattern, so
-you can use it as a pattern to control the execution of rules.
-
-Here are descriptions of the three boolean operators, with an example of
-each. It may be instructive to compare these examples with the
-analogous examples of boolean patterns
-(@pxref{Boolean Patterns, ,Boolean Operators and Patterns}), which
-use the same boolean operators in patterns instead of expressions.@refill
-
-@table @code
-@item @var{boolean1} && @var{boolean2}
-True if both @var{boolean1} and @var{boolean2} are true. For example,
-the following statement prints the current input record if it contains
-both @samp{2400} and @samp{foo}.@refill
-
-@smallexample
-if ($0 ~ /2400/ && $0 ~ /foo/) print
-@end smallexample
-
-The subexpression @var{boolean2} is evaluated only if @var{boolean1}
-is true. This can make a difference when @var{boolean2} contains
-expressions that have side effects: in the case of @code{$0 ~ /foo/ &&
-($2 == bar++)}, the variable @code{bar} is not incremented if there is
-no @samp{foo} in the record.
-
-@item @var{boolean1} || @var{boolean2}
-True if at least one of @var{boolean1} or @var{boolean2} is true.
-For example, the following command prints all records in the input
-file @file{BBS-list} that contain @emph{either} @samp{2400} or
-@samp{foo}, or both.@refill
-
-@smallexample
-awk '@{ if ($0 ~ /2400/ || $0 ~ /foo/) print @}' BBS-list
-@end smallexample
-
-The subexpression @var{boolean2} is evaluated only if @var{boolean1}
-is false. This can make a difference when @var{boolean2} contains
-expressions that have side effects.
-
-@item !@var{boolean}
-True if @var{boolean} is false. For example, the following program prints
-all records in the input file @file{BBS-list} that do @emph{not} contain the
-string @samp{foo}.
-
-@smallexample
-awk '@{ if (! ($0 ~ /foo/)) print @}' BBS-list
-@end smallexample
-@end table
-
-@node Assignment Ops, Increment Ops, Boolean Ops, Expressions
-@section Assignment Expressions
-@cindex assignment operators
-@cindex operators, assignment
-@cindex expressions, assignment
-
-An @dfn{assignment} is an expression that stores a new value into a
-variable. For example, let's assign the value 1 to the variable
-@code{z}:@refill
-
-@example
-z = 1
-@end example
-
-After this expression is executed, the variable @code{z} has the value 1.
-Whatever old value @code{z} had before the assignment is forgotten.
-
-Assignments can store string values also. For example, this would store
-the value @code{"this food is good"} in the variable @code{message}:
-
-@example
-thing = "food"
-predicate = "good"
-message = "this " thing " is " predicate
-@end example
-
-@noindent
-(This also illustrates concatenation of strings.)
-
-The @samp{=} sign is called an @dfn{assignment operator}. It is the
-simplest assignment operator because the value of the right-hand
-operand is stored unchanged.
-
-@cindex side effect
-Most operators (addition, concatenation, and so on) have no effect
-except to compute a value. If you ignore the value, you might as well
-not use the operator. An assignment operator is different; it does
-produce a value, but even if you ignore the value, the assignment still
-makes itself felt through the alteration of the variable. We call this
-a @dfn{side effect}.
-
-@cindex lvalue
-The left-hand operand of an assignment need not be a variable
-(@pxref{Variables}); it can also be a field
-(@pxref{Changing Fields, ,Changing the Contents of a Field}) or
-an array element (@pxref{Arrays, ,Arrays in @code{awk}}).
-These are all called @dfn{lvalues},
-which means they can appear on the left-hand side of an assignment operator.
-The right-hand operand may be any expression; it produces the new value
-which the assignment stores in the specified variable, field or array
-element.@refill
-
-It is important to note that variables do @emph{not} have permanent types.
-The type of a variable is simply the type of whatever value it happens
-to hold at the moment. In the following program fragment, the variable
-@code{foo} has a numeric value at first, and a string value later on:
-
-@example
-foo = 1
-print foo
-foo = "bar"
-print foo
-@end example
-
-@noindent
-When the second assignment gives @code{foo} a string value, the fact that
-it previously had a numeric value is forgotten.
-
-An assignment is an expression, so it has a value: the same value that
-is assigned. Thus, @code{z = 1} as an expression has the value 1.
-One consequence of this is that you can write multiple assignments together:
-
-@example
-x = y = z = 0
-@end example
-
-@noindent
-stores the value 0 in all three variables. It does this because the
-value of @code{z = 0}, which is 0, is stored into @code{y}, and then
-the value of @code{y = z = 0}, which is 0, is stored into @code{x}.
-
-You can use an assignment anywhere an expression is called for. For
-example, it is valid to write @code{x != (y = 1)} to set @code{y} to 1
-and then test whether @code{x} equals 1. But this style tends to make
-programs hard to read; except in a one-shot program, you should
-rewrite it to get rid of such nesting of assignments. This is never very
-hard.
-
-Aside from @samp{=}, there are several other assignment operators that
-do arithmetic with the old value of the variable. For example, the
-operator @samp{+=} computes a new value by adding the right-hand value
-to the old value of the variable. Thus, the following assignment adds
-5 to the value of @code{foo}:
-
-@example
-foo += 5
-@end example
-
-@noindent
-This is precisely equivalent to the following:
-
-@example
-foo = foo + 5
-@end example
-
-@noindent
-Use whichever one makes the meaning of your program clearer.
-
-Here is a table of the arithmetic assignment operators. In each
-case, the right-hand operand is an expression whose value is converted
-to a number.
-
-@table @code
-@item @var{lvalue} += @var{increment}
-Adds @var{increment} to the value of @var{lvalue} to make the new value
-of @var{lvalue}.
-
-@item @var{lvalue} -= @var{decrement}
-Subtracts @var{decrement} from the value of @var{lvalue}.
-
-@item @var{lvalue} *= @var{coefficient}
-Multiplies the value of @var{lvalue} by @var{coefficient}.
-
-@item @var{lvalue} /= @var{quotient}
-Divides the value of @var{lvalue} by @var{quotient}.
-
-@item @var{lvalue} %= @var{modulus}
-Sets @var{lvalue} to its remainder by @var{modulus}.
-
-@item @var{lvalue} ^= @var{power}
-@itemx @var{lvalue} **= @var{power}
-Raises @var{lvalue} to the power @var{power}.
-(Only the @code{^=} operator is specified by @sc{posix}.)
-@end table
-
-@ignore
-From: gatech!ames!elroy!cit-vax!EQL.Caltech.Edu!rankin (Pat Rankin)
- In the discussion of assignment operators, it states that
-``foo += 5'' "is precisely equivalent to" ``foo = foo + 5'' (p.77). That
-may be true for simple variables, but it's not true for expressions with
-side effects, like array references. For proof, try
- BEGIN {
- foo[rand()] += 5; for (x in foo) print x, foo[x]
- bar[rand()] = bar[rand()] + 5; for (x in bar) print x, bar[x]
- }
-I suspect that the original statement is simply untrue--that '+=' is more
-efficient in all cases.
-
-ADR --- Try to add something about this here for the next go 'round.
-@end ignore
-
-@node Increment Ops, Conversion, Assignment Ops, Expressions
-@section Increment Operators
-
-@cindex increment operators
-@cindex operators, increment
-@dfn{Increment operators} increase or decrease the value of a variable
-by 1. You could do the same thing with an assignment operator, so
-the increment operators add no power to the @code{awk} language; but they
-are convenient abbreviations for something very common.
-
-The operator to add 1 is written @samp{++}. It can be used to increment
-a variable either before or after taking its value.
-
-To pre-increment a variable @var{v}, write @code{++@var{v}}. This adds
-1 to the value of @var{v} and that new value is also the value of this
-expression. The assignment expression @code{@var{v} += 1} is completely
-equivalent.
-
-Writing the @samp{++} after the variable specifies post-increment. This
-increments the variable value just the same; the difference is that the
-value of the increment expression itself is the variable's @emph{old}
-value. Thus, if @code{foo} has the value 4, then the expression @code{foo++}
-has the value 4, but it changes the value of @code{foo} to 5.
-
-The post-increment @code{foo++} is nearly equivalent to writing @code{(foo
-+= 1) - 1}. It is not perfectly equivalent because all numbers in
-@code{awk} are floating point: in floating point, @code{foo + 1 - 1} does
-not necessarily equal @code{foo}. But the difference is minute as
-long as you stick to numbers that are fairly small (less than a trillion).
-
-Any lvalue can be incremented. Fields and array elements are incremented
-just like variables. (Use @samp{$(i++)} when you wish to do a field reference
-and a variable increment at the same time. The parentheses are necessary
-because of the precedence of the field reference operator, @samp{$}.)
-@c expert information in the last parenthetical remark
-
-The decrement operator @samp{--} works just like @samp{++} except that
-it subtracts 1 instead of adding. Like @samp{++}, it can be used before
-the lvalue to pre-decrement or after it to post-decrement.
-
-Here is a summary of increment and decrement expressions.
-
-@table @code
-@item ++@var{lvalue}
-This expression increments @var{lvalue} and the new value becomes the
-value of this expression.
-
-@item @var{lvalue}++
-This expression causes the contents of @var{lvalue} to be incremented.
-The value of the expression is the @emph{old} value of @var{lvalue}.
-
-@item --@var{lvalue}
-Like @code{++@var{lvalue}}, but instead of adding, it subtracts. It
-decrements @var{lvalue} and delivers the value that results.
-
-@item @var{lvalue}--
-Like @code{@var{lvalue}++}, but instead of adding, it subtracts. It
-decrements @var{lvalue}. The value of the expression is the @emph{old}
-value of @var{lvalue}.
-@end table
-
-@node Conversion, Values, Increment Ops, Expressions
-@section Conversion of Strings and Numbers
-
-@cindex conversion of strings and numbers
-Strings are converted to numbers, and numbers to strings, if the context
-of the @code{awk} program demands it. For example, if the value of
-either @code{foo} or @code{bar} in the expression @code{foo + bar}
-happens to be a string, it is converted to a number before the addition
-is performed. If numeric values appear in string concatenation, they
-are converted to strings. Consider this:@refill
-
-@example
-two = 2; three = 3
-print (two three) + 4
-@end example
-
-@noindent
-This eventually prints the (numeric) value 27. The numeric values of
-the variables @code{two} and @code{three} are converted to strings and
-concatenated together, and the resulting string is converted back to the
-number 23, to which 4 is then added.
-
-If, for some reason, you need to force a number to be converted to a
-string, concatenate the null string with that number. To force a string
-to be converted to a number, add zero to that string.
-
-A string is converted to a number by interpreting a numeric prefix
-of the string as numerals:
-@code{"2.5"} converts to 2.5, @code{"1e3"} converts to 1000, and @code{"25fix"}
-has a numeric value of 25.
-Strings that can't be interpreted as valid numbers are converted to
-zero.
-
-@vindex CONVFMT
-The exact manner in which numbers are converted into strings is controlled
-by the @code{awk} built-in variable @code{CONVFMT} (@pxref{Built-in Variables}).
-Numbers are converted using a special version of the @code{sprintf} function
-(@pxref{Built-in, ,Built-in Functions}) with @code{CONVFMT} as the format
-specifier.@refill
-
-@code{CONVFMT}'s default value is @code{"%.6g"}, which prints a value with
-at least six significant digits. For some applications you will want to
-change it to specify more precision. Double precision on most modern
-machines gives you 16 or 17 decimal digits of precision.
-
-Strange results can happen if you set @code{CONVFMT} to a string that doesn't
-tell @code{sprintf} how to format floating point numbers in a useful way.
-For example, if you forget the @samp{%} in the format, all numbers will be
-converted to the same constant string.@refill
-
-As a special case, if a number is an integer, then the result of converting
-it to a string is @emph{always} an integer, no matter what the value of
-@code{CONVFMT} may be. Given the following code fragment:
-
-@example
-CONVFMT = "%2.2f"
-a = 12
-b = a ""
-@end example
-
-@noindent
-@code{b} has the value @code{"12"}, not @code{"12.00"}.
-
-@ignore
-For the 2.14 version, describe the ``stickyness'' of conversions. Right now
-the manual assumes everywhere that variables are either numbers or strings;
-in fact both kinds of values may be valid. If both happen to be valid, a
-conversion isn't necessary and isn't done. Revising the manual to be
-consistent with this, though, is too big a job to tackle at the moment.
-
-7/92: This has sort of been done, only the section isn't completely right!
- What to do?
-7/92: Pretty much fixed, at least for the short term, thanks to text
- from David.
-@end ignore
-
-@vindex OFMT
-Prior to the @sc{posix} standard, @code{awk} specified that the value
-of @code{OFMT} was used for converting numbers to strings. @code{OFMT}
-specifies the output format to use when printing numbers with @code{print}.
-@code{CONVFMT} was introduced in order to separate the semantics of
-conversions from the semantics of printing. Both @code{CONVFMT} and
-@code{OFMT} have the same default value: @code{"%.6g"}. In the vast majority
-of cases, old @code{awk} programs will not change their behavior.
-However, this use of @code{OFMT} is something to keep in mind if you must
-port your program to other implementations of @code{awk}; we recommend
-that instead of changing your programs, you just port @code{gawk} itself!@refill
-
-@node Values, Conditional Exp, Conversion, Expressions
-@section Numeric and String Values
-@cindex conversion of strings and numbers
-
-Through most of this manual, we present @code{awk} values (such as constants,
-fields, or variables) as @emph{either} numbers @emph{or} strings. This is
-a convenient way to think about them, since typically they are used in only
-one way, or the other.
-
-In truth though, @code{awk} values can be @emph{both} string and
-numeric, at the same time. Internally, @code{awk} represents values
-with a string, a (floating point) number, and an indication that one,
-the other, or both representations of the value are valid.
-
-Keeping track of both kinds of values is important for execution
-efficiency: a variable can acquire a string value the first time it
-is used as a string, and then that string value can be used until the
-variable is assigned a new value. Thus, if a variable with only a numeric
-value is used in several concatenations in a row, it only has to be given
-a string representation once. The numeric value remains valid, so that
-no conversion back to a number is necessary if the variable is later used
-in an arithmetic expression.
-
-Tracking both kinds of values is also important for precise numerical
-calculations. Consider the following:
-
-@smallexample
-a = 123.321
-CONVFMT = "%3.1f"
-b = a " is a number"
-c = a + 1.654
-@end smallexample
-
-@noindent
-The variable @code{a} receives a string value in the concatenation and
-assignment to @code{b}. The string value of @code{a} is @code{"123.3"}.
-If the numeric value was lost when it was converted to a string, then the
-numeric use of @code{a} in the last statement would lose information.
-@code{c} would be assigned the value 124.954 instead of 124.975.
-Such errors accumulate rapidly, and very adversely affect numeric
-computations.@refill
-
-Once a numeric value acquires a corresponding string value, it stays valid
-until a new assignment is made. If @code{CONVFMT}
-(@pxref{Conversion, ,Conversion of Strings and Numbers}) changes in the
-meantime, the old string value will still be used. For example:@refill
-
-@smallexample
-BEGIN @{
- CONVFMT = "%2.2f"
- a = 123.456
- b = a "" # force `a' to have string value too
- printf "a = %s\n", a
- CONVFMT = "%.6g"
- printf "a = %s\n", a
- a += 0 # make `a' numeric only again
- printf "a = %s\n", a # use `a' as string
-@}
-@end smallexample
-
-@noindent
-This program prints @samp{a = 123.46} twice, and then prints
-@samp{a = 123.456}.
-
-@xref{Conversion, ,Conversion of Strings and Numbers}, for the rules that
-specify how string values are made from numeric values.
-
-@node Conditional Exp, Function Calls, Values, Expressions
-@section Conditional Expressions
-@cindex conditional expression
-@cindex expression, conditional
-
-A @dfn{conditional expression} is a special kind of expression with
-three operands. It allows you to use one expression's value to select
-one of two other expressions.
-
-The conditional expression looks the same as in the C language:
-
-@example
-@var{selector} ? @var{if-true-exp} : @var{if-false-exp}
-@end example
-
-@noindent
-There are three subexpressions. The first, @var{selector}, is always
-computed first. If it is ``true'' (not zero and not null) then
-@var{if-true-exp} is computed next and its value becomes the value of
-the whole expression. Otherwise, @var{if-false-exp} is computed next
-and its value becomes the value of the whole expression.@refill
-
-For example, this expression produces the absolute value of @code{x}:
-
-@example
-x > 0 ? x : -x
-@end example
-
-Each time the conditional expression is computed, exactly one of
-@var{if-true-exp} and @var{if-false-exp} is computed; the other is ignored.
-This is important when the expressions contain side effects. For example,
-this conditional expression examines element @code{i} of either array
-@code{a} or array @code{b}, and increments @code{i}.
-
-@example
-x == y ? a[i++] : b[i++]
-@end example
-
-@noindent
-This is guaranteed to increment @code{i} exactly once, because each time
-one or the other of the two increment expressions is executed,
-and the other is not.
-
-@node Function Calls, Precedence, Conditional Exp, Expressions
-@section Function Calls
-@cindex function call
-@cindex calling a function
-
-A @dfn{function} is a name for a particular calculation. Because it has
-a name, you can ask for it by name at any point in the program. For
-example, the function @code{sqrt} computes the square root of a number.
-
-A fixed set of functions are @dfn{built-in}, which means they are
-available in every @code{awk} program. The @code{sqrt} function is one
-of these. @xref{Built-in, ,Built-in Functions}, for a list of built-in
-functions and their descriptions. In addition, you can define your own
-functions in the program for use elsewhere in the same program.
-@xref{User-defined, ,User-defined Functions}, for how to do this.@refill
-
-@cindex arguments in function call
-The way to use a function is with a @dfn{function call} expression,
-which consists of the function name followed by a list of
-@dfn{arguments} in parentheses. The arguments are expressions which
-give the raw materials for the calculation that the function will do.
-When there is more than one argument, they are separated by commas. If
-there are no arguments, write just @samp{()} after the function name.
-Here are some examples:
-
-@example
-sqrt(x^2 + y^2) # @r{One argument}
-atan2(y, x) # @r{Two arguments}
-rand() # @r{No arguments}
-@end example
-
-@strong{Do not put any space between the function name and the
-open-parenthesis!} A user-defined function name looks just like the name of
-a variable, and space would make the expression look like concatenation
-of a variable with an expression inside parentheses. Space before the
-parenthesis is harmless with built-in functions, but it is best not to get
-into the habit of using space to avoid mistakes with user-defined
-functions.
-
-Each function expects a particular number of arguments. For example, the
-@code{sqrt} function must be called with a single argument, the number
-to take the square root of:
-
-@example
-sqrt(@var{argument})
-@end example
-
-Some of the built-in functions allow you to omit the final argument.
-If you do so, they use a reasonable default.
-@xref{Built-in, ,Built-in Functions}, for full details. If arguments
-are omitted in calls to user-defined functions, then those arguments are
-treated as local variables, initialized to the null string
-(@pxref{User-defined, ,User-defined Functions}).@refill
-
-Like every other expression, the function call has a value, which is
-computed by the function based on the arguments you give it. In this
-example, the value of @code{sqrt(@var{argument})} is the square root of the
-argument. A function can also have side effects, such as assigning the
-values of certain variables or doing I/O.
-
-Here is a command to read numbers, one number per line, and print the
-square root of each one:
-
-@example
-awk '@{ print "The square root of", $1, "is", sqrt($1) @}'
-@end example
-
-@node Precedence, , Function Calls, Expressions
-@section Operator Precedence (How Operators Nest)
-@cindex precedence
-@cindex operator precedence
-
-@dfn{Operator precedence} determines how operators are grouped, when
-different operators appear close by in one expression. For example,
-@samp{*} has higher precedence than @samp{+}; thus, @code{a + b * c}
-means to multiply @code{b} and @code{c}, and then add @code{a} to the
-product (i.e., @code{a + (b * c)}).
-
-You can overrule the precedence of the operators by using parentheses.
-You can think of the precedence rules as saying where the
-parentheses are assumed if you do not write parentheses yourself. In
-fact, it is wise to always use parentheses whenever you have an unusual
-combination of operators, because other people who read the program may
-not remember what the precedence is in this case. You might forget,
-too; then you could make a mistake. Explicit parentheses will help prevent
-any such mistake.
-
-When operators of equal precedence are used together, the leftmost
-operator groups first, except for the assignment, conditional and
-exponentiation operators, which group in the opposite order.
-Thus, @code{a - b + c} groups as @code{(a - b) + c};
-@code{a = b = c} groups as @code{a = (b = c)}.@refill
-
-The precedence of prefix unary operators does not matter as long as only
-unary operators are involved, because there is only one way to parse
-them---innermost first. Thus, @code{$++i} means @code{$(++i)} and
-@code{++$x} means @code{++($x)}. However, when another operator follows
-the operand, then the precedence of the unary operators can matter.
-Thus, @code{$x^2} means @code{($x)^2}, but @code{-x^2} means
-@code{-(x^2)}, because @samp{-} has lower precedence than @samp{^}
-while @samp{$} has higher precedence.
-
-Here is a table of the operators of @code{awk}, in order of increasing
-precedence:
-
-@table @asis
-@item assignment
-@samp{=}, @samp{+=}, @samp{-=}, @samp{*=}, @samp{/=}, @samp{%=},
-@samp{^=}, @samp{**=}. These operators group right-to-left.
-(The @samp{**=} operator is not specified by @sc{posix}.)
-
-@item conditional
-@samp{?:}. This operator groups right-to-left.
-
-@item logical ``or''.
-@samp{||}.
-
-@item logical ``and''.
-@samp{&&}.
-
-@item array membership
-@samp{in}.
-
-@item matching
-@samp{~}, @samp{!~}.
-
-@item relational, and redirection
-The relational operators and the redirections have the same precedence
-level. Characters such as @samp{>} serve both as relationals and as
-redirections; the context distinguishes between the two meanings.
-
-The relational operators are @samp{<}, @samp{<=}, @samp{==}, @samp{!=},
-@samp{>=} and @samp{>}.
-
-The I/O redirection operators are @samp{<}, @samp{>}, @samp{>>} and
-@samp{|}.
-
-Note that I/O redirection operators in @code{print} and @code{printf}
-statements belong to the statement level, not to expressions. The
-redirection does not produce an expression which could be the operand of
-another operator. As a result, it does not make sense to use a
-redirection operator near another operator of lower precedence, without
-parentheses. Such combinations, for example @samp{print foo > a ? b :
-c}, result in syntax errors.
-
-@item concatenation
-No special token is used to indicate concatenation.
-The operands are simply written side by side.
-
-@item add, subtract
-@samp{+}, @samp{-}.
-
-@item multiply, divide, mod
-@samp{*}, @samp{/}, @samp{%}.
-
-@item unary plus, minus, ``not''
-@samp{+}, @samp{-}, @samp{!}.
-
-@item exponentiation
-@samp{^}, @samp{**}. These operators group right-to-left.
-(The @samp{**} operator is not specified by @sc{posix}.)
-
-@item increment, decrement
-@samp{++}, @samp{--}.
-
-@item field
-@samp{$}.
-@end table
-
-@node Statements, Arrays, Expressions, Top
-@chapter Control Statements in Actions
-@cindex control statement
-
-@dfn{Control statements} such as @code{if}, @code{while}, and so on
-control the flow of execution in @code{awk} programs. Most of the
-control statements in @code{awk} are patterned on similar statements in
-C.
-
-All the control statements start with special keywords such as @code{if}
-and @code{while}, to distinguish them from simple expressions.
-
-Many control statements contain other statements; for example, the
-@code{if} statement contains another statement which may or may not be
-executed. The contained statement is called the @dfn{body}. If you
-want to include more than one statement in the body, group them into a
-single compound statement with curly braces, separating them with
-newlines or semicolons.
-
-@menu
-* If Statement:: Conditionally execute
- some @code{awk} statements.
-* While Statement:: Loop until some condition is satisfied.
-* Do Statement:: Do specified action while looping until some
- condition is satisfied.
-* For Statement:: Another looping statement, that provides
- initialization and increment clauses.
-* Break Statement:: Immediately exit the innermost enclosing loop.
-* Continue Statement:: Skip to the end of the innermost
- enclosing loop.
-* Next Statement:: Stop processing the current input record.
-* Next File Statement:: Stop processing the current file.
-* Exit Statement:: Stop execution of @code{awk}.
-@end menu
-
-@node If Statement, While Statement, Statements, Statements
-@section The @code{if} Statement
-
-@cindex @code{if} statement
-The @code{if}-@code{else} statement is @code{awk}'s decision-making
-statement. It looks like this:@refill
-
-@example
-if (@var{condition}) @var{then-body} @r{[}else @var{else-body}@r{]}
-@end example
-
-@noindent
-@var{condition} is an expression that controls what the rest of the
-statement will do. If @var{condition} is true, @var{then-body} is
-executed; otherwise, @var{else-body} is executed (assuming that the
-@code{else} clause is present). The @code{else} part of the statement is
-optional. The condition is considered false if its value is zero or
-the null string, and true otherwise.@refill
-
-Here is an example:
-
-@example
-if (x % 2 == 0)
- print "x is even"
-else
- print "x is odd"
-@end example
-
-In this example, if the expression @code{x % 2 == 0} is true (that is,
-the value of @code{x} is divisible by 2), then the first @code{print}
-statement is executed, otherwise the second @code{print} statement is
-performed.@refill
-
-If the @code{else} appears on the same line as @var{then-body}, and
-@var{then-body} is not a compound statement (i.e., not surrounded by
-curly braces), then a semicolon must separate @var{then-body} from
-@code{else}. To illustrate this, let's rewrite the previous example:
-
-@example
-awk '@{ if (x % 2 == 0) print "x is even"; else
- print "x is odd" @}'
-@end example
-
-@noindent
-If you forget the @samp{;}, @code{awk} won't be able to parse the
-statement, and you will get a syntax error.
-
-We would not actually write this example this way, because a human
-reader might fail to see the @code{else} if it were not the first thing
-on its line.
-
-@node While Statement, Do Statement, If Statement, Statements
-@section The @code{while} Statement
-@cindex @code{while} statement
-@cindex loop
-@cindex body of a loop
-
-In programming, a @dfn{loop} means a part of a program that is (or at least can
-be) executed two or more times in succession.
-
-The @code{while} statement is the simplest looping statement in
-@code{awk}. It repeatedly executes a statement as long as a condition is
-true. It looks like this:
-
-@example
-while (@var{condition})
- @var{body}
-@end example
-
-@noindent
-Here @var{body} is a statement that we call the @dfn{body} of the loop,
-and @var{condition} is an expression that controls how long the loop
-keeps running.
-
-The first thing the @code{while} statement does is test @var{condition}.
-If @var{condition} is true, it executes the statement @var{body}.
-(@var{condition} is true when the value
-is not zero and not a null string.) After @var{body} has been executed,
-@var{condition} is tested again, and if it is still true, @var{body} is
-executed again. This process repeats until @var{condition} is no longer
-true. If @var{condition} is initially false, the body of the loop is
-never executed.@refill
-
-This example prints the first three fields of each record, one per line.
-
-@example
-awk '@{ i = 1
- while (i <= 3) @{
- print $i
- i++
- @}
-@}'
-@end example
-
-@noindent
-Here the body of the loop is a compound statement enclosed in braces,
-containing two statements.
-
-The loop works like this: first, the value of @code{i} is set to 1.
-Then, the @code{while} tests whether @code{i} is less than or equal to
-three. This is the case when @code{i} equals one, so the @code{i}-th
-field is printed. Then the @code{i++} increments the value of @code{i}
-and the loop repeats. The loop terminates when @code{i} reaches 4.
-
-As you can see, a newline is not required between the condition and the
-body; but using one makes the program clearer unless the body is a
-compound statement or is very simple. The newline after the open-brace
-that begins the compound statement is not required either, but the
-program would be hard to read without it.
-
-@node Do Statement, For Statement, While Statement, Statements
-@section The @code{do}-@code{while} Statement
-
-The @code{do} loop is a variation of the @code{while} looping statement.
-The @code{do} loop executes the @var{body} once, then repeats @var{body}
-as long as @var{condition} is true. It looks like this:
-
-@example
-do
- @var{body}
-while (@var{condition})
-@end example
-
-Even if @var{condition} is false at the start, @var{body} is executed at
-least once (and only once, unless executing @var{body} makes
-@var{condition} true). Contrast this with the corresponding
-@code{while} statement:
-
-@example
-while (@var{condition})
- @var{body}
-@end example
-
-@noindent
-This statement does not execute @var{body} even once if @var{condition}
-is false to begin with.
-
-Here is an example of a @code{do} statement:
-
-@example
-awk '@{ i = 1
- do @{
- print $0
- i++
- @} while (i <= 10)
-@}'
-@end example
-
-@noindent
-prints each input record ten times. It isn't a very realistic example,
-since in this case an ordinary @code{while} would do just as well. But
-this reflects actual experience; there is only occasionally a real use
-for a @code{do} statement.@refill
-
-@node For Statement, Break Statement, Do Statement, Statements
-@section The @code{for} Statement
-@cindex @code{for} statement
-
-The @code{for} statement makes it more convenient to count iterations of a
-loop. The general form of the @code{for} statement looks like this:@refill
-
-@example
-for (@var{initialization}; @var{condition}; @var{increment})
- @var{body}
-@end example
-
-@noindent
-This statement starts by executing @var{initialization}. Then, as long
-as @var{condition} is true, it repeatedly executes @var{body} and then
-@var{increment}. Typically @var{initialization} sets a variable to
-either zero or one, @var{increment} adds 1 to it, and @var{condition}
-compares it against the desired number of iterations.
-
-Here is an example of a @code{for} statement:
-
-@example
-@group
-awk '@{ for (i = 1; i <= 3; i++)
- print $i
-@}'
-@end group
-@end example
-
-@noindent
-This prints the first three fields of each input record, one field per
-line.
-
-In the @code{for} statement, @var{body} stands for any statement, but
-@var{initialization}, @var{condition} and @var{increment} are just
-expressions. You cannot set more than one variable in the
-@var{initialization} part unless you use a multiple assignment statement
-such as @code{x = y = 0}, which is possible only if all the initial values
-are equal. (But you can initialize additional variables by writing
-their assignments as separate statements preceding the @code{for} loop.)
-
-The same is true of the @var{increment} part; to increment additional
-variables, you must write separate statements at the end of the loop.
-The C compound expression, using C's comma operator, would be useful in
-this context, but it is not supported in @code{awk}.
-
-Most often, @var{increment} is an increment expression, as in the
-example above. But this is not required; it can be any expression
-whatever. For example, this statement prints all the powers of 2
-between 1 and 100:
-
-@example
-for (i = 1; i <= 100; i *= 2)
- print i
-@end example
-
-Any of the three expressions in the parentheses following the @code{for} may
-be omitted if there is nothing to be done there. Thus, @w{@samp{for (;x
-> 0;)}} is equivalent to @w{@samp{while (x > 0)}}. If the
-@var{condition} is omitted, it is treated as @var{true}, effectively
-yielding an @dfn{infinite loop} (i.e., a loop that will never
-terminate).@refill
-
-In most cases, a @code{for} loop is an abbreviation for a @code{while}
-loop, as shown here:
-
-@example
-@var{initialization}
-while (@var{condition}) @{
- @var{body}
- @var{increment}
-@}
-@end example
-
-@noindent
-The only exception is when the @code{continue} statement
-(@pxref{Continue Statement, ,The @code{continue} Statement}) is used
-inside the loop; changing a @code{for} statement to a @code{while}
-statement in this way can change the effect of the @code{continue}
-statement inside the loop.@refill
-
-There is an alternate version of the @code{for} loop, for iterating over
-all the indices of an array:
-
-@example
-for (i in array)
- @var{do something with} array[i]
-@end example
-
-@noindent
-@xref{Arrays, ,Arrays in @code{awk}}, for more information on this
-version of the @code{for} loop.
-
-The @code{awk} language has a @code{for} statement in addition to a
-@code{while} statement because often a @code{for} loop is both less work to
-type and more natural to think of. Counting the number of iterations is
-very common in loops. It can be easier to think of this counting as part
-of looping rather than as something to do inside the loop.
-
-The next section has more complicated examples of @code{for} loops.
-
-@node Break Statement, Continue Statement, For Statement, Statements
-@section The @code{break} Statement
-@cindex @code{break} statement
-@cindex loops, exiting
-
-The @code{break} statement jumps out of the innermost @code{for},
-@code{while}, or @code{do}-@code{while} loop that encloses it. The
-following example finds the smallest divisor of any integer, and also
-identifies prime numbers:@refill
-
-@smallexample
-awk '# find smallest divisor of num
- @{ num = $1
- for (div = 2; div*div <= num; div++)
- if (num % div == 0)
- break
- if (num % div == 0)
- printf "Smallest divisor of %d is %d\n", num, div
- else
- printf "%d is prime\n", num @}'
-@end smallexample
-
-When the remainder is zero in the first @code{if} statement, @code{awk}
-immediately @dfn{breaks out} of the containing @code{for} loop. This means
-that @code{awk} proceeds immediately to the statement following the loop
-and continues processing. (This is very different from the @code{exit}
-statement which stops the entire @code{awk} program.
-@xref{Exit Statement, ,The @code{exit} Statement}.)@refill
-
-Here is another program equivalent to the previous one. It illustrates how
-the @var{condition} of a @code{for} or @code{while} could just as well be
-replaced with a @code{break} inside an @code{if}:
-
-@smallexample
-@group
-awk '# find smallest divisor of num
- @{ num = $1
- for (div = 2; ; div++) @{
- if (num % div == 0) @{
- printf "Smallest divisor of %d is %d\n", num, div
- break
- @}
- if (div*div > num) @{
- printf "%d is prime\n", num
- break
- @}
- @}
-@}'
-@end group
-@end smallexample
-
-@node Continue Statement, Next Statement, Break Statement, Statements
-@section The @code{continue} Statement
-
-@cindex @code{continue} statement
-The @code{continue} statement, like @code{break}, is used only inside
-@code{for}, @code{while}, and @code{do}-@code{while} loops. It skips
-over the rest of the loop body, causing the next cycle around the loop
-to begin immediately. Contrast this with @code{break}, which jumps out
-of the loop altogether. Here is an example:@refill
-
-@example
-# print names that don't contain the string "ignore"
-
-# first, save the text of each line
-@{ names[NR] = $0 @}
-
-# print what we're interested in
-END @{
- for (x in names) @{
- if (names[x] ~ /ignore/)
- continue
- print names[x]
- @}
-@}
-@end example
-
-If one of the input records contains the string @samp{ignore}, this
-example skips the print statement for that record, and continues back to
-the first statement in the loop.
-
-This is not a practical example of @code{continue}, since it would be
-just as easy to write the loop like this:
-
-@example
-for (x in names)
- if (names[x] !~ /ignore/)
- print names[x]
-@end example
-
-@ignore
-from brennan@boeing.com:
-
-page 90, section 9.6. The example is too artificial as
-the one line program
-
- !/ignore/
-
-does the same thing.
-@end ignore
-@c ADR --- he's right, but don't worry about this for now
-
-The @code{continue} statement in a @code{for} loop directs @code{awk} to
-skip the rest of the body of the loop, and resume execution with the
-increment-expression of the @code{for} statement. The following program
-illustrates this fact:@refill
-
-@example
-awk 'BEGIN @{
- for (x = 0; x <= 20; x++) @{
- if (x == 5)
- continue
- printf ("%d ", x)
- @}
- print ""
-@}'
-@end example
-
-@noindent
-This program prints all the numbers from 0 to 20, except for 5, for
-which the @code{printf} is skipped. Since the increment @code{x++}
-is not skipped, @code{x} does not remain stuck at 5. Contrast the
-@code{for} loop above with the @code{while} loop:
-
-@example
-awk 'BEGIN @{
- x = 0
- while (x <= 20) @{
- if (x == 5)
- continue
- printf ("%d ", x)
- x++
- @}
- print ""
-@}'
-@end example
-
-@noindent
-This program loops forever once @code{x} gets to 5.
-
-As described above, the @code{continue} statement has no meaning when
-used outside the body of a loop. However, although it was never documented,
-historical implementations of @code{awk} have treated the @code{continue}
-statement outside of a loop as if it were a @code{next} statement
-(@pxref{Next Statement, ,The @code{next} Statement}).
-By default, @code{gawk} silently supports this usage. However, if
-@samp{-W posix} has been specified on the command line
-(@pxref{Command Line, ,Invoking @code{awk}}),
-it will be treated as an error, since the @sc{posix} standard specifies
-that @code{continue} should only be used inside the body of a loop.@refill
-
-@node Next Statement, Next File Statement, Continue Statement, Statements
-@section The @code{next} Statement
-@cindex @code{next} statement
-
-The @code{next} statement forces @code{awk} to immediately stop processing
-the current record and go on to the next record. This means that no
-further rules are executed for the current record. The rest of the
-current rule's action is not executed either.
-
-Contrast this with the effect of the @code{getline} function
-(@pxref{Getline, ,Explicit Input with @code{getline}}). That too causes
-@code{awk} to read the next record immediately, but it does not alter the
-flow of control in any way. So the rest of the current action executes
-with a new input record.
-
-At the highest level, @code{awk} program execution is a loop that reads
-an input record and then tests each rule's pattern against it. If you
-think of this loop as a @code{for} statement whose body contains the
-rules, then the @code{next} statement is analogous to a @code{continue}
-statement: it skips to the end of the body of this implicit loop, and
-executes the increment (which reads another record).
-
-For example, if your @code{awk} program works only on records with four
-fields, and you don't want it to fail when given bad input, you might
-use this rule near the beginning of the program:
-
-@smallexample
-NF != 4 @{
- printf("line %d skipped: doesn't have 4 fields", FNR) > "/dev/stderr"
- next
-@}
-@end smallexample
-
-@noindent
-so that the following rules will not see the bad record. The error
-message is redirected to the standard error output stream, as error
-messages should be. @xref{Special Files, ,Standard I/O Streams}.
-
-According to the @sc{posix} standard, the behavior is undefined if
-the @code{next} statement is used in a @code{BEGIN} or @code{END} rule.
-@code{gawk} will treat it as a syntax error.
-
-If the @code{next} statement causes the end of the input to be reached,
-then the code in the @code{END} rules, if any, will be executed.
-@xref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}.
-
-@node Next File Statement, Exit Statement, Next Statement, Statements
-@section The @code{next file} Statement
-
-@cindex @code{next file} statement
-The @code{next file} statement is similar to the @code{next} statement.
-However, instead of abandoning processing of the current record, the
-@code{next file} statement instructs @code{awk} to stop processing the
-current data file.
-
-Upon execution of the @code{next file} statement, @code{FILENAME} is
-updated to the name of the next data file listed on the command line,
-@code{FNR} is reset to 1, and processing starts over with the first
-rule in the progam. @xref{Built-in Variables}.
-
-If the @code{next file} statement causes the end of the input to be reached,
-then the code in the @code{END} rules, if any, will be executed.
-@xref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}.
-
-The @code{next file} statement is a @code{gawk} extension; it is not
-(currently) available in any other @code{awk} implementation. You can
-simulate its behavior by creating a library file named @file{nextfile.awk},
-with the following contents. (This sample program uses user-defined
-functions, a feature that has not been presented yet.
-@xref{User-defined, ,User-defined Functions},
-for more information.)@refill
-
-@smallexample
-# nextfile --- function to skip remaining records in current file
-
-# this should be read in before the "main" awk program
-
-function nextfile() @{ _abandon_ = FILENAME; next @}
-
-_abandon_ == FILENAME && FNR > 1 @{ next @}
-_abandon_ == FILENAME && FNR == 1 @{ _abandon_ = "" @}
-@end smallexample
-
-The @code{nextfile} function simply sets a ``private'' variable@footnote{Since
-all variables in @code{awk} are global, this program uses the common
-practice of prefixing the variable name with an underscore. In fact, it
-also suffixes the variable name with an underscore, as extra insurance
-against using a variable name that might be used in some other library
-file.} to the name of the current data file, and then retrieves the next
-record. Since this file is read before the main @code{awk} program,
-the rules that follows the function definition will be executed before the
-rules in the main program. The first rule continues to skip records as long as
-the name of the input file has not changed, and this is not the first
-record in the file. This rule is sufficient most of the time. But what if
-the @emph{same} data file is named twice in a row on the command line?
-This rule would not process the data file the second time. The second rule
-catches this case: If the data file name is what was being skipped, but
-@code{FNR} is 1, then this is the second time the file is being processed,
-and it should not be skipped.
-
-The @code{next file} statement would be useful if you have many data
-files to process, and due to the nature of the data, you expect that you
-would not want to process every record in the file. In order to move on to
-the next data file, you would have to continue scanning the unwanted
-records (as described above). The @code{next file} statement accomplishes
-this much more efficiently.
-
-@ignore
-Would it make sense down the road to nuke `next file' in favor of
-semantics that would make this work?
-
- function nextfile() { ARGIND++ ; next }
-@end ignore
-
-@node Exit Statement, , Next File Statement, Statements
-@section The @code{exit} Statement
-
-@cindex @code{exit} statement
-The @code{exit} statement causes @code{awk} to immediately stop
-executing the current rule and to stop processing input; any remaining input
-is ignored.@refill
-
-If an @code{exit} statement is executed from a @code{BEGIN} rule the
-program stops processing everything immediately. No input records are
-read. However, if an @code{END} rule is present, it is executed
-(@pxref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}).
-
-If @code{exit} is used as part of an @code{END} rule, it causes
-the program to stop immediately.
-
-An @code{exit} statement that is part of an ordinary rule (that is, not part
-of a @code{BEGIN} or @code{END} rule) stops the execution of any further
-automatic rules, but the @code{END} rule is executed if there is one.
-If you do not want the @code{END} rule to do its job in this case, you
-can set a variable to nonzero before the @code{exit} statement, and check
-that variable in the @code{END} rule.
-
-If an argument is supplied to @code{exit}, its value is used as the exit
-status code for the @code{awk} process. If no argument is supplied,
-@code{exit} returns status zero (success).@refill
-
-For example, let's say you've discovered an error condition you really
-don't know how to handle. Conventionally, programs report this by
-exiting with a nonzero status. Your @code{awk} program can do this
-using an @code{exit} statement with a nonzero argument. Here's an
-example of this:@refill
-
-@example
-@group
-BEGIN @{
- if (("date" | getline date_now) < 0) @{
- print "Can't get system date" > "/dev/stderr"
- exit 4
- @}
-@}
-@end group
-@end example
-
-@node Arrays, Built-in, Statements, Top
-@chapter Arrays in @code{awk}
-
-An @dfn{array} is a table of values, called @dfn{elements}. The
-elements of an array are distinguished by their indices. @dfn{Indices}
-may be either numbers or strings. Each array has a name, which looks
-like a variable name, but must not be in use as a variable name in the
-same @code{awk} program.
-
-@menu
-* Array Intro:: Introduction to Arrays
-* Reference to Elements:: How to examine one element of an array.
-* Assigning Elements:: How to change an element of an array.
-* Array Example:: Basic Example of an Array
-* Scanning an Array:: A variation of the @code{for} statement.
- It loops through the indices of
- an array's existing elements.
-* Delete:: The @code{delete} statement removes
- an element from an array.
-* Numeric Array Subscripts:: How to use numbers as subscripts in @code{awk}.
-* Multi-dimensional:: Emulating multi-dimensional arrays in @code{awk}.
-* Multi-scanning:: Scanning multi-dimensional arrays.
-@end menu
-
-@node Array Intro, Reference to Elements, Arrays, Arrays
-@section Introduction to Arrays
-
-@cindex arrays
-The @code{awk} language has one-dimensional @dfn{arrays} for storing groups
-of related strings or numbers.
-
-Every @code{awk} array must have a name. Array names have the same
-syntax as variable names; any valid variable name would also be a valid
-array name. But you cannot use one name in both ways (as an array and
-as a variable) in one @code{awk} program.
-
-Arrays in @code{awk} superficially resemble arrays in other programming
-languages; but there are fundamental differences. In @code{awk}, you
-don't need to specify the size of an array before you start to use it.
-Additionally, any number or string in @code{awk} may be used as an
-array index.
-
-In most other languages, you have to @dfn{declare} an array and specify
-how many elements or components it contains. In such languages, the
-declaration causes a contiguous block of memory to be allocated for that
-many elements. An index in the array must be a positive integer; for
-example, the index 0 specifies the first element in the array, which is
-actually stored at the beginning of the block of memory. Index 1
-specifies the second element, which is stored in memory right after the
-first element, and so on. It is impossible to add more elements to the
-array, because it has room for only as many elements as you declared.
-
-A contiguous array of four elements might look like this,
-conceptually, if the element values are @code{8}, @code{"foo"},
-@code{""} and @code{30}:@refill
-
-@example
-+---------+---------+--------+---------+
-| 8 | "foo" | "" | 30 | @r{value}
-+---------+---------+--------+---------+
- 0 1 2 3 @r{index}
-@end example
-
-@noindent
-Only the values are stored; the indices are implicit from the order of
-the values. @code{8} is the value at index 0, because @code{8} appears in the
-position with 0 elements before it.
-
-@cindex arrays, definition of
-@cindex associative arrays
-Arrays in @code{awk} are different: they are @dfn{associative}. This means
-that each array is a collection of pairs: an index, and its corresponding
-array element value:
-
-@example
-@r{Element} 4 @r{Value} 30
-@r{Element} 2 @r{Value} "foo"
-@r{Element} 1 @r{Value} 8
-@r{Element} 3 @r{Value} ""
-@end example
-
-@noindent
-We have shown the pairs in jumbled order because their order is irrelevant.
-
-One advantage of an associative array is that new pairs can be added
-at any time. For example, suppose we add to the above array a tenth element
-whose value is @w{@code{"number ten"}}. The result is this:
-
-@example
-@r{Element} 10 @r{Value} "number ten"
-@r{Element} 4 @r{Value} 30
-@r{Element} 2 @r{Value} "foo"
-@r{Element} 1 @r{Value} 8
-@r{Element} 3 @r{Value} ""
-@end example
-
-@noindent
-Now the array is @dfn{sparse} (i.e., some indices are missing): it has
-elements 1--4 and 10, but doesn't have elements 5, 6, 7, 8, or 9.@refill
-
-Another consequence of associative arrays is that the indices don't
-have to be positive integers. Any number, or even a string, can be
-an index. For example, here is an array which translates words from
-English into French:
-
-@example
-@r{Element} "dog" @r{Value} "chien"
-@r{Element} "cat" @r{Value} "chat"
-@r{Element} "one" @r{Value} "un"
-@r{Element} 1 @r{Value} "un"
-@end example
-
-@noindent
-Here we decided to translate the number 1 in both spelled-out and
-numeric form---thus illustrating that a single array can have both
-numbers and strings as indices.
-
-When @code{awk} creates an array for you, e.g., with the @code{split}
-built-in function,
-that array's indices are consecutive integers starting at 1.
-(@xref{String Functions, ,Built-in Functions for String Manipulation}.)
-
-@node Reference to Elements, Assigning Elements, Array Intro, Arrays
-@section Referring to an Array Element
-@cindex array reference
-@cindex element of array
-@cindex reference to array
-
-The principal way of using an array is to refer to one of its elements.
-An array reference is an expression which looks like this:
-
-@example
-@var{array}[@var{index}]
-@end example
-
-@noindent
-Here, @var{array} is the name of an array. The expression @var{index} is
-the index of the element of the array that you want.
-
-The value of the array reference is the current value of that array
-element. For example, @code{foo[4.3]} is an expression for the element
-of array @code{foo} at index 4.3.
-
-If you refer to an array element that has no recorded value, the value
-of the reference is @code{""}, the null string. This includes elements
-to which you have not assigned any value, and elements that have been
-deleted (@pxref{Delete, ,The @code{delete} Statement}). Such a reference
-automatically creates that array element, with the null string as its value.
-(In some cases, this is unfortunate, because it might waste memory inside
-@code{awk}).
-
-@cindex arrays, presence of elements
-You can find out if an element exists in an array at a certain index with
-the expression:
-
-@example
-@var{index} in @var{array}
-@end example
-
-@noindent
-This expression tests whether or not the particular index exists,
-without the side effect of creating that element if it is not present.
-The expression has the value 1 (true) if @code{@var{array}[@var{index}]}
-exists, and 0 (false) if it does not exist.@refill
-
-For example, to test whether the array @code{frequencies} contains the
-index @code{"2"}, you could write this statement:@refill
-
-@smallexample
-if ("2" in frequencies) print "Subscript \"2\" is present."
-@end smallexample
-
-Note that this is @emph{not} a test of whether or not the array
-@code{frequencies} contains an element whose @emph{value} is @code{"2"}.
-(There is no way to do that except to scan all the elements.) Also, this
-@emph{does not} create @code{frequencies["2"]}, while the following
-(incorrect) alternative would do so:@refill
-
-@smallexample
-if (frequencies["2"] != "") print "Subscript \"2\" is present."
-@end smallexample
-
-@node Assigning Elements, Array Example, Reference to Elements, Arrays
-@section Assigning Array Elements
-@cindex array assignment
-@cindex element assignment
-
-Array elements are lvalues: they can be assigned values just like
-@code{awk} variables:
-
-@example
-@var{array}[@var{subscript}] = @var{value}
-@end example
-
-@noindent
-Here @var{array} is the name of your array. The expression
-@var{subscript} is the index of the element of the array that you want
-to assign a value. The expression @var{value} is the value you are
-assigning to that element of the array.@refill
-
-@node Array Example, Scanning an Array, Assigning Elements, Arrays
-@section Basic Example of an Array
-
-The following program takes a list of lines, each beginning with a line
-number, and prints them out in order of line number. The line numbers are
-not in order, however, when they are first read: they are scrambled. This
-program sorts the lines by making an array using the line numbers as
-subscripts. It then prints out the lines in sorted order of their numbers.
-It is a very simple program, and gets confused if it encounters repeated
-numbers, gaps, or lines that don't begin with a number.@refill
-
-@example
-@{
- if ($1 > max)
- max = $1
- arr[$1] = $0
-@}
-
-END @{
- for (x = 1; x <= max; x++)
- print arr[x]
-@}
-@end example
-
-The first rule keeps track of the largest line number seen so far;
-it also stores each line into the array @code{arr}, at an index that
-is the line's number.
-
-The second rule runs after all the input has been read, to print out
-all the lines.
-
-When this program is run with the following input:
-
-@example
-5 I am the Five man
-2 Who are you? The new number two!
-4 . . . And four on the floor
-1 Who is number one?
-3 I three you.
-@end example
-
-@noindent
-its output is this:
-
-@example
-1 Who is number one?
-2 Who are you? The new number two!
-3 I three you.
-4 . . . And four on the floor
-5 I am the Five man
-@end example
-
-If a line number is repeated, the last line with a given number overrides
-the others.
-
-Gaps in the line numbers can be handled with an easy improvement to the
-program's @code{END} rule:
-
-@example
-END @{
- for (x = 1; x <= max; x++)
- if (x in arr)
- print arr[x]
-@}
-@end example
-
-@node Scanning an Array, Delete, Array Example, Arrays
-@section Scanning all Elements of an Array
-@cindex @code{for (x in @dots{})}
-@cindex arrays, special @code{for} statement
-@cindex scanning an array
-
-In programs that use arrays, often you need a loop that executes
-once for each element of an array. In other languages, where arrays are
-contiguous and indices are limited to positive integers, this is
-easy: the largest index is one less than the length of the array, and you can
-find all the valid indices by counting from zero up to that value. This
-technique won't do the job in @code{awk}, since any number or string
-may be an array index. So @code{awk} has a special kind of @code{for}
-statement for scanning an array:
-
-@example
-for (@var{var} in @var{array})
- @var{body}
-@end example
-
-@noindent
-This loop executes @var{body} once for each different value that your
-program has previously used as an index in @var{array}, with the
-variable @var{var} set to that index.@refill
-
-Here is a program that uses this form of the @code{for} statement. The
-first rule scans the input records and notes which words appear (at
-least once) in the input, by storing a 1 into the array @code{used} with
-the word as index. The second rule scans the elements of @code{used} to
-find all the distinct words that appear in the input. It prints each
-word that is more than 10 characters long, and also prints the number of
-such words. @xref{Built-in, ,Built-in Functions}, for more information
-on the built-in function @code{length}.
-
-@smallexample
-# Record a 1 for each word that is used at least once.
-@{
- for (i = 1; i <= NF; i++)
- used[$i] = 1
-@}
-
-# Find number of distinct words more than 10 characters long.
-END @{
- for (x in used)
- if (length(x) > 10) @{
- ++num_long_words
- print x
- @}
- print num_long_words, "words longer than 10 characters"
-@}
-@end smallexample
-
-@noindent
-@xref{Sample Program}, for a more detailed example of this type.
-
-The order in which elements of the array are accessed by this statement
-is determined by the internal arrangement of the array elements within
-@code{awk} and cannot be controlled or changed. This can lead to
-problems if new elements are added to @var{array} by statements in
-@var{body}; you cannot predict whether or not the @code{for} loop will
-reach them. Similarly, changing @var{var} inside the loop can produce
-strange results. It is best to avoid such things.@refill
-
-@node Delete, Numeric Array Subscripts, Scanning an Array, Arrays
-@section The @code{delete} Statement
-@cindex @code{delete} statement
-@cindex deleting elements of arrays
-@cindex removing elements of arrays
-@cindex arrays, deleting an element
-
-You can remove an individual element of an array using the @code{delete}
-statement:
-
-@example
-delete @var{array}[@var{index}]
-@end example
-
-You can not refer to an array element after it has been deleted;
-it is as if you had never referred
-to it and had never given it any value. You can no longer obtain any
-value the element once had.
-
-Here is an example of deleting elements in an array:
-
-@example
-for (i in frequencies)
- delete frequencies[i]
-@end example
-
-@noindent
-This example removes all the elements from the array @code{frequencies}.
-
-If you delete an element, a subsequent @code{for} statement to scan the array
-will not report that element, and the @code{in} operator to check for
-the presence of that element will return 0:
-
-@example
-delete foo[4]
-if (4 in foo)
- print "This will never be printed"
-@end example
-
-It is not an error to delete an element which does not exist.
-
-@node Numeric Array Subscripts, Multi-dimensional, Delete, Arrays
-@section Using Numbers to Subscript Arrays
-
-An important aspect of arrays to remember is that array subscripts
-are @emph{always} strings. If you use a numeric value as a subscript,
-it will be converted to a string value before it is used for subscripting
-(@pxref{Conversion, ,Conversion of Strings and Numbers}).
-
-@cindex conversions, during subscripting
-@cindex numbers, used as subscripts
-@vindex CONVFMT
-This means that the value of the @code{CONVFMT} can potentially
-affect how your program accesses elements of an array. For example:
-
-@example
-a = b = 12.153
-data[a] = 1
-CONVFMT = "%2.2f"
-if (b in data)
- printf "%s is in data", b
-else
- printf "%s is not in data", b
-@end example
-
-@noindent
-should print @samp{12.15 is not in data}. The first statement gives
-both @code{a} and @code{b} the same numeric value. Assigning to
-@code{data[a]} first gives @code{a} the string value @code{"12.153"}
-(using the default conversion value of @code{CONVFMT}, @code{"%.6g"}),
-and then assigns 1 to @code{data["12.153"]}. The program then changes
-the value of @code{CONVFMT}. The test @samp{(b in data)} forces @code{b}
-to be converted to a string, this time @code{"12.15"}, since the value of
-@code{CONVFMT} only allows two significant digits. This test fails,
-since @code{"12.15"} is a different string from @code{"12.153"}.@refill
-
-According to the rules for conversions
-(@pxref{Conversion, ,Conversion of Strings and Numbers}), integer
-values are always converted to strings as integers, no matter what the
-value of @code{CONVFMT} may happen to be. So the usual case of@refill
-
-@example
-for (i = 1; i <= maxsub; i++)
- @i{do something with} array[i]
-@end example
-
-@noindent
-will work, no matter what the value of @code{CONVFMT}.
-
-Like many things in @code{awk}, the majority of the time things work
-as you would expect them to work. But it is useful to have a precise
-knowledge of the actual rules, since sometimes they can have a subtle
-effect on your programs.
-
-@node Multi-dimensional, Multi-scanning, Numeric Array Subscripts, Arrays
-@section Multi-dimensional Arrays
-
-@c the following index entry is an overfull hbox. --mew 30jan1992
-@cindex subscripts in arrays
-@cindex arrays, multi-dimensional subscripts
-@cindex multi-dimensional subscripts
-A multi-dimensional array is an array in which an element is identified
-by a sequence of indices, not a single index. For example, a
-two-dimensional array requires two indices. The usual way (in most
-languages, including @code{awk}) to refer to an element of a
-two-dimensional array named @code{grid} is with
-@code{grid[@var{x},@var{y}]}.
-
-@vindex SUBSEP
-Multi-dimensional arrays are supported in @code{awk} through
-concatenation of indices into one string. What happens is that
-@code{awk} converts the indices into strings
-(@pxref{Conversion, ,Conversion of Strings and Numbers}) and
-concatenates them together, with a separator between them. This creates
-a single string that describes the values of the separate indices. The
-combined string is used as a single index into an ordinary,
-one-dimensional array. The separator used is the value of the built-in
-variable @code{SUBSEP}.@refill
-
-For example, suppose we evaluate the expression @code{foo[5,12]="value"}
-when the value of @code{SUBSEP} is @code{"@@"}. The numbers 5 and 12 are
-converted to strings and
-concatenated with an @samp{@@} between them, yielding @code{"5@@12"}; thus,
-the array element @code{foo["5@@12"]} is set to @code{"value"}.@refill
-
-Once the element's value is stored, @code{awk} has no record of whether
-it was stored with a single index or a sequence of indices. The two
-expressions @code{foo[5,12]} and @w{@code{foo[5 SUBSEP 12]}} always have
-the same value.
-
-The default value of @code{SUBSEP} is the string @code{"\034"},
-which contains a nonprinting character that is unlikely to appear in an
-@code{awk} program or in the input data.
-
-The usefulness of choosing an unlikely character comes from the fact
-that index values that contain a string matching @code{SUBSEP} lead to
-combined strings that are ambiguous. Suppose that @code{SUBSEP} were
-@code{"@@"}; then @w{@code{foo["a@@b", "c"]}} and @w{@code{foo["a",
-"b@@c"]}} would be indistinguishable because both would actually be
-stored as @code{foo["a@@b@@c"]}. Because @code{SUBSEP} is
-@code{"\034"}, such confusion can arise only when an index
-contains the character with ASCII code 034, which is a rare
-event.@refill
-
-You can test whether a particular index-sequence exists in a
-``multi-dimensional'' array with the same operator @code{in} used for single
-dimensional arrays. Instead of a single index as the left-hand operand,
-write the whole sequence of indices, separated by commas, in
-parentheses:@refill
-
-@example
-(@var{subscript1}, @var{subscript2}, @dots{}) in @var{array}
-@end example
-
-The following example treats its input as a two-dimensional array of
-fields; it rotates this array 90 degrees clockwise and prints the
-result. It assumes that all lines have the same number of
-elements.
-
-@example
-awk '@{
- if (max_nf < NF)
- max_nf = NF
- max_nr = NR
- for (x = 1; x <= NF; x++)
- vector[x, NR] = $x
-@}
-
-END @{
- for (x = 1; x <= max_nf; x++) @{
- for (y = max_nr; y >= 1; --y)
- printf("%s ", vector[x, y])
- printf("\n")
- @}
-@}'
-@end example
-
-@noindent
-When given the input:
-
-@example
-@group
-1 2 3 4 5 6
-2 3 4 5 6 1
-3 4 5 6 1 2
-4 5 6 1 2 3
-@end group
-@end example
-
-@noindent
-it produces:
-
-@example
-@group
-4 3 2 1
-5 4 3 2
-6 5 4 3
-1 6 5 4
-2 1 6 5
-3 2 1 6
-@end group
-@end example
-
-@node Multi-scanning, , Multi-dimensional, Arrays
-@section Scanning Multi-dimensional Arrays
-
-There is no special @code{for} statement for scanning a
-``multi-dimensional'' array; there cannot be one, because in truth there
-are no multi-dimensional arrays or elements; there is only a
-multi-dimensional @emph{way of accessing} an array.
-
-However, if your program has an array that is always accessed as
-multi-dimensional, you can get the effect of scanning it by combining
-the scanning @code{for} statement
-(@pxref{Scanning an Array, ,Scanning all Elements of an Array}) with the
-@code{split} built-in function
-(@pxref{String Functions, ,Built-in Functions for String Manipulation}).
-It works like this:@refill
-
-@example
-for (combined in @var{array}) @{
- split(combined, separate, SUBSEP)
- @dots{}
-@}
-@end example
-
-@noindent
-This finds each concatenated, combined index in the array, and splits it
-into the individual indices by breaking it apart where the value of
-@code{SUBSEP} appears. The split-out indices become the elements of
-the array @code{separate}.
-
-Thus, suppose you have previously stored in @code{@var{array}[1,
-"foo"]}; then an element with index @code{"1\034foo"} exists in
-@var{array}. (Recall that the default value of @code{SUBSEP} contains
-the character with code 034.) Sooner or later the @code{for} statement
-will find that index and do an iteration with @code{combined} set to
-@code{"1\034foo"}. Then the @code{split} function is called as
-follows:
-
-@example
-split("1\034foo", separate, "\034")
-@end example
-
-@noindent
-The result of this is to set @code{separate[1]} to 1 and @code{separate[2]}
-to @code{"foo"}. Presto, the original sequence of separate indices has
-been recovered.
-
-@node Built-in, User-defined, Arrays, Top
-@chapter Built-in Functions
-
-@cindex built-in functions
-@dfn{Built-in} functions are functions that are always available for
-your @code{awk} program to call. This chapter defines all the built-in
-functions in @code{awk}; some of them are mentioned in other sections,
-but they are summarized here for your convenience. (You can also define
-new functions yourself. @xref{User-defined, ,User-defined Functions}.)
-
-@menu
-* Calling Built-in:: How to call built-in functions.
-* Numeric Functions:: Functions that work with numbers,
- including @code{int}, @code{sin} and @code{rand}.
-* String Functions:: Functions for string manipulation,
- such as @code{split}, @code{match}, and @code{sprintf}.
-* I/O Functions:: Functions for files and shell commands.
-* Time Functions:: Functions for dealing with time stamps.
-@end menu
-
-@node Calling Built-in, Numeric Functions, Built-in, Built-in
-@section Calling Built-in Functions
-
-To call a built-in function, write the name of the function followed
-by arguments in parentheses. For example, @code{atan2(y + z, 1)}
-is a call to the function @code{atan2}, with two arguments.
-
-Whitespace is ignored between the built-in function name and the
-open-parenthesis, but we recommend that you avoid using whitespace
-there. User-defined functions do not permit whitespace in this way, and
-you will find it easier to avoid mistakes by following a simple
-convention which always works: no whitespace after a function name.
-
-Each built-in function accepts a certain number of arguments. In most
-cases, any extra arguments given to built-in functions are ignored. The
-defaults for omitted arguments vary from function to function and are
-described under the individual functions.
-
-When a function is called, expressions that create the function's actual
-parameters are evaluated completely before the function call is performed.
-For example, in the code fragment:
-
-@example
-i = 4
-j = sqrt(i++)
-@end example
-
-@noindent
-the variable @code{i} is set to 5 before @code{sqrt} is called
-with a value of 4 for its actual parameter.
-
-@node Numeric Functions, String Functions, Calling Built-in, Built-in
-@section Numeric Built-in Functions
-@c I didn't make all the examples small because a couple of them were
-@c short already. --mew 29jan1992
-
-Here is a full list of built-in functions that work with numbers:
-
-@table @code
-@item int(@var{x})
-This gives you the integer part of @var{x}, truncated toward 0. This
-produces the nearest integer to @var{x}, located between @var{x} and 0.
-
-For example, @code{int(3)} is 3, @code{int(3.9)} is 3, @code{int(-3.9)}
-is @minus{}3, and @code{int(-3)} is @minus{}3 as well.@refill
-
-@item sqrt(@var{x})
-This gives you the positive square root of @var{x}. It reports an error
-if @var{x} is negative. Thus, @code{sqrt(4)} is 2.@refill
-
-@item exp(@var{x})
-This gives you the exponential of @var{x}, or reports an error if
-@var{x} is out of range. The range of values @var{x} can have depends
-on your machine's floating point representation.@refill
-
-@item log(@var{x})
-This gives you the natural logarithm of @var{x}, if @var{x} is positive;
-otherwise, it reports an error.@refill
-
-@item sin(@var{x})
-This gives you the sine of @var{x}, with @var{x} in radians.
-
-@item cos(@var{x})
-This gives you the cosine of @var{x}, with @var{x} in radians.
-
-@item atan2(@var{y}, @var{x})
-This gives you the arctangent of @code{@var{y} / @var{x}} in radians.
-
-@item rand()
-This gives you a random number. The values of @code{rand} are
-uniformly-distributed between 0 and 1. The value is never 0 and never
-1.
-
-Often you want random integers instead. Here is a user-defined function
-you can use to obtain a random nonnegative integer less than @var{n}:
-
-@example
-function randint(n) @{
- return int(n * rand())
-@}
-@end example
-
-@noindent
-The multiplication produces a random real number greater than 0 and less
-than @var{n}. We then make it an integer (using @code{int}) between 0
-and @code{@var{n} @minus{} 1}.
-
-Here is an example where a similar function is used to produce
-random integers between 1 and @var{n}. Note that this program will
-print a new random number for each input record.
-
-@smallexample
-awk '
-# Function to roll a simulated die.
-function roll(n) @{ return 1 + int(rand() * n) @}
-
-# Roll 3 six-sided dice and print total number of points.
-@{
- printf("%d points\n", roll(6)+roll(6)+roll(6))
-@}'
-@end smallexample
-
-@strong{Note:} @code{rand} starts generating numbers from the same
-point, or @dfn{seed}, each time you run @code{awk}. This means that
-a program will produce the same results each time you run it.
-The numbers are random within one @code{awk} run, but predictable
-from run to run. This is convenient for debugging, but if you want
-a program to do different things each time it is used, you must change
-the seed to a value that will be different in each run. To do this,
-use @code{srand}.
-
-@item srand(@var{x})
-The function @code{srand} sets the starting point, or @dfn{seed},
-for generating random numbers to the value @var{x}.
-
-Each seed value leads to a particular sequence of ``random'' numbers.
-Thus, if you set the seed to the same value a second time, you will get
-the same sequence of ``random'' numbers again.
-
-If you omit the argument @var{x}, as in @code{srand()}, then the current
-date and time of day are used for a seed. This is the way to get random
-numbers that are truly unpredictable.
-
-The return value of @code{srand} is the previous seed. This makes it
-easy to keep track of the seeds for use in consistently reproducing
-sequences of random numbers.
-@end table
-
-@node String Functions, I/O Functions, Numeric Functions, Built-in
-@section Built-in Functions for String Manipulation
-
-The functions in this section look at or change the text of one or more
-strings.
-
-@table @code
-@item index(@var{in}, @var{find})
-@findex match
-This searches the string @var{in} for the first occurrence of the string
-@var{find}, and returns the position in characters where that occurrence
-begins in the string @var{in}. For example:@refill
-
-@smallexample
-awk 'BEGIN @{ print index("peanut", "an") @}'
-@end smallexample
-
-@noindent
-prints @samp{3}. If @var{find} is not found, @code{index} returns 0.
-(Remember that string indices in @code{awk} start at 1.)
-
-@item length(@var{string})
-@findex length
-This gives you the number of characters in @var{string}. If
-@var{string} is a number, the length of the digit string representing
-that number is returned. For example, @code{length("abcde")} is 5. By
-contrast, @code{length(15 * 35)} works out to 3. How? Well, 15 * 35 =
-525, and 525 is then converted to the string @samp{"525"}, which has
-three characters.
-
-If no argument is supplied, @code{length} returns the length of @code{$0}.
-
-In older versions of @code{awk}, you could call the @code{length} function
-without any parentheses. Doing so is marked as ``deprecated'' in the
-@sc{posix} standard. This means that while you can do this in your
-programs, it is a feature that can eventually be removed from a future
-version of the standard. Therefore, for maximal portability of your
-@code{awk} programs you should always supply the parentheses.
-
-@item match(@var{string}, @var{regexp})
-@findex match
-The @code{match} function searches the string, @var{string}, for the
-longest, leftmost substring matched by the regular expression,
-@var{regexp}. It returns the character position, or @dfn{index}, of
-where that substring begins (1, if it starts at the beginning of
-@var{string}). If no match if found, it returns 0.
-
-@vindex RSTART
-@vindex RLENGTH
-The @code{match} function sets the built-in variable @code{RSTART} to
-the index. It also sets the built-in variable @code{RLENGTH} to the
-length in characters of the matched substring. If no match is found,
-@code{RSTART} is set to 0, and @code{RLENGTH} to @minus{}1.
-
-For example:
-
-@smallexample
-awk '@{
- if ($1 == "FIND")
- regex = $2
- else @{
- where = match($0, regex)
- if (where)
- print "Match of", regex, "found at", where, "in", $0
- @}
-@}'
-@end smallexample
-
-@noindent
-This program looks for lines that match the regular expression stored in
-the variable @code{regex}. This regular expression can be changed. If the
-first word on a line is @samp{FIND}, @code{regex} is changed to be the
-second word on that line. Therefore, given:
-
-@smallexample
-FIND fo*bar
-My program was a foobar
-But none of it would doobar
-FIND Melvin
-JF+KM
-This line is property of The Reality Engineering Co.
-This file created by Melvin.
-@end smallexample
-
-@noindent
-@code{awk} prints:
-
-@smallexample
-Match of fo*bar found at 18 in My program was a foobar
-Match of Melvin found at 26 in This file created by Melvin.
-@end smallexample
-
-@item split(@var{string}, @var{array}, @var{fieldsep})
-@findex split
-This divides @var{string} into pieces separated by @var{fieldsep},
-and stores the pieces in @var{array}. The first piece is stored in
-@code{@var{array}[1]}, the second piece in @code{@var{array}[2]}, and so
-forth. The string value of the third argument, @var{fieldsep}, is
-a regexp describing where to split @var{string} (much as @code{FS} can
-be a regexp describing where to split input records). If
-the @var{fieldsep} is omitted, the value of @code{FS} is used.
-@code{split} returns the number of elements created.@refill
-
-The @code{split} function, then, splits strings into pieces in a
-manner similar to the way input lines are split into fields. For example:
-
-@smallexample
-split("auto-da-fe", a, "-")
-@end smallexample
-
-@noindent
-splits the string @samp{auto-da-fe} into three fields using @samp{-} as the
-separator. It sets the contents of the array @code{a} as follows:
-
-@smallexample
-a[1] = "auto"
-a[2] = "da"
-a[3] = "fe"
-@end smallexample
-
-@noindent
-The value returned by this call to @code{split} is 3.
-
-As with input field-splitting, when the value of @var{fieldsep} is
-@code{" "}, leading and trailing whitespace is ignored, and the elements
-are separated by runs of whitespace.
-
-@item sprintf(@var{format}, @var{expression1},@dots{})
-@findex sprintf
-This returns (without printing) the string that @code{printf} would
-have printed out with the same arguments
-(@pxref{Printf, ,Using @code{printf} Statements for Fancier Printing}).
-For example:@refill
-
-@smallexample
-sprintf("pi = %.2f (approx.)", 22/7)
-@end smallexample
-
-@noindent
-returns the string @w{@code{"pi = 3.14 (approx.)"}}.
-
-@item sub(@var{regexp}, @var{replacement}, @var{target})
-@findex sub
-The @code{sub} function alters the value of @var{target}.
-It searches this value, which should be a string, for the
-leftmost substring matched by the regular expression, @var{regexp},
-extending this match as far as possible. Then the entire string is
-changed by replacing the matched text with @var{replacement}.
-The modified string becomes the new value of @var{target}.
-
-This function is peculiar because @var{target} is not simply
-used to compute a value, and not just any expression will do: it
-must be a variable, field or array reference, so that @code{sub} can
-store a modified value there. If this argument is omitted, then the
-default is to use and alter @code{$0}.
-
-For example:@refill
-
-@smallexample
-str = "water, water, everywhere"
-sub(/at/, "ith", str)
-@end smallexample
-
-@noindent
-sets @code{str} to @w{@code{"wither, water, everywhere"}}, by replacing the
-leftmost, longest occurrence of @samp{at} with @samp{ith}.
-
-The @code{sub} function returns the number of substitutions made (either
-one or zero).
-
-If the special character @samp{&} appears in @var{replacement}, it
-stands for the precise substring that was matched by @var{regexp}. (If
-the regexp can match more than one string, then this precise substring
-may vary.) For example:@refill
-
-@smallexample
-awk '@{ sub(/candidate/, "& and his wife"); print @}'
-@end smallexample
-
-@noindent
-changes the first occurrence of @samp{candidate} to @samp{candidate
-and his wife} on each input line.
-
-Here is another example:
-
-@smallexample
-awk 'BEGIN @{
- str = "daabaaa"
- sub(/a*/, "c&c", str)
- print str
-@}'
-@end smallexample
-
-@noindent
-prints @samp{dcaacbaaa}. This show how @samp{&} can represent a non-constant
-string, and also illustrates the ``leftmost, longest'' rule.
-
-The effect of this special character (@samp{&}) can be turned off by putting a
-backslash before it in the string. As usual, to insert one backslash in
-the string, you must write two backslashes. Therefore, write @samp{\\&}
-in a string constant to include a literal @samp{&} in the replacement.
-For example, here is how to replace the first @samp{|} on each line with
-an @samp{&}:@refill
-
-@smallexample
-awk '@{ sub(/\|/, "\\&"); print @}'
-@end smallexample
-
-@strong{Note:} as mentioned above, the third argument to @code{sub} must
-be an lvalue. Some versions of @code{awk} allow the third argument to
-be an expression which is not an lvalue. In such a case, @code{sub}
-would still search for the pattern and return 0 or 1, but the result of
-the substitution (if any) would be thrown away because there is no place
-to put it. Such versions of @code{awk} accept expressions like
-this:@refill
-
-@smallexample
-sub(/USA/, "United States", "the USA and Canada")
-@end smallexample
-
-@noindent
-But that is considered erroneous in @code{gawk}.
-
-@item gsub(@var{regexp}, @var{replacement}, @var{target})
-@findex gsub
-This is similar to the @code{sub} function, except @code{gsub} replaces
-@emph{all} of the longest, leftmost, @emph{nonoverlapping} matching
-substrings it can find. The @samp{g} in @code{gsub} stands for
-``global,'' which means replace everywhere. For example:@refill
-
-@smallexample
-awk '@{ gsub(/Britain/, "United Kingdom"); print @}'
-@end smallexample
-
-@noindent
-replaces all occurrences of the string @samp{Britain} with @samp{United
-Kingdom} for all input records.@refill
-
-The @code{gsub} function returns the number of substitutions made. If
-the variable to be searched and altered, @var{target}, is
-omitted, then the entire input record, @code{$0}, is used.@refill
-
-As in @code{sub}, the characters @samp{&} and @samp{\} are special, and
-the third argument must be an lvalue.
-
-@item substr(@var{string}, @var{start}, @var{length})
-@findex substr
-This returns a @var{length}-character-long substring of @var{string},
-starting at character number @var{start}. The first character of a
-string is character number one. For example,
-@code{substr("washington", 5, 3)} returns @code{"ing"}.@refill
-
-If @var{length} is not present, this function returns the whole suffix of
-@var{string} that begins at character number @var{start}. For example,
-@code{substr("washington", 5)} returns @code{"ington"}. This is also
-the case if @var{length} is greater than the number of characters remaining
-in the string, counting from character number @var{start}.
-
-@item tolower(@var{string})
-@findex tolower
-This returns a copy of @var{string}, with each upper-case character
-in the string replaced with its corresponding lower-case character.
-Nonalphabetic characters are left unchanged. For example,
-@code{tolower("MiXeD cAsE 123")} returns @code{"mixed case 123"}.
-
-@item toupper(@var{string})
-@findex toupper
-This returns a copy of @var{string}, with each lower-case character
-in the string replaced with its corresponding upper-case character.
-Nonalphabetic characters are left unchanged. For example,
-@code{toupper("MiXeD cAsE 123")} returns @code{"MIXED CASE 123"}.
-@end table
-
-@node I/O Functions, Time Functions, String Functions, Built-in
-@section Built-in Functions for Input/Output
-
-@table @code
-@item close(@var{filename})
-Close the file @var{filename}, for input or output. The argument may
-alternatively be a shell command that was used for redirecting to or
-from a pipe; then the pipe is closed.
-
-@xref{Close Input, ,Closing Input Files and Pipes}, regarding closing
-input files and pipes. @xref{Close Output, ,Closing Output Files and Pipes},
-regarding closing output files and pipes.@refill
-
-@item system(@var{command})
-@findex system
-@c the following index entry is an overfull hbox. --mew 30jan1992
-@cindex interaction, @code{awk} and other programs
-The system function allows the user to execute operating system commands
-and then return to the @code{awk} program. The @code{system} function
-executes the command given by the string @var{command}. It returns, as
-its value, the status returned by the command that was executed.
-
-For example, if the following fragment of code is put in your @code{awk}
-program:
-
-@smallexample
-END @{
- system("mail -s 'awk run done' operator < /dev/null")
-@}
-@end smallexample
-
-@noindent
-the system operator will be sent mail when the @code{awk} program
-finishes processing input and begins its end-of-input processing.
-
-Note that much the same result can be obtained by redirecting
-@code{print} or @code{printf} into a pipe. However, if your @code{awk}
-program is interactive, @code{system} is useful for cranking up large
-self-contained programs, such as a shell or an editor.@refill
-
-Some operating systems cannot implement the @code{system} function.
-@code{system} causes a fatal error if it is not supported.
-@end table
-
-@c fakenode --- for prepinfo
-@subheading Controlling Output Buffering with @code{system}
-@cindex flushing buffers
-@cindex buffers, flushing
-@cindex buffering output
-@cindex output, buffering
-
-Many utility programs will @dfn{buffer} their output; they save information
-to be written to a disk file or terminal in memory, until there is enough
-to be written in one operation. This is often more efficient than writing
-every little bit of information as soon as it is ready. However, sometimes
-it is necessary to force a program to @dfn{flush} its buffers; that is,
-write the information to its destination, even if a buffer is not full.
-You can do this from your @code{awk} program by calling @code{system}
-with a null string as its argument:
-
-@example
-system("") # flush output
-@end example
-
-@noindent
-@code{gawk} treats this use of the @code{system} function as a special
-case, and is smart enough not to run a shell (or other command
-interpreter) with the empty command. Therefore, with @code{gawk}, this
-idiom is not only useful, it is efficient. While this idiom should work
-with other @code{awk} implementations, it will not necessarily avoid
-starting an unnecessary shell.
-@ignore
-Need a better explanation, perhaps in a separate paragraph. Explain that
-for
-
-awk 'BEGIN { print "hi"
- system("echo hello")
- print "howdy" }'
-
-that the output had better be
-
- hi
- hello
- howdy
-
-and not
-
- hello
- hi
- howdy
-
-which it would be if awk did not flush its buffers before calling system.
-@end ignore
-
-@node Time Functions, , I/O Functions, Built-in
-@section Functions for Dealing with Time Stamps
-
-@cindex time stamps
-@cindex time of day
-A common use for @code{awk} programs is the processing of log files.
-Log files often contain time stamp information, indicating when a
-particular log record was written. Many programs log their time stamp
-in the form returned by the @code{time} system call, which is the
-number of seconds since a particular epoch. On @sc{posix} systems,
-it is the number of seconds since Midnight, January 1, 1970, @sc{utc}.
-
-In order to make it easier to process such log files, and to easily produce
-useful reports, @code{gawk} provides two functions for working with time
-stamps. Both of these are @code{gawk} extensions; they are not specified
-in the @sc{posix} standard, nor are they in any other known version
-of @code{awk}.
-
-@table @code
-@item systime()
-@findex systime
-This function returns the current time as the number of seconds since
-the system epoch. On @sc{posix} systems, this is the number of seconds
-since Midnight, January 1, 1970, @sc{utc}. It may be a different number on
-other systems.
-
-@item strftime(@var{format}, @var{timestamp})
-@findex strftime
-This function returns a string. It is similar to the function of the
-same name in the @sc{ansi} C standard library. The time specified by
-@var{timestamp} is used to produce a string, based on the contents
-of the @var{format} string.
-@end table
-
-The @code{systime} function allows you to compare a time stamp from a
-log file with the current time of day. In particular, it is easy to
-determine how long ago a particular record was logged. It also allows
-you to produce log records using the ``seconds since the epoch'' format.
-
-The @code{strftime} function allows you to easily turn a time stamp
-into human-readable information. It is similar in nature to the @code{sprintf}
-function, copying non-format specification characters verbatim to the
-returned string, and substituting date and time values for format
-specifications in the @var{format} string. If no @var{timestamp} argument
-is supplied, @code{gawk} will use the current time of day as the
-time stamp.@refill
-
-@code{strftime} is guaranteed by the @sc{ansi} C standard to support
-the following date format specifications:
-
-@table @code
-@item %a
-The locale's abbreviated weekday name.
-
-@item %A
-The locale's full weekday name.
-
-@item %b
-The locale's abbreviated month name.
-
-@item %B
-The locale's full month name.
-
-@item %c
-The locale's ``appropriate'' date and time representation.
-
-@item %d
-The day of the month as a decimal number (01--31).
-
-@item %H
-The hour (24-hour clock) as a decimal number (00--23).
-
-@item %I
-The hour (12-hour clock) as a decimal number (01--12).
-
-@item %j
-The day of the year as a decimal number (001--366).
-
-@item %m
-The month as a decimal number (01--12).
-
-@item %M
-The minute as a decimal number (00--59).
-
-@item %p
-The locale's equivalent of the AM/PM designations associated
-with a 12-hour clock.
-
-@item %S
-The second as a decimal number (00--61). (Occasionally there are
-minutes in a year with one or two leap seconds, which is why the
-seconds can go from 0 all the way to 61.)
-
-@item %U
-The week number of the year (the first Sunday as the first day of week 1)
-as a decimal number (00--53).
-
-@item %w
-The weekday as a decimal number (0--6). Sunday is day 0.
-
-@item %W
-The week number of the year (the first Monday as the first day of week 1)
-as a decimal number (00--53).
-
-@item %x
-The locale's ``appropriate'' date representation.
-
-@item %X
-The locale's ``appropriate'' time representation.
-
-@item %y
-The year without century as a decimal number (00--99).
-
-@item %Y
-The year with century as a decimal number.
-
-@item %Z
-The time zone name or abbreviation, or no characters if
-no time zone is determinable.
-
-@item %%
-A literal @samp{%}.
-@end table
-
-@c The parenthetical remark here should really be a footnote, but
-@c it gave formatting problems at the FSF. So for now put it in
-@c parentheses.
-If a conversion specifier is not one of the above, the behavior is
-undefined. (This is because the @sc{ansi} standard for C leaves the
-behavior of the C version of @code{strftime} undefined, and @code{gawk}
-will use the system's version of @code{strftime} if it's there.
-Typically, the conversion specifier will either not appear in the
-returned string, or it will appear literally.)
-
-Informally, a @dfn{locale} is the geographic place in which a program
-is meant to run. For example, a common way to abbreviate the date
-September 4, 1991 in the United States would be ``9/4/91''.
-In many countries in Europe, however, it would be abbreviated ``4.9.91''.
-Thus, the @samp{%x} specification in a @code{"US"} locale might produce
-@samp{9/4/91}, while in a @code{"EUROPE"} locale, it might produce
-@samp{4.9.91}. The @sc{ansi} C standard defines a default @code{"C"}
-locale, which is an environment that is typical of what most C programmers
-are used to.
-
-A public-domain C version of @code{strftime} is shipped with @code{gawk}
-for systems that are not yet fully @sc{ansi}-compliant. If that version is
-used to compile @code{gawk} (@pxref{Installation, ,Installing @code{gawk}}),
-then the following additional format specifications are available:@refill
-
-@table @code
-@item %D
-Equivalent to specifying @samp{%m/%d/%y}.
-
-@item %e
-The day of the month, padded with a blank if it is only one digit.
-
-@item %h
-Equivalent to @samp{%b}, above.
-
-@item %n
-A newline character (ASCII LF).
-
-@item %r
-Equivalent to specifying @samp{%I:%M:%S %p}.
-
-@item %R
-Equivalent to specifying @samp{%H:%M}.
-
-@item %T
-Equivalent to specifying @samp{%H:%M:%S}.
-
-@item %t
-A TAB character.
-
-@item %k
-is replaced by the hour (24-hour clock) as a decimal number (0-23).
-Single digit numbers are padded with a blank.
-
-@item %l
-is replaced by the hour (12-hour clock) as a decimal number (1-12).
-Single digit numbers are padded with a blank.
-
-@item %C
-The century, as a number between 00 and 99.
-
-@item %u
-is replaced by the weekday as a decimal number
-[1 (Monday)--7].
-
-@item %V
-is replaced by the week number of the year (the first Monday as the first
-day of week 1) as a decimal number (01--53).
-The method for determining the week number is as specified by ISO 8601
-(to wit: if the week containing January 1 has four or more days in the
-new year, then it is week 1, otherwise it is week 53 of the previous year
-and the next week is week 1).@refill
-
-@item %Ec %EC %Ex %Ey %EY %Od %Oe %OH %OI
-@itemx %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy
-These are ``alternate representations'' for the specifications
-that use only the second letter (@samp{%c}, @samp{%C}, and so on).
-They are recognized, but their normal representations are used.
-(These facilitate compliance with the @sc{posix} @code{date}
-utility.)@refill
-
-@item %v
-The date in VMS format (e.g. 20-JUN-1991).
-@end table
-
-Here are two examples that use @code{strftime}. The first is an
-@code{awk} version of the C @code{ctime} function. (This is a
-user defined function, which we have not discussed yet.
-@xref{User-defined, ,User-defined Functions}, for more information.)
-
-@smallexample
-# ctime.awk
-#
-# awk version of C ctime(3) function
-
-function ctime(ts, format)
-@{
- format = "%a %b %e %H:%M:%S %Z %Y"
- if (ts == 0)
- ts = systime() # use current time as default
- return strftime(format, ts)
-@}
-@end smallexample
-
-This next example is an @code{awk} implementation of the @sc{posix}
-@code{date} utility. Normally, the @code{date} utility prints the
-current date and time of day in a well known format. However, if you
-provide an argument to it that begins with a @samp{+}, @code{date}
-will copy non-format specifier characters to the standard output, and
-will interpret the current time according to the format specifiers in
-the string. For example:
-
-@smallexample
-date '+Today is %A, %B %d, %Y.'
-@end smallexample
-
-@noindent
-might print
-
-@smallexample
-Today is Thursday, July 11, 1991.
-@end smallexample
-
-Here is the @code{awk} version of the @code{date} utility.
-
-@smallexample
-#! /usr/bin/gawk -f
-#
-# date --- implement the P1003.2 Draft 11 'date' command
-#
-# Bug: does not recognize the -u argument.
-
-BEGIN \
-@{
- format = "%a %b %e %H:%M:%S %Z %Y"
- exitval = 0
-
- if (ARGC > 2)
- exitval = 1
- else if (ARGC == 2) @{
- format = ARGV[1]
- if (format ~ /^\+/)
- format = substr(format, 2) # remove leading +
- @}
- print strftime(format)
- exit exitval
-@}
-@end smallexample
-
-@node User-defined, Built-in Variables, Built-in, Top
-@chapter User-defined Functions
-
-@cindex user-defined functions
-@cindex functions, user-defined
-Complicated @code{awk} programs can often be simplified by defining
-your own functions. User-defined functions can be called just like
-built-in ones (@pxref{Function Calls}), but it is up to you to define
-them---to tell @code{awk} what they should do.
-
-@menu
-* Definition Syntax:: How to write definitions and what they mean.
-* Function Example:: An example function definition and
- what it does.
-* Function Caveats:: Things to watch out for.
-* Return Statement:: Specifying the value a function returns.
-@end menu
-
-@node Definition Syntax, Function Example, User-defined, User-defined
-@section Syntax of Function Definitions
-@cindex defining functions
-@cindex function definition
-
-Definitions of functions can appear anywhere between the rules of the
-@code{awk} program. Thus, the general form of an @code{awk} program is
-extended to include sequences of rules @emph{and} user-defined function
-definitions.
-
-The definition of a function named @var{name} looks like this:
-
-@example
-function @var{name} (@var{parameter-list}) @{
- @var{body-of-function}
-@}
-@end example
-
-@noindent
-@var{name} is the name of the function to be defined. A valid function
-name is like a valid variable name: a sequence of letters, digits and
-underscores, not starting with a digit. Functions share the same pool
-of names as variables and arrays.
-
-@var{parameter-list} is a list of the function's arguments and local
-variable names, separated by commas. When the function is called,
-the argument names are used to hold the argument values given in
-the call. The local variables are initialized to the null string.
-
-The @var{body-of-function} consists of @code{awk} statements. It is the
-most important part of the definition, because it says what the function
-should actually @emph{do}. The argument names exist to give the body a
-way to talk about the arguments; local variables, to give the body
-places to keep temporary values.
-
-Argument names are not distinguished syntactically from local variable
-names; instead, the number of arguments supplied when the function is
-called determines how many argument variables there are. Thus, if three
-argument values are given, the first three names in @var{parameter-list}
-are arguments, and the rest are local variables.
-
-It follows that if the number of arguments is not the same in all calls
-to the function, some of the names in @var{parameter-list} may be
-arguments on some occasions and local variables on others. Another
-way to think of this is that omitted arguments default to the
-null string.
-
-Usually when you write a function you know how many names you intend to
-use for arguments and how many you intend to use as locals. By
-convention, you should write an extra space between the arguments and
-the locals, so other people can follow how your function is
-supposed to be used.
-
-During execution of the function body, the arguments and local variable
-values hide or @dfn{shadow} any variables of the same names used in the
-rest of the program. The shadowed variables are not accessible in the
-function definition, because there is no way to name them while their
-names have been taken away for the local variables. All other variables
-used in the @code{awk} program can be referenced or set normally in the
-function definition.
-
-The arguments and local variables last only as long as the function body
-is executing. Once the body finishes, the shadowed variables come back.
-
-The function body can contain expressions which call functions. They
-can even call this function, either directly or by way of another
-function. When this happens, we say the function is @dfn{recursive}.
-
-There is no need in @code{awk} to put the definition of a function
-before all uses of the function. This is because @code{awk} reads the
-entire program before starting to execute any of it.
-
-In many @code{awk} implementations, the keyword @code{function} may be
-abbreviated @code{func}. However, @sc{posix} only specifies the use of
-the keyword @code{function}. This actually has some practical implications.
-If @code{gawk} is in @sc{posix}-compatibility mode
-(@pxref{Command Line, ,Invoking @code{awk}}), then the following
-statement will @emph{not} define a function:@refill
-
-@example
-func foo() @{ a = sqrt($1) ; print a @}
-@end example
-
-@noindent
-Instead it defines a rule that, for each record, concatenates the value
-of the variable @samp{func} with the return value of the function @samp{foo},
-and based on the truth value of the result, executes the corresponding action.
-This is probably not what was desired. (@code{awk} accepts this input as
-syntactically valid, since functions may be used before they are defined
-in @code{awk} programs.)
-
-@node Function Example, Function Caveats, Definition Syntax, User-defined
-@section Function Definition Example
-
-Here is an example of a user-defined function, called @code{myprint}, that
-takes a number and prints it in a specific format.
-
-@example
-function myprint(num)
-@{
- printf "%6.3g\n", num
-@}
-@end example
-
-@noindent
-To illustrate, here is an @code{awk} rule which uses our @code{myprint}
-function:
-
-@example
-$3 > 0 @{ myprint($3) @}
-@end example
-
-@noindent
-This program prints, in our special format, all the third fields that
-contain a positive number in our input. Therefore, when given:
-
-@example
- 1.2 3.4 5.6 7.8
- 9.10 11.12 -13.14 15.16
-17.18 19.20 21.22 23.24
-@end example
-
-@noindent
-this program, using our function to format the results, prints:
-
-@example
- 5.6
- 21.2
-@end example
-
-Here is a rather contrived example of a recursive function. It prints a
-string backwards:
-
-@example
-function rev (str, len) @{
- if (len == 0) @{
- printf "\n"
- return
- @}
- printf "%c", substr(str, len, 1)
- rev(str, len - 1)
-@}
-@end example
-
-@node Function Caveats, Return Statement, Function Example, User-defined
-@section Calling User-defined Functions
-
-@dfn{Calling a function} means causing the function to run and do its job.
-A function call is an expression, and its value is the value returned by
-the function.
-
-A function call consists of the function name followed by the arguments
-in parentheses. What you write in the call for the arguments are
-@code{awk} expressions; each time the call is executed, these
-expressions are evaluated, and the values are the actual arguments. For
-example, here is a call to @code{foo} with three arguments (the first
-being a string concatenation):
-
-@example
-foo(x y, "lose", 4 * z)
-@end example
-
-@quotation
-@strong{Caution:} whitespace characters (spaces and tabs) are not allowed
-between the function name and the open-parenthesis of the argument list.
-If you write whitespace by mistake, @code{awk} might think that you mean
-to concatenate a variable with an expression in parentheses. However, it
-notices that you used a function name and not a variable name, and reports
-an error.
-@end quotation
-
-@cindex call by value
-When a function is called, it is given a @emph{copy} of the values of
-its arguments. This is called @dfn{call by value}. The caller may use
-a variable as the expression for the argument, but the called function
-does not know this: it only knows what value the argument had. For
-example, if you write this code:
-
-@example
-foo = "bar"
-z = myfunc(foo)
-@end example
-
-@noindent
-then you should not think of the argument to @code{myfunc} as being
-``the variable @code{foo}.'' Instead, think of the argument as the
-string value, @code{"bar"}.
-
-If the function @code{myfunc} alters the values of its local variables,
-this has no effect on any other variables. In particular, if @code{myfunc}
-does this:
-
-@example
-function myfunc (win) @{
- print win
- win = "zzz"
- print win
-@}
-@end example
-
-@noindent
-to change its first argument variable @code{win}, this @emph{does not}
-change the value of @code{foo} in the caller. The role of @code{foo} in
-calling @code{myfunc} ended when its value, @code{"bar"}, was computed.
-If @code{win} also exists outside of @code{myfunc}, the function body
-cannot alter this outer value, because it is shadowed during the
-execution of @code{myfunc} and cannot be seen or changed from there.
-
-@cindex call by reference
-However, when arrays are the parameters to functions, they are @emph{not}
-copied. Instead, the array itself is made available for direct manipulation
-by the function. This is usually called @dfn{call by reference}.
-Changes made to an array parameter inside the body of a function @emph{are}
-visible outside that function.
-@ifinfo
-This can be @strong{very} dangerous if you do not watch what you are
-doing. For example:@refill
-@end ifinfo
-@iftex
-@emph{This can be very dangerous if you do not watch what you are
-doing.} For example:@refill
-@end iftex
-
-@example
-function changeit (array, ind, nvalue) @{
- array[ind] = nvalue
-@}
-
-BEGIN @{
- a[1] = 1 ; a[2] = 2 ; a[3] = 3
- changeit(a, 2, "two")
- printf "a[1] = %s, a[2] = %s, a[3] = %s\n", a[1], a[2], a[3]
- @}
-@end example
-
-@noindent
-prints @samp{a[1] = 1, a[2] = two, a[3] = 3}, because calling
-@code{changeit} stores @code{"two"} in the second element of @code{a}.
-
-@node Return Statement, , Function Caveats, User-defined
-@section The @code{return} Statement
-@cindex @code{return} statement
-
-The body of a user-defined function can contain a @code{return} statement.
-This statement returns control to the rest of the @code{awk} program. It
-can also be used to return a value for use in the rest of the @code{awk}
-program. It looks like this:@refill
-
-@example
-return @var{expression}
-@end example
-
-The @var{expression} part is optional. If it is omitted, then the returned
-value is undefined and, therefore, unpredictable.
-
-A @code{return} statement with no value expression is assumed at the end of
-every function definition. So if control reaches the end of the function
-body, then the function returns an unpredictable value. @code{awk}
-will not warn you if you use the return value of such a function; you will
-simply get unpredictable or unexpected results.
-
-Here is an example of a user-defined function that returns a value
-for the largest number among the elements of an array:@refill
-
-@example
-@group
-function maxelt (vec, i, ret) @{
- for (i in vec) @{
- if (ret == "" || vec[i] > ret)
- ret = vec[i]
- @}
- return ret
-@}
-@end group
-@end example
-
-@noindent
-You call @code{maxelt} with one argument, which is an array name. The local
-variables @code{i} and @code{ret} are not intended to be arguments;
-while there is nothing to stop you from passing two or three arguments
-to @code{maxelt}, the results would be strange. The extra space before
-@code{i} in the function parameter list is to indicate that @code{i} and
-@code{ret} are not supposed to be arguments. This is a convention which
-you should follow when you define functions.
-
-Here is a program that uses our @code{maxelt} function. It loads an
-array, calls @code{maxelt}, and then reports the maximum number in that
-array:@refill
-
-@example
-@group
-awk '
-function maxelt (vec, i, ret) @{
- for (i in vec) @{
- if (ret == "" || vec[i] > ret)
- ret = vec[i]
- @}
- return ret
-@}
-@end group
-
-@group
-# Load all fields of each record into nums.
-@{
- for(i = 1; i <= NF; i++)
- nums[NR, i] = $i
-@}
-
-END @{
- print maxelt(nums)
-@}'
-@end group
-@end example
-
-Given the following input:
-
-@example
-@group
- 1 5 23 8 16
-44 3 5 2 8 26
-256 291 1396 2962 100
--6 467 998 1101
-99385 11 0 225
-@end group
-@end example
-
-@noindent
-our program tells us (predictably) that:
-
-@example
-99385
-@end example
-
-@noindent
-is the largest number in our array.
-
-@node Built-in Variables, Command Line, User-defined, Top
-@chapter Built-in Variables
-@cindex built-in variables
-
-Most @code{awk} variables are available for you to use for your own
-purposes; they never change except when your program assigns values to
-them, and never affect anything except when your program examines them.
-
-A few variables have special built-in meanings. Some of them @code{awk}
-examines automatically, so that they enable you to tell @code{awk} how
-to do certain things. Others are set automatically by @code{awk}, so
-that they carry information from the internal workings of @code{awk} to
-your program.
-
-This chapter documents all the built-in variables of @code{gawk}. Most
-of them are also documented in the chapters where their areas of
-activity are described.
-
-@menu
-* User-modified:: Built-in variables that you change
- to control @code{awk}.
-* Auto-set:: Built-in variables where @code{awk}
- gives you information.
-@end menu
-
-@node User-modified, Auto-set, Built-in Variables, Built-in Variables
-@section Built-in Variables that Control @code{awk}
-@cindex built-in variables, user modifiable
-
-This is a list of the variables which you can change to control how
-@code{awk} does certain things.
-
-@table @code
-@iftex
-@vindex CONVFMT
-@end iftex
-@item CONVFMT
-This string is used by @code{awk} to control conversion of numbers to
-strings (@pxref{Conversion, ,Conversion of Strings and Numbers}).
-It works by being passed, in effect, as the first argument to the
-@code{sprintf} function. Its default value is @code{"%.6g"}.
-@code{CONVFMT} was introduced by the @sc{posix} standard.@refill
-
-@iftex
-@vindex FIELDWIDTHS
-@end iftex
-@item FIELDWIDTHS
-This is a space separated list of columns that tells @code{gawk}
-how to manage input with fixed, columnar boundaries. It is an
-experimental feature that is still evolving. Assigning to @code{FIELDWIDTHS}
-overrides the use of @code{FS} for field splitting.
-@xref{Constant Size, ,Reading Fixed-width Data}, for more information.@refill
-
-If @code{gawk} is in compatibility mode
-(@pxref{Command Line, ,Invoking @code{awk}}), then @code{FIELDWIDTHS}
-has no special meaning, and field splitting operations are done based
-exclusively on the value of @code{FS}.@refill
-
-@iftex
-@vindex FS
-@end iftex
-@item FS
-@code{FS} is the input field separator
-(@pxref{Field Separators, ,Specifying how Fields are Separated}).
-The value is a single-character string or a multi-character regular
-expression that matches the separations between fields in an input
-record.@refill
-
-The default value is @w{@code{" "}}, a string consisting of a single
-space. As a special exception, this value actually means that any
-sequence of spaces and tabs is a single separator. It also causes
-spaces and tabs at the beginning or end of a line to be ignored.
-
-You can set the value of @code{FS} on the command line using the
-@samp{-F} option:
-
-@example
-awk -F, '@var{program}' @var{input-files}
-@end example
-
-If @code{gawk} is using @code{FIELDWIDTHS} for field-splitting,
-assigning a value to @code{FS} will cause @code{gawk} to return to
-the normal, regexp-based, field splitting.
-
-@item IGNORECASE
-@iftex
-@vindex IGNORECASE
-@end iftex
-If @code{IGNORECASE} is nonzero, then @emph{all} regular expression
-matching is done in a case-independent fashion. In particular, regexp
-matching with @samp{~} and @samp{!~}, and the @code{gsub} @code{index},
-@code{match}, @code{split} and @code{sub} functions all ignore case when
-doing their particular regexp operations. @strong{Note:} since field
-splitting with the value of the @code{FS} variable is also a regular
-expression operation, that too is done with case ignored.
-@xref{Case-sensitivity, ,Case-sensitivity in Matching}.
-
-If @code{gawk} is in compatibility mode
-(@pxref{Command Line, ,Invoking @code{awk}}), then @code{IGNORECASE} has
-no special meaning, and regexp operations are always case-sensitive.@refill
-
-@item OFMT
-@iftex
-@vindex OFMT
-@end iftex
-This string is used by @code{awk} to control conversion of numbers to
-strings (@pxref{Conversion, ,Conversion of Strings and Numbers}) for
-printing with the @code{print} statement.
-It works by being passed, in effect, as the first argument to the
-@code{sprintf} function. Its default value is @code{"%.6g"}.
-Earlier versions of @code{awk} also used @code{OFMT} to specify the
-format for converting numbers to strings in general expressions; this
-has been taken over by @code{CONVFMT}.@refill
-
-@item OFS
-@iftex
-@vindex OFS
-@end iftex
-This is the output field separator (@pxref{Output Separators}). It is
-output between the fields output by a @code{print} statement. Its
-default value is @w{@code{" "}}, a string consisting of a single space.
-
-@item ORS
-@iftex
-@vindex ORS
-@end iftex
-This is the output record separator. It is output at the end of every
-@code{print} statement. Its default value is a string containing a
-single newline character, which could be written as @code{"\n"}.
-(@xref{Output Separators}.)@refill
-
-@item RS
-@iftex
-@vindex RS
-@end iftex
-This is @code{awk}'s input record separator. Its default value is a string
-containing a single newline character, which means that an input record
-consists of a single line of text.
-(@xref{Records, ,How Input is Split into Records}.)@refill
-
-@item SUBSEP
-@iftex
-@vindex SUBSEP
-@end iftex
-@code{SUBSEP} is the subscript separator. It has the default value of
-@code{"\034"}, and is used to separate the parts of the name of a
-multi-dimensional array. Thus, if you access @code{foo[12,3]}, it
-really accesses @code{foo["12\0343"]}
-(@pxref{Multi-dimensional, ,Multi-dimensional Arrays}).@refill
-@end table
-
-@node Auto-set, , User-modified, Built-in Variables
-@section Built-in Variables that Convey Information
-
-This is a list of the variables that are set automatically by @code{awk}
-on certain occasions so as to provide information to your program.
-
-@table @code
-@item ARGC
-@itemx ARGV
-@iftex
-@vindex ARGC
-@vindex ARGV
-@end iftex
-The command-line arguments available to @code{awk} programs are stored in
-an array called @code{ARGV}. @code{ARGC} is the number of command-line
-arguments present. @xref{Command Line, ,Invoking @code{awk}}.
-@code{ARGV} is indexed from zero to @w{@code{ARGC - 1}}. For example:@refill
-
-@example
-awk 'BEGIN @{
- for (i = 0; i < ARGC; i++)
- print ARGV[i]
- @}' inventory-shipped BBS-list
-@end example
-
-@noindent
-In this example, @code{ARGV[0]} contains @code{"awk"}, @code{ARGV[1]}
-contains @code{"inventory-shipped"}, and @code{ARGV[2]} contains
-@code{"BBS-list"}. The value of @code{ARGC} is 3, one more than the
-index of the last element in @code{ARGV} since the elements are numbered
-from zero.@refill
-
-The names @code{ARGC} and @code{ARGV}, as well the convention of indexing
-the array from 0 to @w{@code{ARGC - 1}}, are derived from the C language's
-method of accessing command line arguments.@refill
-
-Notice that the @code{awk} program is not entered in @code{ARGV}. The
-other special command line options, with their arguments, are also not
-entered. But variable assignments on the command line @emph{are}
-treated as arguments, and do show up in the @code{ARGV} array.
-
-Your program can alter @code{ARGC} and the elements of @code{ARGV}.
-Each time @code{awk} reaches the end of an input file, it uses the next
-element of @code{ARGV} as the name of the next input file. By storing a
-different string there, your program can change which files are read.
-You can use @code{"-"} to represent the standard input. By storing
-additional elements and incrementing @code{ARGC} you can cause
-additional files to be read.
-
-If you decrease the value of @code{ARGC}, that eliminates input files
-from the end of the list. By recording the old value of @code{ARGC}
-elsewhere, your program can treat the eliminated arguments as
-something other than file names.
-
-To eliminate a file from the middle of the list, store the null string
-(@code{""}) into @code{ARGV} in place of the file's name. As a
-special feature, @code{awk} ignores file names that have been
-replaced with the null string.
-
-@ignore
-see getopt.awk in the examples...
-@end ignore
-
-@item ARGIND
-@vindex ARGIND
-The index in @code{ARGV} of the current file being processed.
-Every time @code{gawk} opens a new data file for processing, it sets
-@code{ARGIND} to the index in @code{ARGV} of the file name. Thus, the
-condition @samp{FILENAME == ARGV[ARGIND]} is always true.
-
-This variable is useful in file processing; it allows you to tell how far
-along you are in the list of data files, and to distinguish between
-multiple successive instances of the same filename on the command line.
-
-While you can change the value of @code{ARGIND} within your @code{awk}
-program, @code{gawk} will automatically set it to a new value when the
-next file is opened.
-
-This variable is a @code{gawk} extension; in other @code{awk} implementations
-it is not special.
-
-@item ENVIRON
-@vindex ENVIRON
-This is an array that contains the values of the environment. The array
-indices are the environment variable names; the values are the values of
-the particular environment variables. For example,
-@code{ENVIRON["HOME"]} might be @file{/u/close}. Changing this array
-does not affect the environment passed on to any programs that
-@code{awk} may spawn via redirection or the @code{system} function.
-(In a future version of @code{gawk}, it may do so.)
-
-Some operating systems may not have environment variables.
-On such systems, the array @code{ENVIRON} is empty.
-
-@item ERRNO
-@iftex
-@vindex ERRNO
-@end iftex
-If a system error occurs either doing a redirection for @code{getline},
-during a read for @code{getline}, or during a @code{close} operation,
-then @code{ERRNO} will contain a string describing the error.
-
-This variable is a @code{gawk} extension; in other @code{awk} implementations
-it is not special.
-
-@item FILENAME
-@iftex
-@vindex FILENAME
-@end iftex
-This is the name of the file that @code{awk} is currently reading.
-If @code{awk} is reading from the standard input (in other words,
-there are no files listed on the command line),
-@code{FILENAME} is set to @code{"-"}.
-@code{FILENAME} is changed each time a new file is read
-(@pxref{Reading Files, ,Reading Input Files}).@refill
-
-@item FNR
-@iftex
-@vindex FNR
-@end iftex
-@code{FNR} is the current record number in the current file. @code{FNR} is
-incremented each time a new record is read
-(@pxref{Getline, ,Explicit Input with @code{getline}}). It is reinitialized
-to 0 each time a new input file is started.@refill
-
-@item NF
-@iftex
-@vindex NF
-@end iftex
-@code{NF} is the number of fields in the current input record.
-@code{NF} is set each time a new record is read, when a new field is
-created, or when @code{$0} changes (@pxref{Fields, ,Examining Fields}).@refill
-
-@item NR
-@iftex
-@vindex NR
-@end iftex
-This is the number of input records @code{awk} has processed since
-the beginning of the program's execution.
-(@pxref{Records, ,How Input is Split into Records}).
-@code{NR} is set each time a new record is read.@refill
-
-@item RLENGTH
-@iftex
-@vindex RLENGTH
-@end iftex
-@code{RLENGTH} is the length of the substring matched by the
-@code{match} function
-(@pxref{String Functions, ,Built-in Functions for String Manipulation}).
-@code{RLENGTH} is set by invoking the @code{match} function. Its value
-is the length of the matched string, or @minus{}1 if no match was found.@refill
-
-@item RSTART
-@iftex
-@vindex RSTART
-@end iftex
-@code{RSTART} is the start-index in characters of the substring matched by the
-@code{match} function
-(@pxref{String Functions, ,Built-in Functions for String Manipulation}).
-@code{RSTART} is set by invoking the @code{match} function. Its value
-is the position of the string where the matched substring starts, or 0
-if no match was found.@refill
-@end table
-
-@node Command Line, Language History, Built-in Variables, Top
-@c node-name, next, previous, up
-@chapter Invoking @code{awk}
-@cindex command line
-@cindex invocation of @code{gawk}
-@cindex arguments, command line
-@cindex options, command line
-@cindex long options
-@cindex options, long
-
-There are two ways to run @code{awk}: with an explicit program, or with
-one or more program files. Here are templates for both of them; items
-enclosed in @samp{@r{[}@dots{}@r{]}} in these templates are optional.
-
-Besides traditional one-letter @sc{posix}-style options, @code{gawk} also
-supports GNU long named options.
-
-@example
-awk @r{[@var{POSIX or GNU style options}]} -f progfile @r{[@code{--}]} @var{file} @dots{}
-awk @r{[@var{POSIX or GNU style options}]} @r{[@code{--}]} '@var{program}' @var{file} @dots{}
-@end example
-
-@menu
-* Options:: Command line options and their meanings.
-* Other Arguments:: Input file names and variable assignments.
-* AWKPATH Variable:: Searching directories for @code{awk} programs.
-* Obsolete:: Obsolete Options and/or features.
-* Undocumented:: Undocumented Options and Features.
-@end menu
-
-@node Options, Other Arguments, Command Line, Command Line
-@section Command Line Options
-
-Options begin with a minus sign, and consist of a single character.
-GNU style long named options consist of two minus signs and
-a keyword that can be abbreviated if the abbreviation allows the option
-to be uniquely identified. If the option takes an argument, then the
-keyword is immediately followed by an equals sign (@samp{=}) and the
-argument's value. For brevity, the discussion below only refers to the
-traditional short options; however the long and short options are
-interchangeable in all contexts.
-
-Each long named option for @code{gawk} has a corresponding
-@sc{posix}-style option. The options and their meanings are as follows:
-
-@table @code
-@item -F @var{fs}
-@itemx --field-separator=@var{fs}
-@iftex
-@cindex @code{-F} option
-@end iftex
-@cindex @code{--field-separator} option
-Sets the @code{FS} variable to @var{fs}
-(@pxref{Field Separators, ,Specifying how Fields are Separated}).@refill
-
-@item -f @var{source-file}
-@itemx --file=@var{source-file}
-@iftex
-@cindex @code{-f} option
-@end iftex
-@cindex @code{--file} option
-Indicates that the @code{awk} program is to be found in @var{source-file}
-instead of in the first non-option argument.
-
-@item -v @var{var}=@var{val}
-@itemx --assign=@var{var}=@var{val}
-@cindex @samp{-v} option
-@cindex @code{--assign} option
-Sets the variable @var{var} to the value @var{val} @emph{before}
-execution of the program begins. Such variable values are available
-inside the @code{BEGIN} rule (see below for a fuller explanation).
-
-The @samp{-v} option can only set one variable, but you can use
-it more than once, setting another variable each time, like this:
-@samp{@w{-v foo=1} @w{-v bar=2}}.
-
-@item -W @var{gawk-opt}
-@cindex @samp{-W} option
-Following the @sc{posix} standard, options that are implementation
-specific are supplied as arguments to the @samp{-W} option. With @code{gawk},
-these arguments may be separated by commas, or quoted and separated by
-whitespace. Case is ignored when processing these options. These options
-also have corresponding GNU style long named options. The following
-@code{gawk}-specific options are available:
-
-@table @code
-@item -W compat
-@itemx --compat
-@cindex @code{--compat} option
-Specifies @dfn{compatibility mode}, in which the GNU extensions in
-@code{gawk} are disabled, so that @code{gawk} behaves just like Unix
-@code{awk}.
-@xref{POSIX/GNU, ,Extensions in @code{gawk} not in POSIX @code{awk}},
-which summarizes the extensions. Also see
-@ref{Compatibility Mode, ,Downward Compatibility and Debugging}.@refill
-
-@item -W copyleft
-@itemx -W copyright
-@itemx --copyleft
-@itemx --copyright
-@cindex @code{--copyleft} option
-@cindex @code{--copyright} option
-Print the short version of the General Public License.
-This option may disappear in a future version of @code{gawk}.
-
-@item -W help
-@itemx -W usage
-@itemx --help
-@itemx --usage
-@cindex @code{--help} option
-@cindex @code{--usage} option
-Print a ``usage'' message summarizing the short and long style options
-that @code{gawk} accepts, and then exit.
-
-@item -W lint
-@itemx --lint
-@cindex @code{--lint} option
-Provide warnings about constructs that are dubious or non-portable to
-other @code{awk} implementations.
-Some warnings are issued when @code{gawk} first reads your program. Others
-are issued at run-time, as your program executes.
-
-@item -W posix
-@itemx --posix
-@cindex @code{--posix} option
-Operate in strict @sc{posix} mode. This disables all @code{gawk}
-extensions (just like @code{-W compat}), and adds the following additional
-restrictions:
-
-@itemize @bullet{}
-@item
-@code{\x} escape sequences are not recognized
-(@pxref{Constants, ,Constant Expressions}).@refill
-
-@item
-The synonym @code{func} for the keyword @code{function} is not
-recognized (@pxref{Definition Syntax, ,Syntax of Function Definitions}).
-
-@item
-The operators @samp{**} and @samp{**=} cannot be used in
-place of @samp{^} and @samp{^=} (@pxref{Arithmetic Ops, ,Arithmetic Operators},
-and also @pxref{Assignment Ops, ,Assignment Expressions}).@refill
-
-@item
-Specifying @samp{-Ft} on the command line does not set the value
-of @code{FS} to be a single tab character
-(@pxref{Field Separators, ,Specifying how Fields are Separated}).@refill
-@end itemize
-
-Although you can supply both @samp{-W compat} and @samp{-W posix} on the
-command line, @samp{-W posix} will take precedence.
-
-@item -W source=@var{program-text}
-@itemx --source=@var{program-text}
-@cindex @code{--source} option
-Program source code is taken from the @var{program-text}. This option
-allows you to mix @code{awk} source code in files with program source
-code that you would enter on the command line. This is particularly useful
-when you have library functions that you wish to use from your command line
-programs (@pxref{AWKPATH Variable, ,The @code{AWKPATH} Environment Variable}).
-
-@item -W version
-@itemx --version
-@cindex @code{--version} option
-Prints version information for this particular copy of @code{gawk}.
-This is so you can determine if your copy of @code{gawk} is up to date
-with respect to whatever the Free Software Foundation is currently
-distributing. This option may disappear in a future version of @code{gawk}.
-@end table
-
-@item --
-Signals the end of the command line options. The following arguments
-are not treated as options even if they begin with @samp{-}. This
-interpretation of @samp{--} follows the @sc{posix} argument parsing
-conventions.
-
-This is useful if you have file names that start with @samp{-},
-or in shell scripts, if you have file names that will be specified
-by the user which could start with @samp{-}.
-@end table
-
-Any other options are flagged as invalid with a warning message, but
-are otherwise ignored.
-
-In compatibility mode, as a special case, if the value of @var{fs} supplied
-to the @samp{-F} option is @samp{t}, then @code{FS} is set to the tab
-character (@code{"\t"}). This is only true for @samp{-W compat}, and not
-for @samp{-W posix}
-(@pxref{Field Separators, ,Specifying how Fields are Separated}).@refill
-
-If the @samp{-f} option is @emph{not} used, then the first non-option
-command line argument is expected to be the program text.
-
-The @samp{-f} option may be used more than once on the command line.
-If it is, @code{awk} reads its program source from all of the named files, as
-if they had been concatenated together into one big file. This is
-useful for creating libraries of @code{awk} functions. Useful functions
-can be written once, and then retrieved from a standard place, instead
-of having to be included into each individual program. You can still
-type in a program at the terminal and use library functions, by specifying
-@samp{-f /dev/tty}. @code{awk} will read a file from the terminal
-to use as part of the @code{awk} program. After typing your program,
-type @kbd{Control-d} (the end-of-file character) to terminate it.
-(You may also use @samp{-f -} to read program source from the standard
-input, but then you will not be able to also use the standard input as a
-source of data.)
-
-Because it is clumsy using the standard @code{awk} mechanisms to mix source
-file and command line @code{awk} programs, @code{gawk} provides the
-@samp{--source} option. This does not require you to pre-empt the standard
-input for your source code, and allows you to easily mix command line
-and library source code
-(@pxref{AWKPATH Variable, ,The @code{AWKPATH} Environment Variable}).
-
-If no @samp{-f} or @samp{--source} option is specified, then @code{gawk}
-will use the first non-option command line argument as the text of the
-program source code.
-
-@node Other Arguments, AWKPATH Variable, Options, Command Line
-@section Other Command Line Arguments
-
-Any additional arguments on the command line are normally treated as
-input files to be processed in the order specified. However, an
-argument that has the form @code{@var{var}=@var{value}}, means to assign
-the value @var{value} to the variable @var{var}---it does not specify a
-file at all.
-
-@vindex ARGV
-All these arguments are made available to your @code{awk} program in the
-@code{ARGV} array (@pxref{Built-in Variables}). Command line options
-and the program text (if present) are omitted from the @code{ARGV}
-array. All other arguments, including variable assignments, are
-included.
-
-The distinction between file name arguments and variable-assignment
-arguments is made when @code{awk} is about to open the next input file.
-At that point in execution, it checks the ``file name'' to see whether
-it is really a variable assignment; if so, @code{awk} sets the variable
-instead of reading a file.
-
-Therefore, the variables actually receive the specified values after all
-previously specified files have been read. In particular, the values of
-variables assigned in this fashion are @emph{not} available inside a
-@code{BEGIN} rule
-(@pxref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}),
-since such rules are run before @code{awk} begins scanning the argument list.
-The values given on the command line are processed for escape sequences
-(@pxref{Constants, ,Constant Expressions}).@refill
-
-In some earlier implementations of @code{awk}, when a variable assignment
-occurred before any file names, the assignment would happen @emph{before}
-the @code{BEGIN} rule was executed. Some applications came to depend
-upon this ``feature.'' When @code{awk} was changed to be more consistent,
-the @samp{-v} option was added to accommodate applications that depended
-upon this old behavior.
-
-The variable assignment feature is most useful for assigning to variables
-such as @code{RS}, @code{OFS}, and @code{ORS}, which control input and
-output formats, before scanning the data files. It is also useful for
-controlling state if multiple passes are needed over a data file. For
-example:@refill
-
-@cindex multiple passes over data
-@cindex passes, multiple
-@smallexample
-awk 'pass == 1 @{ @var{pass 1 stuff} @}
- pass == 2 @{ @var{pass 2 stuff} @}' pass=1 datafile pass=2 datafile
-@end smallexample
-
-Given the variable assignment feature, the @samp{-F} option is not
-strictly necessary. It remains for historical compatibility.
-
-@node AWKPATH Variable, Obsolete, Other Arguments, Command Line
-@section The @code{AWKPATH} Environment Variable
-@cindex @code{AWKPATH} environment variable
-@cindex search path
-@cindex directory search
-@cindex path, search
-@iftex
-@cindex differences between @code{gawk} and @code{awk}
-@end iftex
-
-The previous section described how @code{awk} program files can be named
-on the command line with the @samp{-f} option. In some @code{awk}
-implementations, you must supply a precise path name for each program
-file, unless the file is in the current directory.
-
-But in @code{gawk}, if the file name supplied in the @samp{-f} option
-does not contain a @samp{/}, then @code{gawk} searches a list of
-directories (called the @dfn{search path}), one by one, looking for a
-file with the specified name.
-
-The search path is actually a string consisting of directory names
-separated by colons. @code{gawk} gets its search path from the
-@code{AWKPATH} environment variable. If that variable does not exist,
-@code{gawk} uses the default path, which is
-@samp{.:/usr/lib/awk:/usr/local/lib/awk}. (Programs written by
-system administrators should use an @code{AWKPATH} variable that
-does not include the current directory, @samp{.}.)@refill
-
-The search path feature is particularly useful for building up libraries
-of useful @code{awk} functions. The library files can be placed in a
-standard directory that is in the default path, and then specified on
-the command line with a short file name. Otherwise, the full file name
-would have to be typed for each file.
-
-By combining the @samp{--source} and @samp{-f} options, your command line
-@code{awk} programs can use facilities in @code{awk} library files.
-
-Path searching is not done if @code{gawk} is in compatibility mode.
-This is true for both @samp{-W compat} and @samp{-W posix}.
-@xref{Options, ,Command Line Options}.
-
-@strong{Note:} if you want files in the current directory to be found,
-you must include the current directory in the path, either by writing
-@file{.} as an entry in the path, or by writing a null entry in the
-path. (A null entry is indicated by starting or ending the path with a
-colon, or by placing two colons next to each other (@samp{::}).) If the
-current directory is not included in the path, then files cannot be
-found in the current directory. This path search mechanism is identical
-to the shell's.
-@c someday, @cite{The Bourne Again Shell}....
-
-@node Obsolete, Undocumented, AWKPATH Variable, Command Line
-@section Obsolete Options and/or Features
-
-@cindex deprecated options
-@cindex obsolete options
-@cindex deprecated features
-@cindex obsolete features
-This section describes features and/or command line options from the
-previous release of @code{gawk} that are either not available in the
-current version, or that are still supported but deprecated (meaning that
-they will @emph{not} be in the next release).
-
-@c update this section for each release!
-
-For version 2.15 of @code{gawk}, the following command line options
-from version 2.11.1 are no longer recognized.
-
-@table @samp
-@ignore
-@item -nostalgia
-Use @samp{-W nostalgia} instead.
-@end ignore
-
-@item -c
-Use @samp{-W compat} instead.
-
-@item -V
-Use @samp{-W version} instead.
-
-@item -C
-Use @samp{-W copyright} instead.
-
-@item -a
-@itemx -e
-These options produce an ``unrecognized option'' error message but have
-no effect on the execution of @code{gawk}. The @sc{posix} standard now
-specifies traditional @code{awk} regular expressions for the @code{awk} utility.
-@end table
-
-The public-domain version of @code{strftime} that is distributed with
-@code{gawk} changed for the 2.14 release. The @samp{%V} conversion specifier
-that used to generate the date in VMS format was changed to @samp{%v}.
-This is because the @sc{posix} standard for the @code{date} utility now
-specifies a @samp{%V} conversion specifier.
-@xref{Time Functions, ,Functions for Dealing with Time Stamps}, for details.
-
-@node Undocumented, , Obsolete, Command Line
-@section Undocumented Options and Features
-
-This section intentionally left blank.
-
-@c Read The Source, Luke!
-
-@ignore
-@c If these came out in the Info file or TeX manual, then they wouldn't
-@c be undocumented, would they?
-
-@code{gawk} has one undocumented option:
-
-@table @samp
-@item -W nostalgia
-Print the message @code{"awk: bailing out near line 1"} and dump core.
-This option was inspired by the common behavior of very early versions of
-Unix @code{awk}, and by a t--shirt.
-@end table
-
-Early versions of @code{awk} used to not require any separator (either
-a newline or @samp{;}) between the rules in @code{awk} programs. Thus,
-it was common to see one-line programs like:
-
-@example
-awk '@{ sum += $1 @} END @{ print sum @}'
-@end example
-
-@code{gawk} actually supports this, but it is purposely undocumented
-since it is considered bad style. The correct way to write such a program
-is either
-
-@example
-awk '@{ sum += $1 @} ; END @{ print sum @}'
-@end example
-
-@noindent
-or
-
-@example
-awk '@{ sum += $1 @}
- END @{ print sum @}' data
-@end example
-
-@noindent
-@xref{Statements/Lines, ,@code{awk} Statements versus Lines}, for a fuller
-explanation.@refill
-
-As an accident of the implementation of the original Unix @code{awk}, if
-a built-in function used @code{$0} as its default argument, it was possible
-to call that function without the parentheses. In particular, it was
-common practice to use the @code{length} function in this fashion.
-For example, the pipeline:
-
-@example
-echo abcdef | awk '@{ print length @}'
-@end example
-
-@noindent
-would print @samp{6}.
-
-For backwards compatibility with old programs, @code{gawk} supports
-this usage, but only for the @code{length} function. New programs should
-@emph{not} call the @code{length} function this way. In particular,
-this usage will not be portable to other @sc{posix} compliant versions
-of @code{awk}. It is also poor style.
-
-@end ignore
-
-@node Language History, Installation, Command Line, Top
-@chapter The Evolution of the @code{awk} Language
-
-This manual describes the GNU implementation of @code{awk}, which is patterned
-after the @sc{posix} specification. Many @code{awk} users are only familiar
-with the original @code{awk} implementation in Version 7 Unix, which is also
-the basis for the version in Berkeley Unix (through 4.3--Reno). This chapter
-briefly describes the evolution of the @code{awk} language.
-
-@menu
-* V7/S5R3.1:: The major changes between V7 and
- System V Release 3.1.
-* S5R4:: Minor changes between System V
- Releases 3.1 and 4.
-* POSIX:: New features from the @sc{posix} standard.
-* POSIX/GNU:: The extensions in @code{gawk}
- not in @sc{posix} @code{awk}.
-@end menu
-
-@node V7/S5R3.1, S5R4, Language History, Language History
-@section Major Changes between V7 and S5R3.1
-
-The @code{awk} language evolved considerably between the release of
-Version 7 Unix (1978) and the new version first made widely available in
-System V Release 3.1 (1987). This section summarizes the changes, with
-cross-references to further details.
-
-@itemize @bullet
-@item
-The requirement for @samp{;} to separate rules on a line
-(@pxref{Statements/Lines, ,@code{awk} Statements versus Lines}).
-
-@item
-User-defined functions, and the @code{return} statement
-(@pxref{User-defined, ,User-defined Functions}).
-
-@item
-The @code{delete} statement (@pxref{Delete, ,The @code{delete} Statement}).
-
-@item
-The @code{do}-@code{while} statement
-(@pxref{Do Statement, ,The @code{do}-@code{while} Statement}).@refill
-
-@item
-The built-in functions @code{atan2}, @code{cos}, @code{sin}, @code{rand} and
-@code{srand} (@pxref{Numeric Functions, ,Numeric Built-in Functions}).
-
-@item
-The built-in functions @code{gsub}, @code{sub}, and @code{match}
-(@pxref{String Functions, ,Built-in Functions for String Manipulation}).
-
-@item
-The built-in functions @code{close}, which closes an open file, and
-@code{system}, which allows the user to execute operating system
-commands (@pxref{I/O Functions, ,Built-in Functions for Input/Output}).@refill
-@c Does the above verbiage prevents an overfull hbox? --mew, rjc 24jan1992
-
-@item
-The @code{ARGC}, @code{ARGV}, @code{FNR}, @code{RLENGTH}, @code{RSTART},
-and @code{SUBSEP} built-in variables (@pxref{Built-in Variables}).
-
-@item
-The conditional expression using the operators @samp{?} and @samp{:}
-(@pxref{Conditional Exp, ,Conditional Expressions}).@refill
-
-@item
-The exponentiation operator @samp{^}
-(@pxref{Arithmetic Ops, ,Arithmetic Operators}) and its assignment operator
-form @samp{^=} (@pxref{Assignment Ops, ,Assignment Expressions}).@refill
-
-@item
-C-compatible operator precedence, which breaks some old @code{awk}
-programs (@pxref{Precedence, ,Operator Precedence (How Operators Nest)}).
-
-@item
-Regexps as the value of @code{FS}
-(@pxref{Field Separators, ,Specifying how Fields are Separated}), and as the
-third argument to the @code{split} function
-(@pxref{String Functions, ,Built-in Functions for String Manipulation}).@refill
-
-@item
-Dynamic regexps as operands of the @samp{~} and @samp{!~} operators
-(@pxref{Regexp Usage, ,How to Use Regular Expressions}).
-
-@item
-Escape sequences (@pxref{Constants, ,Constant Expressions}) in regexps.@refill
-
-@item
-The escape sequences @samp{\b}, @samp{\f}, and @samp{\r}
-(@pxref{Constants, ,Constant Expressions}).
-
-@item
-Redirection of input for the @code{getline} function
-(@pxref{Getline, ,Explicit Input with @code{getline}}).@refill
-
-@item
-Multiple @code{BEGIN} and @code{END} rules
-(@pxref{BEGIN/END, ,@code{BEGIN} and @code{END} Special Patterns}).@refill
-
-@item
-Simulated multi-dimensional arrays
-(@pxref{Multi-dimensional, ,Multi-dimensional Arrays}).@refill
-@end itemize
-
-@node S5R4, POSIX, V7/S5R3.1, Language History
-@section Changes between S5R3.1 and S5R4
-
-The System V Release 4 version of Unix @code{awk} added these features
-(some of which originated in @code{gawk}):
-
-@itemize @bullet
-@item
-The @code{ENVIRON} variable (@pxref{Built-in Variables}).
-
-@item
-Multiple @samp{-f} options on the command line
-(@pxref{Command Line, ,Invoking @code{awk}}).@refill
-
-@item
-The @samp{-v} option for assigning variables before program execution begins
-(@pxref{Command Line, ,Invoking @code{awk}}).@refill
-
-@item
-The @samp{--} option for terminating command line options.
-
-@item
-The @samp{\a}, @samp{\v}, and @samp{\x} escape sequences
-(@pxref{Constants, ,Constant Expressions}).@refill
-
-@item
-A defined return value for the @code{srand} built-in function
-(@pxref{Numeric Functions, ,Numeric Built-in Functions}).
-
-@item
-The @code{toupper} and @code{tolower} built-in string functions
-for case translation
-(@pxref{String Functions, ,Built-in Functions for String Manipulation}).@refill
-
-@item
-A cleaner specification for the @samp{%c} format-control letter in the
-@code{printf} function
-(@pxref{Printf, ,Using @code{printf} Statements for Fancier Printing}).@refill
-
-@item
-The ability to dynamically pass the field width and precision (@code{"%*.*d"})
-in the argument list of the @code{printf} function
-(@pxref{Printf, ,Using @code{printf} Statements for Fancier Printing}).@refill
-
-@item
-The use of constant regexps such as @code{/foo/} as expressions, where
-they are equivalent to use of the matching operator, as in @code{$0 ~
-/foo/} (@pxref{Constants, ,Constant Expressions}).
-@end itemize
-
-@node POSIX, POSIX/GNU, S5R4, Language History
-@section Changes between S5R4 and POSIX @code{awk}
-
-The @sc{posix} Command Language and Utilities standard for @code{awk}
-introduced the following changes into the language:
-
-@itemize @bullet{}
-@item
-The use of @samp{-W} for implementation-specific options.
-
-@item
-The use of @code{CONVFMT} for controlling the conversion of numbers
-to strings (@pxref{Conversion, ,Conversion of Strings and Numbers}).
-
-@item
-The concept of a numeric string, and tighter comparison rules to go
-with it (@pxref{Comparison Ops, ,Comparison Expressions}).
-
-@item
-More complete documentation of many of the previously undocumented
-features of the language.
-@end itemize
-
-@node POSIX/GNU, , POSIX, Language History
-@section Extensions in @code{gawk} not in POSIX @code{awk}
-
-The GNU implementation, @code{gawk}, adds these features:
-
-@itemize @bullet
-@item
-The @code{AWKPATH} environment variable for specifying a path search for
-the @samp{-f} command line option
-(@pxref{Command Line, ,Invoking @code{awk}}).@refill
-
-@item
-The various @code{gawk} specific features available via the @samp{-W}
-command line option (@pxref{Command Line, ,Invoking @code{awk}}).
-
-@item
-The @code{ARGIND} variable, that tracks the movement of @code{FILENAME}
-through @code{ARGV}. (@pxref{Built-in Variables}).
-
-@item
-The @code{ERRNO} variable, that contains the system error message when
-@code{getline} returns @minus{}1, or when @code{close} fails.
-(@pxref{Built-in Variables}).
-
-@item
-The @code{IGNORECASE} variable and its effects
-(@pxref{Case-sensitivity, ,Case-sensitivity in Matching}).@refill
-
-@item
-The @code{FIELDWIDTHS} variable and its effects
-(@pxref{Constant Size, ,Reading Fixed-width Data}).@refill
-
-@item
-The @code{next file} statement for skipping to the next data file
-(@pxref{Next File Statement, ,The @code{next file} Statement}).@refill
-
-@item
-The @code{systime} and @code{strftime} built-in functions for obtaining
-and printing time stamps
-(@pxref{Time Functions, ,Functions for Dealing with Time Stamps}).@refill
-
-@item
-The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr}, and
-@file{/dev/fd/@var{n}} file name interpretation
-(@pxref{Special Files, ,Standard I/O Streams}).@refill
-
-@item
-The @samp{-W compat} option to turn off these extensions
-(@pxref{Command Line, ,Invoking @code{awk}}).@refill
-
-@item
-The @samp{-W posix} option for full @sc{posix} compliance
-(@pxref{Command Line, ,Invoking @code{awk}}).@refill
-
-@end itemize
-
-@node Installation, Gawk Summary, Language History, Top
-@chapter Installing @code{gawk}
-
-This chapter provides instructions for installing @code{gawk} on the
-various platforms that are supported by the developers. The primary
-developers support Unix (and one day, GNU), while the other ports were
-contributed. The file @file{ACKNOWLEDGMENT} in the @code{gawk}
-distribution lists the electronic mail addresses of the people who did
-the respective ports.@refill
-
-@menu
-* Gawk Distribution:: What is in the @code{gawk} distribution.
-* Unix Installation:: Installing @code{gawk} under various versions
- of Unix.
-* VMS Installation:: Installing @code{gawk} on VMS.
-* MS-DOS Installation:: Installing @code{gawk} on MS-DOS.
-* Atari Installation:: Installing @code{gawk} on the Atari ST.
-@end menu
-
-@node Gawk Distribution, Unix Installation, Installation, Installation
-@section The @code{gawk} Distribution
-
-This section first describes how to get and extract the @code{gawk}
-distribution, and then discusses what is in the various files and
-subdirectories.
-
-@menu
-* Extracting:: How to get and extract the distribution.
-* Distribution contents:: What is in the distribution.
-@end menu
-
-@node Extracting, Distribution contents, Gawk Distribution, Gawk Distribution
-@subsection Getting the @code{gawk} Distribution
-
-@cindex getting gawk
-@cindex anonymous ftp
-@cindex anonymous uucp
-@cindex ftp, anonymous
-@cindex uucp, anonymous
-@code{gawk} is distributed as a @code{tar} file compressed with the
-GNU Zip program, @code{gzip}. You can
-get it via anonymous @code{ftp} to the Internet host @code{prep.ai.mit.edu}.
-Like all GNU software, it will be archived at other well known systems,
-from which it will be possible to use some sort of anonymous @code{uucp} to
-obtain the distribution as well.
-You can also order @code{gawk} on tape or CD-ROM directly from the
-Free Software Foundation. (The address is on the copyright page.)
-Doing so directly contributes to the support of the foundation and to
-the production of more free software.
-
-Once you have the distribution (for example,
-@file{gawk-2.15.0.tar.z}), first use @code{gzip} to expand the
-file, and then use @code{tar} to extract it. You can use the following
-pipeline to produce the @code{gawk} distribution:
-
-@example
-# Under System V, add 'o' to the tar flags
-gzip -d -c gawk-2.15.0.tar.z | tar -xvpf -
-@end example
-
-@noindent
-This will create a directory named @file{gawk-2.15} in the current
-directory.
-
-The distribution file name is of the form @file{gawk-2.15.@var{n}.tar.Z}.
-The @var{n} represents a @dfn{patchlevel}, meaning that minor bugs have
-been fixed in the major release. The current patchlevel is 0, but when
-retrieving distributions, you should get the version with the highest
-patchlevel.@refill
-
-If you are not on a Unix system, you will need to make other arrangements
-for getting and extracting the @code{gawk} distribution. You should consult
-a local expert.
-
-@node Distribution contents, , Extracting, Gawk Distribution
-@subsection Contents of the @code{gawk} Distribution
-
-@code{gawk} has a number of C source files, documentation files,
-subdirectories and files related to the configuration process
-(@pxref{Unix Installation, ,Compiling and Installing @code{gawk} on Unix}),
-and several subdirectories related to different, non-Unix,
-operating systems.@refill
-
-@table @asis
-@item various @samp{.c}, @samp{.y}, and @samp{.h} files
-
-The C and YACC source files are the actual @code{gawk} source code.
-@end table
-
-@table @file
-@item README
-@itemx README.VMS
-@itemx README.dos
-@itemx README.rs6000
-@itemx README.ultrix
-Descriptive files: @file{README} for @code{gawk} under Unix, and the
-rest for the various hardware and software combinations.
-
-@item PORTS
-A list of systems to which @code{gawk} has been ported, and which
-have successfully run the test suite.
-
-@item ACKNOWLEDGMENT
-A list of the people who contributed major parts of the code or documentation.
-
-@item NEWS
-A list of changes to @code{gawk} since the last release or patch.
-
-@item COPYING
-The GNU General Public License.
-
-@item FUTURES
-A brief list of features and/or changes being contemplated for future
-releases, with some indication of the time frame for the feature, based
-on its difficulty.
-
-@item LIMITATIONS
-A list of those factors that limit @code{gawk}'s performance.
-Most of these depend on the hardware or operating system software, and
-are not limits in @code{gawk} itself.@refill
-
-@item PROBLEMS
-A file describing known problems with the current release.
-
-@item gawk.1
-The @code{troff} source for a manual page describing @code{gawk}.
-
-@item gawk.texinfo
-@ifinfo
-The @code{texinfo} source file for this Info file.
-It should be processed with @TeX{} to produce a printed manual, and
-with @code{makeinfo} to produce the Info file.@refill
-@end ifinfo
-@iftex
-The @code{texinfo} source file for this manual.
-It should be processed with @TeX{} to produce a printed manual, and
-with @code{makeinfo} to produce the Info file.@refill
-@end iftex
-
-@item Makefile.in
-@itemx config
-@itemx config.in
-@itemx configure
-@itemx missing
-@itemx mungeconf
-These files and subdirectories are used when configuring @code{gawk}
-for various Unix systems. They are explained in detail in
-@ref{Unix Installation, ,Compiling and Installing @code{gawk} on Unix}.@refill
-
-@item atari
-Files needed for building @code{gawk} on an Atari ST.
-@xref{Atari Installation, ,Installing @code{gawk} on the Atari ST}, for details.
-
-@item pc
-Files needed for building @code{gawk} under MS-DOS.
-@xref{MS-DOS Installation, ,Installing @code{gawk} on MS-DOS}, for details.
-
-@item vms
-Files needed for building @code{gawk} under VMS.
-@xref{VMS Installation, ,Compiling Installing and Running @code{gawk} on VMS}, for details.
-
-@item test
-Many interesting @code{awk} programs, provided as a test suite for
-@code{gawk}. You can use @samp{make test} from the top level @code{gawk}
-directory to run your version of @code{gawk} against the test suite.
-@c There are many programs here that are useful in their own right.
-If @code{gawk} successfully passes @samp{make test} then you can
-be confident of a successful port.@refill
-@end table
-
-@node Unix Installation, VMS Installation, Gawk Distribution, Installation
-@section Compiling and Installing @code{gawk} on Unix
-
-Often, you can compile and install @code{gawk} by typing only two
-commands. However, if you do not use a supported system, you may need
-to configure @code{gawk} for your system yourself.
-
-@menu
-* Quick Installation:: Compiling @code{gawk} on a
- supported Unix version.
-* Configuration Philosophy:: How it's all supposed to work.
-* New Configurations:: What to do if there is no supplied
- configuration for your system.
-@end menu
-
-@node Quick Installation, Configuration Philosophy, Unix Installation, Unix Installation
-@subsection Compiling @code{gawk} for a Supported Unix Version
-
-@cindex installation, unix
-After you have extracted the @code{gawk} distribution, @code{cd}
-to @file{gawk-2.15}. Look in the @file{config} subdirectory for a
-file that matches your hardware/software combination. In general,
-only the software is relevant; for example @code{sunos41} is used
-for SunOS 4.1, on both Sun 3 and Sun 4 hardware.@refill
-
-If you find such a file, run the command:
-
-@example
-# assume you have SunOS 4.1
-./configure sunos41
-@end example
-
-This produces a @file{Makefile} and @file{config.h} tailored to your
-system. You may wish to edit the @file{Makefile} to use a different
-C compiler, such as @code{gcc}, the GNU C compiler, if you have it.
-You may also wish to change the @code{CFLAGS} variable, which controls
-the command line options that are passed to the C compiler (such as
-optimization levels, or compiling for debugging).@refill
-
-After you have configured @file{Makefile} and @file{config.h}, type:
-
-@example
-make
-@end example
-
-@noindent
-and shortly thereafter, you should have an executable version of @code{gawk}.
-That's all there is to it!
-
-@node Configuration Philosophy, New Configurations, Quick Installation, Unix Installation
-@subsection The Configuration Process
-
-(This section is of interest only if you know something about using the
-C language and the Unix operating system.)
-
-The source code for @code{gawk} generally attempts to adhere to industry
-standards wherever possible. This means that @code{gawk} uses library
-routines that are specified by the @sc{ansi} C standard and by the @sc{posix}
-operating system interface standard. When using an @sc{ansi} C compiler,
-function prototypes are provided to help improve the compile-time checking.
-
-Many older Unix systems do not support all of either the @sc{ansi} or the
-@sc{posix} standards. The @file{missing} subdirectory in the @code{gawk}
-distribution contains replacement versions of those subroutines that are
-most likely to be missing.
-
-The @file{config.h} file that is created by the @code{configure} program
-contains definitions that describe features of the particular operating
-system where you are attempting to compile @code{gawk}. For the most
-part, it lists which standard subroutines are @emph{not} available.
-For example, if your system lacks the @samp{getopt} routine, then
-@samp{GETOPT_MISSING} would be defined.
-
-@file{config.h} also defines constants that describe facts about your
-variant of Unix. For example, there may not be an @samp{st_blksize}
-element in the @code{stat} structure. In this case @samp{BLKSIZE_MISSING}
-would be defined.
-
-Based on the list in @file{config.h} of standard subroutines that are
-missing, @file{missing.c} will do a @samp{#include} of the appropriate
-file(s) from the @file{missing} subdirectory.@refill
-
-Conditionally compiled code in the other source files relies on the
-other definitions in the @file{config.h} file.
-
-Besides creating @file{config.h}, @code{configure} produces a @file{Makefile}
-from @file{Makefile.in}. There are a number of lines in @file{Makefile.in}
-that are system or feature specific. For example, there is line that begins
-with @samp{##MAKE_ALLOCA_C##}. This is normally a comment line, since
-it starts with @samp{#}. If a configuration file has @samp{MAKE_ALLOCA_C}
-in it, then @code{configure} will delete the @samp{##MAKE_ALLOCA_C##}
-from the beginning of the line. This will enable the rules in the
-@file{Makefile} that use a C version of @samp{alloca}. There are several
-similar features that work in this fashion.@refill
-
-@node New Configurations, , Configuration Philosophy, Unix Installation
-@subsection Configuring @code{gawk} for a New System
-
-(This section is of interest only if you know something about using the
-C language and the Unix operating system, and if you have to install
-@code{gawk} on a system that is not supported by the @code{gawk} distribution.
-If you are a C or Unix novice, get help from a local expert.)
-
-If you need to configure @code{gawk} for a Unix system that is not
-supported in the distribution, first see
-@ref{Configuration Philosophy, ,The Configuration Process}.
-Then, copy @file{config.in} to @file{config.h}, and copy
-@file{Makefile.in} to @file{Makefile}.@refill
-
-Next, edit both files. Both files are liberally commented, and the
-necessary changes should be straightforward.
-
-While editing @file{config.h}, you need to determine what library
-routines you do or do not have by consulting your system documentation, or
-by perusing your actual libraries using the @code{ar} or @code{nm} utilities.
-In the worst case, simply do not define @emph{any} of the macros for missing
-subroutines. When you compile @code{gawk}, the final link-editing step
-will fail. The link editor will provide you with a list of unresolved external
-references---these are the missing subroutines. Edit @file{config.h} again
-and recompile, and you should be set.@refill
-
-Editing the @file{Makefile} should also be straightforward. Enable or
-disable the lines that begin with @samp{##MAKE_@var{whatever}##}, as
-appropriate. Select the correct C compiler and @code{CFLAGS} for it.
-Then run @code{make}.
-
-Getting a correct configuration is likely to be an iterative process.
-Do not be discouraged if it takes you several tries. If you have no
-luck whatsoever, please report your system type, and the steps you took.
-Once you do have a working configuration, please send it to the maintainers
-so that support for your system can be added to the official release.
-
-@xref{Bugs, ,Reporting Problems and Bugs}, for information on how to report
-problems in configuring @code{gawk}. You may also use the same mechanisms
-for sending in new configurations.@refill
-
-@node VMS Installation, MS-DOS Installation, Unix Installation, Installation
-@section Compiling, Installing, and Running @code{gawk} on VMS
-
-@c based on material from
-@c Pat Rankin <rankin@eql.caltech.edu>
-
-@cindex installation, vms
-This section describes how to compile and install @code{gawk} under VMS.
-
-@menu
-* VMS Compilation:: How to compile @code{gawk} under VMS.
-* VMS Installation Details:: How to install @code{gawk} under VMS.
-* VMS Running:: How to run @code{gawk} under VMS.
-* VMS POSIX:: Alternate instructions for VMS POSIX.
-@end menu
-
-@node VMS Compilation, VMS Installation Details, VMS Installation, VMS Installation
-@subsection Compiling @code{gawk} under VMS
-
-To compile @code{gawk} under VMS, there is a @code{DCL} command procedure that
-will issue all the necessary @code{CC} and @code{LINK} commands, and there is
-also a @file{Makefile} for use with the @code{MMS} utility. From the source
-directory, use either
-
-@smallexample
-$ @@[.VMS]VMSBUILD.COM
-@end smallexample
-
-@noindent
-or
-
-@smallexample
-$ MMS/DESCRIPTION=[.VMS]DECSRIP.MMS GAWK
-@end smallexample
-
-Depending upon which C compiler you are using, follow one of the sets
-of instructions in this table:
-
-@table @asis
-@item VAX C V3.x
-Use either @file{vmsbuild.com} or @file{descrip.mms} as is. These use
-@code{CC/OPTIMIZE=NOLINE}, which is essential for Version 3.0.
-
-@item VAX C V2.x
-You must have Version 2.3 or 2.4; older ones won't work. Edit either
-@file{vmsbuild.com} or @file{descrip.mms} according to the comments in them.
-For @file{vmsbuild.com}, this just entails removing two @samp{!} delimiters.
-Also edit @file{config.h} (which is a copy of file @file{[.config]vms-conf.h})
-and comment out or delete the two lines @samp{#define __STDC__ 0} and
-@samp{#define VAXC_BUILTINS} near the end.@refill
-
-@item GNU C
-Edit @file{vmsbuild.com} or @file{descrip.mms}; the changes are different
-from those for VAX C V2.x, but equally straightforward. No changes to
-@file{config.h} should be needed.
-
-@item DEC C
-Edit @file{vmsbuild.com} or @file{descrip.mms} according to their comments.
-No changes to @file{config.h} should be needed.
-@end table
-
-@code{gawk} 2.15 has been tested under VAX/VMS 5.5-1 using VAX C V3.2,
-GNU C 1.40 and 2.3. It should work without modifications for VMS V4.6 and up.
-
-@node VMS Installation Details, VMS Running, VMS Compilation, VMS Installation
-@subsection Installing @code{gawk} on VMS
-
-To install @code{gawk}, all you need is a ``foreign'' command, which is
-a @code{DCL} symbol whose value begins with a dollar sign.
-
-@smallexample
-$ GAWK :== $device:[directory]GAWK
-@end smallexample
-
-@noindent
-(Substitute the actual location of @code{gawk.exe} for
-@samp{device:[directory]}.) The symbol should be placed in the
-@file{login.com} of any user who wishes to run @code{gawk},
-so that it will be defined every time the user logs on.
-Alternatively, the symbol may be placed in the system-wide
-@file{sylogin.com} procedure, which will allow all users
-to run @code{gawk}.@refill
-
-Optionally, the help entry can be loaded into a VMS help library:
-
-@smallexample
-$ LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP
-@end smallexample
-
-@noindent
-(You may want to substitute a site-specific help library rather than
-the standard VMS library @samp{HELPLIB}.) After loading the help text,
-
-@c this is so tiny, but `should' be smallexample for consistency sake...
-@c I didn't because it was so short. --mew 29jan1992
-@example
-$ HELP GAWK
-@end example
-
-@noindent
-will provide information about both the @code{gawk} implementation and the
-@code{awk} programming language.
-
-The logical name @samp{AWK_LIBRARY} can designate a default location
-for @code{awk} program files. For the @samp{-f} option, if the specified
-filename has no device or directory path information in it, @code{gawk}
-will look in the current directory first, then in the directory specified
-by the translation of @samp{AWK_LIBRARY} if the file was not found.
-If after searching in both directories, the file still is not found,
-then @code{gawk} appends the suffix @samp{.awk} to the filename and the
-file search will be re-tried. If @samp{AWK_LIBRARY} is not defined, that
-portion of the file search will fail benignly.@refill
-
-@node VMS Running, VMS POSIX, VMS Installation Details, VMS Installation
-@subsection Running @code{gawk} on VMS
-
-Command line parsing and quoting conventions are significantly different
-on VMS, so examples in this manual or from other sources often need minor
-changes. They @emph{are} minor though, and all @code{awk} programs
-should run correctly.
-
-Here are a couple of trivial tests:
-
-@smallexample
-$ gawk -- "BEGIN @{print ""Hello, World!""@}"
-$ gawk -"W" version ! could also be -"W version" or "-W version"
-@end smallexample
-
-@noindent
-Note that upper-case and mixed-case text must be quoted.
-
-The VMS port of @code{gawk} includes a @code{DCL}-style interface in addition
-to the original shell-style interface (see the help entry for details).
-One side-effect of dual command line parsing is that if there is only a
-single parameter (as in the quoted string program above), the command
-becomes ambiguous. To work around this, the normally optional @samp{--}
-flag is required to force Unix style rather than @code{DCL} parsing. If any
-other dash-type options (or multiple parameters such as data files to be
-processed) are present, there is no ambiguity and @samp{--} can be omitted.
-
-The default search path when looking for @code{awk} program files specified
-by the @samp{-f} option is @code{"SYS$DISK:[],AWK_LIBRARY:"}. The logical
-name @samp{AWKPATH} can be used to override this default. The format
-of @samp{AWKPATH} is a comma-separated list of directory specifications.
-When defining it, the value should be quoted so that it retains a single
-translation, and not a multi-translation @code{RMS} searchlist.
-
-@node VMS POSIX, , VMS Running, VMS Installation
-@subsection Building and using @code{gawk} under VMS POSIX
-
-Ignore the instructions above, although @file{vms/gawk.hlp} should still
-be made available in a help library. Make sure that the two scripts,
-@file{configure} and @file{mungeconf}, are executable; use @samp{chmod +x}
-on them if necessary. Then execute the following commands:
-
-@smallexample
-$ POSIX
-psx> configure vms-posix
-psx> make awktab.c gawk
-@end smallexample
-
-@noindent
-The first command will construct files @file{config.h} and @file{Makefile}
-out of templates. The second command will compile and link @code{gawk}.
-Due to a @code{make} bug in VMS POSIX V1.0 and V1.1,
-the file @file{awktab.c} must be given as an explicit target or it will
-not be built and the final link step will fail. Ignore the warning
-@samp{"Could not find lib m in lib list"}; it is harmless, caused by the
-explicit use of @samp{-lm} as a linker option which is not needed
-under VMS POSIX. Under V1.1 (but not V1.0) a problem with the @code{yacc}
-skeleton @file{/etc/yyparse.c} will cause a compiler warning for
-@file{awktab.c}, followed by a linker warning about compilation warnings
-in the resulting object module. These warnings can be ignored.@refill
-
-Once built, @code{gawk} will work like any other shell utility. Unlike
-the normal VMS port of @code{gawk}, no special command line manipulation is
-needed in the VMS POSIX environment.
-
-@node MS-DOS Installation, Atari Installation, VMS Installation, Installation
-@section Installing @code{gawk} on MS-DOS
-
-@cindex installation, ms-dos
-The first step is to get all the files in the @code{gawk} distribution
-onto your PC. Move all the files from the @file{pc} directory into
-the main directory where the other files are. Edit the file
-@file{make.bat} so that it will be an acceptable MS-DOS batch file.
-This means making sure that all lines are terminated with the ASCII
-carriage return and line feed characters.
-restrictions.
-
-@code{gawk} has only been compiled with version 5.1 of the Microsoft
-C compiler. The file @file{make.bat} from the @file{pc} directory
-assumes that you have this compiler.
-
-Copy the file @file{setargv.obj} from the library directory where it
-resides to the @code{gawk} source code directory.
-
-Run @file{make.bat}. This will compile @code{gawk} for you, and link it.
-That's all there is to it!
-
-@node Atari Installation, , MS-DOS Installation, Installation
-@section Installing @code{gawk} on the Atari ST
-
-@c based on material from
-@c Michal Jaegermann <ntomczak@vm.ucs.ualberta.ca>
-
-@cindex installation, atari
-This section assumes that you are running TOS. It applies to other Atari
-models (STe, TT) as well.
-
-In order to use @code{gawk}, you need to have a shell, either text or
-graphics, that does not map all the characters of a command line to
-upper case. Maintaining case distinction in option flags is very
-important (@pxref{Command Line, ,Invoking @code{awk}}). Popular shells
-like @code{gulam} or @code{gemini} will work, as will newer versions of
-@code{desktop}. Support for I/O redirection is necessary to make it easy
-to import @code{awk} programs from other environments. Pipes are nice to have,
-but not vital.
-
-If you have received an executable version of @code{gawk}, place it,
-as usual, anywhere in your @code{PATH} where your shell will find it.
-
-While executing, @code{gawk} creates a number of temporary files.
-@code{gawk} looks for either of the environment variables @code{TEMP}
-or @code{TMPDIR}, in that order. If either one is found, its value
-is assumed to be a directory for temporary files. This directory
-must exist, and if you can spare the memory, it is a good idea to
-put it on a @sc{ram} drive. If neither @code{TEMP} nor @code{TMPDIR}
-are found, then @code{gawk} uses the current directory for its
-temporary files.
-
-The ST version of @code{gawk} searches for its program files as
-described in @ref{AWKPATH Variable, ,The @code{AWKPATH} Environment Variable}.
-On the ST, the default value for the @code{AWKPATH} variable is
-@code{@w{".,c:\lib\awk,c:\gnu\lib\awk"}}.
-The search path can be modified by explicitly setting @code{AWKPATH} to
-whatever you wish. Note that colons cannot be used on the ST to separate
-elements in the @code{AWKPATH} variable, since they have another, reserved,
-meaning. Instead, you must use a comma to separate elements in the path.
-If you are recompiling @code{gawk} on the ST, then you can choose a new
-default search path, by setting the value of @samp{DEFPATH} in the file
-@file{...\config\atari}. You may choose a different separator character
-by setting the value of @samp{ENVSEP} in the same file. The new values will
-be used when creating the header file @file{config.h}.@refill
-
-@ignore
-As a last resort, small
-adjustments can be made directly on the executable version of @code{gawk}
-using a binary editor.@refill
-@end ignore
-
-Although @code{awk} allows great flexibility in doing I/O redirections
-from within a program, this facility should be used with care on the ST.
-In some circumstances the OS routines for file handle pool processing
-lose track of certain events, causing the computer to crash, and requiring
-a reboot. Often a warm reboot is sufficient. Fortunately, this happens
-infrequently, and in rather esoteric situations. In particular, avoid
-having one part of an @code{awk} program using @code{print}
-statements explicitly redirected to @code{"/dev/stdout"}, while other
-@code{print} statements use the default standard output, and a
-calling shell has redirected standard output to a file.@refill
-@c whew!
-
-When @code{gawk} is compiled with the ST version of @code{gcc} and its
-usual libraries, it will accept both @samp{/} and @samp{\} as path separators.
-While this is convenient, it should be remembered that this removes one,
-technically legal, character (@samp{/}) from your file names, and that
-it may create problems for external programs, called via the @code{system()}
-function, which may not support this convention. Whenever it is possible
-that a file created by @code{gawk} will be used by some other program,
-use only backslashes. Also remember that in @code{awk}, backslashes in
-strings have to be doubled in order to get literal backslashes.
-
-The initial port of @code{gawk} to the ST was done with @code{gcc}.
-If you wish to recompile @code{gawk} from scratch, you will need to use
-a compiler that accepts @sc{ansi} standard C (such as @code{gcc}, Turbo C,
-or Prospero C). If @code{sizeof(int) != @w{sizeof(int *)}}, the correctness
-of the generated code depends heavily on the fact that all function calls
-have function prototypes in the current scope. If your compiler does
-not accept function prototypes, you will probably have to add a
-number of casts to the code.@refill
-
-If you are using @code{gcc}, make sure that you have up-to-date libraries.
-Older versions have problems with some library functions (@code{atan2()},
-@code{strftime()}, the @samp{%g} conversion in @code{sprintf()}) which
-may affect the operation of @code{gawk}.
-
-In the @file{atari} subdirectory of the @code{gawk} distribution is
-a version of the @code{system()} function that has been tested with
-@code{gulam} and @code{msh}; it should work with other shells as well.
-With @code{gulam}, it passes the string to be executed without spawning
-an extra copy of a shell. It is possible to replace this version of
-@code{system()} with a similar function from a library or from some other
-source if that version would be a better choice for the shell you prefer.
-
-The files needed to recompile @code{gawk} on the ST can be found in
-the @file{atari} directory. The provided files and instructions below
-assume that you have the GNU C compiler (@code{gcc}), the @code{gulam} shell,
-and an ST version of @code{sed}. The @file{Makefile} is set up to use
-@file{byacc} as a @file{yacc} replacement. With a different set of tools some
-adjustments and/or editing will be needed.@refill
-
-@code{cd} to the @file{atari} directory. Copy @file{Makefile.st} to
-@file{makefile} in the source (parent) directory. Possibly adjust
-@file{../config/atari} to suit your system. Execute the script @file{mkconf.g}
-which will create the header file @file{../config.h}. Go back to the source
-directory. If you are not using @code{gcc}, check the file @file{missing.c}.
-It may be necessary to change forward slashes in the references to files
-from the @file{atari} subdirectory into backslashes. Type @code{make} and
-enjoy.@refill
-
-Compilation with @code{gcc} of some of the bigger modules, like
-@file{awk_tab.c}, may require a full four megabytes of memory. On smaller
-machines you would need to cut down on optimizations, or you would have to
-switch to another, less memory hungry, compiler.@refill
-
-@node Gawk Summary, Sample Program, Installation, Top
-@appendix @code{gawk} Summary
-
-This appendix provides a brief summary of the @code{gawk} command line and the
-@code{awk} language. It is designed to serve as ``quick reference.'' It is
-therefore terse, but complete.
-
-@menu
-* Command Line Summary:: Recapitulation of the command line.
-* Language Summary:: A terse review of the language.
-* Variables/Fields:: Variables, fields, and arrays.
-* Rules Summary:: Patterns and Actions, and their
- component parts.
-* Functions Summary:: Defining and calling functions.
-* Historical Features:: Some undocumented but supported ``features''.
-@end menu
-
-@node Command Line Summary, Language Summary, Gawk Summary, Gawk Summary
-@appendixsec Command Line Options Summary
-
-The command line consists of options to @code{gawk} itself, the
-@code{awk} program text (if not supplied via the @samp{-f} option), and
-values to be made available in the @code{ARGC} and @code{ARGV}
-predefined @code{awk} variables:
-
-@example
-awk @r{[@var{POSIX or GNU style options}]} -f source-file @r{[@code{--}]} @var{file} @dots{}
-awk @r{[@var{POSIX or GNU style options}]} @r{[@code{--}]} '@var{program}' @var{file} @dots{}
-@end example
-
-The options that @code{gawk} accepts are:
-
-@table @code
-@item -F @var{fs}
-@itemx --field-separator=@var{fs}
-Use @var{fs} for the input field separator (the value of the @code{FS}
-predefined variable).
-
-@item -f @var{program-file}
-@itemx --file=@var{program-file}
-Read the @code{awk} program source from the file @var{program-file}, instead
-of from the first command line argument.
-
-@item -v @var{var}=@var{val}
-@itemx --assign=@var{var}=@var{val}
-Assign the variable @var{var} the value @var{val} before program execution
-begins.
-
-@item -W compat
-@itemx --compat
-Specifies compatibility mode, in which @code{gawk} extensions are turned
-off.
-
-@item -W copyleft
-@itemx -W copyright
-@itemx --copyleft
-@itemx --copyright
-Print the short version of the General Public License on the error
-output. This option may disappear in a future version of @code{gawk}.
-
-@item -W help
-@itemx -W usage
-@itemx --help
-@itemx --usage
-Print a relatively short summary of the available options on the error output.
-
-@item -W lint
-@itemx --lint
-Give warnings about dubious or non-portable @code{awk} constructs.
-
-@item -W posix
-@itemx --posix
-Specifies @sc{posix} compatibility mode, in which @code{gawk} extensions
-are turned off and additional restrictions apply.
-
-@item -W source=@var{program-text}
-@itemx --source=@var{program-text}
-Use @var{program-text} as @code{awk} program source code. This option allows
-mixing command line source code with source code from files, and is
-particularly useful for mixing command line programs with library functions.
-
-@item -W version
-@itemx --version
-Print version information for this particular copy of @code{gawk} on the error
-output. This option may disappear in a future version of @code{gawk}.
-
-@item --
-Signal the end of options. This is useful to allow further arguments to the
-@code{awk} program itself to start with a @samp{-}. This is mainly for
-consistency with the argument parsing conventions of @sc{posix}.
-@end table
-
-Any other options are flagged as invalid, but are otherwise ignored.
-@xref{Command Line, ,Invoking @code{awk}}, for more details.
-
-@node Language Summary, Variables/Fields, Command Line Summary, Gawk Summary
-@appendixsec Language Summary
-
-An @code{awk} program consists of a sequence of pattern-action statements
-and optional function definitions.
-
-@example
-@var{pattern} @{ @var{action statements} @}
-
-function @var{name}(@var{parameter list}) @{ @var{action statements} @}
-@end example
-
-@code{gawk} first reads the program source from the
-@var{program-file}(s) if specified, or from the first non-option
-argument on the command line. The @samp{-f} option may be used multiple
-times on the command line. @code{gawk} reads the program text from all
-the @var{program-file} files, effectively concatenating them in the
-order they are specified. This is useful for building libraries of
-@code{awk} functions, without having to include them in each new
-@code{awk} program that uses them. To use a library function in a file
-from a program typed in on the command line, specify @samp{-f /dev/tty};
-then type your program, and end it with a @kbd{Control-d}.
-@xref{Command Line, ,Invoking @code{awk}}.@refill
-
-The environment variable @code{AWKPATH} specifies a search path to use
-when finding source files named with the @samp{-f} option. The default
-path, which is
-@samp{.:/usr/lib/awk:/usr/local/lib/awk} is used if @code{AWKPATH} is not set.
-If a file name given to the @samp{-f} option contains a @samp{/} character,
-no path search is performed.
-@xref{AWKPATH Variable, ,The @code{AWKPATH} Environment Variable},
-for a full description of the @code{AWKPATH} environment variable.@refill
-
-@code{gawk} compiles the program into an internal form, and then proceeds to
-read each file named in the @code{ARGV} array. If there are no files named
-on the command line, @code{gawk} reads the standard input.
-
-If a ``file'' named on the command line has the form
-@samp{@var{var}=@var{val}}, it is treated as a variable assignment: the
-variable @var{var} is assigned the value @var{val}.
-If any of the files have a value that is the null string, that
-element in the list is skipped.@refill
-
-For each line in the input, @code{gawk} tests to see if it matches any
-@var{pattern} in the @code{awk} program. For each pattern that the line
-matches, the associated @var{action} is executed.
-
-@node Variables/Fields, Rules Summary, Language Summary, Gawk Summary
-@appendixsec Variables and Fields
-
-@code{awk} variables are dynamic; they come into existence when they are
-first used. Their values are either floating-point numbers or strings.
-@code{awk} also has one-dimension arrays; multiple-dimensional arrays
-may be simulated. There are several predefined variables that
-@code{awk} sets as a program runs; these are summarized below.
-
-@menu
-* Fields Summary:: Input field splitting.
-* Built-in Summary:: @code{awk}'s built-in variables.
-* Arrays Summary:: Using arrays.
-* Data Type Summary:: Values in @code{awk} are numbers or strings.
-@end menu
-
-@node Fields Summary, Built-in Summary, Variables/Fields, Variables/Fields
-@appendixsubsec Fields
-
-As each input line is read, @code{gawk} splits the line into
-@var{fields}, using the value of the @code{FS} variable as the field
-separator. If @code{FS} is a single character, fields are separated by
-that character. Otherwise, @code{FS} is expected to be a full regular
-expression. In the special case that @code{FS} is a single blank,
-fields are separated by runs of blanks and/or tabs. Note that the value
-of @code{IGNORECASE} (@pxref{Case-sensitivity, ,Case-sensitivity in Matching})
-also affects how fields are split when @code{FS} is a regular expression.@refill
-
-Each field in the input line may be referenced by its position, @code{$1},
-@code{$2}, and so on. @code{$0} is the whole line. The value of a field may
-be assigned to as well. Field numbers need not be constants:
-
-@example
-n = 5
-print $n
-@end example
-
-@noindent
-prints the fifth field in the input line. The variable @code{NF} is set to
-the total number of fields in the input line.
-
-References to nonexistent fields (i.e., fields after @code{$NF}) return
-the null-string. However, assigning to a nonexistent field (e.g.,
-@code{$(NF+2) = 5}) increases the value of @code{NF}, creates any
-intervening fields with the null string as their value, and causes the
-value of @code{$0} to be recomputed, with the fields being separated by
-the value of @code{OFS}.@refill
-
-@xref{Reading Files, ,Reading Input Files}, for a full description of the
-way @code{awk} defines and uses fields.
-
-@node Built-in Summary, Arrays Summary, Fields Summary, Variables/Fields
-@appendixsubsec Built-in Variables
-
-@code{awk}'s built-in variables are:
-
-@table @code
-@item ARGC
-The number of command line arguments (not including options or the
-@code{awk} program itself).
-
-@item ARGIND
-The index in @code{ARGV} of the current file being processed.
-It is always true that @samp{FILENAME == ARGV[ARGIND]}.
-
-@item ARGV
-The array of command line arguments. The array is indexed from 0 to
-@code{ARGC} @minus{} 1. Dynamically changing the contents of @code{ARGV}
-can control the files used for data.@refill
-
-@item CONVFMT
-The conversion format to use when converting numbers to strings.
-
-@item FIELDWIDTHS
-A space separated list of numbers describing the fixed-width input data.
-
-@item ENVIRON
-An array containing the values of the environment variables. The array
-is indexed by variable name, each element being the value of that
-variable. Thus, the environment variable @code{HOME} would be in
-@code{ENVIRON["HOME"]}. Its value might be @file{/u/close}.
-
-Changing this array does not affect the environment seen by programs
-which @code{gawk} spawns via redirection or the @code{system} function.
-(This may change in a future version of @code{gawk}.)
-
-Some operating systems do not have environment variables.
-The array @code{ENVIRON} is empty when running on these systems.
-
-@item ERRNO
-The system error message when an error occurs using @code{getline}
-or @code{close}.
-
-@item FILENAME
-The name of the current input file. If no files are specified on the command
-line, the value of @code{FILENAME} is @samp{-}.
-
-@item FNR
-The input record number in the current input file.
-
-@item FS
-The input field separator, a blank by default.
-
-@item IGNORECASE
-The case-sensitivity flag for regular expression operations. If
-@code{IGNORECASE} has a nonzero value, then pattern matching in rules,
-field splitting with @code{FS}, regular expression matching with
-@samp{~} and @samp{!~}, and the @code{gsub}, @code{index}, @code{match},
-@code{split} and @code{sub} predefined functions all ignore case
-when doing regular expression operations.@refill
-
-@item NF
-The number of fields in the current input record.
-
-@item NR
-The total number of input records seen so far.
-
-@item OFMT
-The output format for numbers for the @code{print} statement,
-@code{"%.6g"} by default.
-
-@item OFS
-The output field separator, a blank by default.
-
-@item ORS
-The output record separator, by default a newline.
-
-@item RS
-The input record separator, by default a newline. @code{RS} is exceptional
-in that only the first character of its string value is used for separating
-records. If @code{RS} is set to the null string, then records are separated by
-blank lines. When @code{RS} is set to the null string, then the newline
-character always acts as a field separator, in addition to whatever value
-@code{FS} may have.@refill
-
-@item RSTART
-The index of the first character matched by @code{match}; 0 if no match.
-
-@item RLENGTH
-The length of the string matched by @code{match}; @minus{}1 if no match.
-
-@item SUBSEP
-The string used to separate multiple subscripts in array elements, by
-default @code{"\034"}.
-@end table
-
-@xref{Built-in Variables}, for more information.
-
-@node Arrays Summary, Data Type Summary, Built-in Summary, Variables/Fields
-@appendixsubsec Arrays
-
-Arrays are subscripted with an expression between square brackets
-(@samp{[} and @samp{]}). Array subscripts are @emph{always} strings;
-numbers are converted to strings as necessary, following the standard
-conversion rules
-(@pxref{Conversion, ,Conversion of Strings and Numbers}).@refill
-
-If you use multiple expressions separated by commas inside the square
-brackets, then the array subscript is a string consisting of the
-concatenation of the individual subscript values, converted to strings,
-separated by the subscript separator (the value of @code{SUBSEP}).
-
-The special operator @code{in} may be used in an @code{if} or
-@code{while} statement to see if an array has an index consisting of a
-particular value.
-
-@example
-if (val in array)
- print array[val]
-@end example
-
-If the array has multiple subscripts, use @code{(i, j, @dots{}) in array}
-to test for existence of an element.
-
-The @code{in} construct may also be used in a @code{for} loop to iterate
-over all the elements of an array.
-@xref{Scanning an Array, ,Scanning all Elements of an Array}.@refill
-
-An element may be deleted from an array using the @code{delete} statement.
-
-@xref{Arrays, ,Arrays in @code{awk}}, for more detailed information.
-
-@node Data Type Summary, , Arrays Summary, Variables/Fields
-@appendixsubsec Data Types
-
-The value of an @code{awk} expression is always either a number
-or a string.
-
-Certain contexts (such as arithmetic operators) require numeric
-values. They convert strings to numbers by interpreting the text
-of the string as a numeral. If the string does not look like a
-numeral, it converts to 0.
-
-Certain contexts (such as concatenation) require string values.
-They convert numbers to strings by effectively printing them
-with @code{sprintf}.
-@xref{Conversion, ,Conversion of Strings and Numbers}, for the details.@refill
-
-To force conversion of a string value to a number, simply add 0
-to it. If the value you start with is already a number, this
-does not change it.
-
-To force conversion of a numeric value to a string, concatenate it with
-the null string.
-
-The @code{awk} language defines comparisons as being done numerically if
-both operands are numeric, or if one is numeric and the other is a numeric
-string. Otherwise one or both operands are converted to strings and a
-string comparison is performed.
-
-Uninitialized variables have the string value @code{""} (the null, or
-empty, string). In contexts where a number is required, this is
-equivalent to 0.
-
-@xref{Variables}, for more information on variable naming and initialization;
-@pxref{Conversion, ,Conversion of Strings and Numbers}, for more information
-on how variable values are interpreted.@refill
-
-@node Rules Summary, Functions Summary, Variables/Fields, Gawk Summary
-@appendixsec Patterns and Actions
-
-@menu
-* Pattern Summary:: Quick overview of patterns.
-* Regexp Summary:: Quick overview of regular expressions.
-* Actions Summary:: Quick overview of actions.
-@end menu
-
-An @code{awk} program is mostly composed of rules, each consisting of a
-pattern followed by an action. The action is enclosed in @samp{@{} and
-@samp{@}}. Either the pattern may be missing, or the action may be
-missing, but, of course, not both. If the pattern is missing, the
-action is executed for every single line of input. A missing action is
-equivalent to this action,
-
-@example
-@{ print @}
-@end example
-
-@noindent
-which prints the entire line.
-
-Comments begin with the @samp{#} character, and continue until the end of the
-line. Blank lines may be used to separate statements. Normally, a statement
-ends with a newline, however, this is not the case for lines ending in a
-@samp{,}, @samp{@{}, @samp{?}, @samp{:}, @samp{&&}, or @samp{||}. Lines
-ending in @code{do} or @code{else} also have their statements automatically
-continued on the following line. In other cases, a line can be continued by
-ending it with a @samp{\}, in which case the newline is ignored.@refill
-
-Multiple statements may be put on one line by separating them with a @samp{;}.
-This applies to both the statements within the action part of a rule (the
-usual case), and to the rule statements.
-
-@xref{Comments, ,Comments in @code{awk} Programs}, for information on
-@code{awk}'s commenting convention;
-@pxref{Statements/Lines, ,@code{awk} Statements versus Lines}, for a
-description of the line continuation mechanism in @code{awk}.@refill
-
-@node Pattern Summary, Regexp Summary, Rules Summary, Rules Summary
-@appendixsubsec Patterns
-
-@code{awk} patterns may be one of the following:
-
-@example
-/@var{regular expression}/
-@var{relational expression}
-@var{pattern} && @var{pattern}
-@var{pattern} || @var{pattern}
-@var{pattern} ? @var{pattern} : @var{pattern}
-(@var{pattern})
-! @var{pattern}
-@var{pattern1}, @var{pattern2}
-BEGIN
-END
-@end example
-
-@code{BEGIN} and @code{END} are two special kinds of patterns that are not
-tested against the input. The action parts of all @code{BEGIN} rules are
-merged as if all the statements had been written in a single @code{BEGIN}
-rule. They are executed before any of the input is read. Similarly, all the
-@code{END} rules are merged, and executed when all the input is exhausted (or
-when an @code{exit} statement is executed). @code{BEGIN} and @code{END}
-patterns cannot be combined with other patterns in pattern expressions.
-@code{BEGIN} and @code{END} rules cannot have missing action parts.@refill
-
-For @samp{/@var{regular-expression}/} patterns, the associated statement is
-executed for each input line that matches the regular expression. Regular
-expressions are extensions of those in @code{egrep}, and are summarized below.
-
-A @var{relational expression} may use any of the operators defined below in
-the section on actions. These generally test whether certain fields match
-certain regular expressions.
-
-The @samp{&&}, @samp{||}, and @samp{!} operators are logical ``and,''
-logical ``or,'' and logical ``not,'' respectively, as in C. They do
-short-circuit evaluation, also as in C, and are used for combining more
-primitive pattern expressions. As in most languages, parentheses may be
-used to change the order of evaluation.
-
-The @samp{?:} operator is like the same operator in C. If the first
-pattern matches, then the second pattern is matched against the input
-record; otherwise, the third is matched. Only one of the second and
-third patterns is matched.
-
-The @samp{@var{pattern1}, @var{pattern2}} form of a pattern is called a
-range pattern. It matches all input lines starting with a line that
-matches @var{pattern1}, and continuing until a line that matches
-@var{pattern2}, inclusive. A range pattern cannot be used as an operand
-to any of the pattern operators.
-
-@xref{Patterns}, for a full description of the pattern part of @code{awk}
-rules.
-
-@node Regexp Summary, Actions Summary, Pattern Summary, Rules Summary
-@appendixsubsec Regular Expressions
-
-Regular expressions are the extended kind found in @code{egrep}.
-They are composed of characters as follows:
-
-@table @code
-@item @var{c}
-matches the character @var{c} (assuming @var{c} is a character with no
-special meaning in regexps).
-
-@item \@var{c}
-matches the literal character @var{c}.
-
-@item .
-matches any character except newline.
-
-@item ^
-matches the beginning of a line or a string.
-
-@item $
-matches the end of a line or a string.
-
-@item [@var{abc}@dots{}]
-matches any of the characters @var{abc}@dots{} (character class).
-
-@item [^@var{abc}@dots{}]
-matches any character except @var{abc}@dots{} and newline (negated
-character class).
-
-@item @var{r1}|@var{r2}
-matches either @var{r1} or @var{r2} (alternation).
-
-@item @var{r1r2}
-matches @var{r1}, and then @var{r2} (concatenation).
-
-@item @var{r}+
-matches one or more @var{r}'s.
-
-@item @var{r}*
-matches zero or more @var{r}'s.
-
-@item @var{r}?
-matches zero or one @var{r}'s.
-
-@item (@var{r})
-matches @var{r} (grouping).
-@end table
-
-@xref{Regexp, ,Regular Expressions as Patterns}, for a more detailed
-explanation of regular expressions.
-
-The escape sequences allowed in string constants are also valid in
-regular expressions (@pxref{Constants, ,Constant Expressions}).
-
-@node Actions Summary, , Regexp Summary, Rules Summary
-@appendixsubsec Actions
-
-Action statements are enclosed in braces, @samp{@{} and @samp{@}}.
-Action statements consist of the usual assignment, conditional, and looping
-statements found in most languages. The operators, control statements,
-and input/output statements available are patterned after those in C.
-
-@menu
-* Operator Summary:: @code{awk} operators.
-* Control Flow Summary:: The control statements.
-* I/O Summary:: The I/O statements.
-* Printf Summary:: A summary of @code{printf}.
-* Special File Summary:: Special file names interpreted internally.
-* Numeric Functions Summary:: Built-in numeric functions.
-* String Functions Summary:: Built-in string functions.
-* Time Functions Summary:: Built-in time functions.
-* String Constants Summary:: Escape sequences in strings.
-@end menu
-
-@node Operator Summary, Control Flow Summary, Actions Summary, Actions Summary
-@appendixsubsubsec Operators
-
-The operators in @code{awk}, in order of increasing precedence, are:
-
-@table @code
-@item = += -= *= /= %= ^=
-Assignment. Both absolute assignment (@code{@var{var}=@var{value}})
-and operator assignment (the other forms) are supported.
-
-@item ?:
-A conditional expression, as in C. This has the form @code{@var{expr1} ?
-@var{expr2} : @var{expr3}}. If @var{expr1} is true, the value of the
-expression is @var{expr2}; otherwise it is @var{expr3}. Only one of
-@var{expr2} and @var{expr3} is evaluated.@refill
-
-@item ||
-Logical ``or''.
-
-@item &&
-Logical ``and''.
-
-@item ~ !~
-Regular expression match, negated match.
-
-@item < <= > >= != ==
-The usual relational operators.
-
-@item @var{blank}
-String concatenation.
-
-@item + -
-Addition and subtraction.
-
-@item * / %
-Multiplication, division, and modulus.
-
-@item + - !
-Unary plus, unary minus, and logical negation.
-
-@item ^
-Exponentiation (@samp{**} may also be used, and @samp{**=} for the assignment
-operator, but they are not specified in the @sc{posix} standard).
-
-@item ++ --
-Increment and decrement, both prefix and postfix.
-
-@item $
-Field reference.
-@end table
-
-@xref{Expressions, ,Expressions as Action Statements}, for a full
-description of all the operators listed above.
-@xref{Fields, ,Examining Fields}, for a description of the field
-reference operator.@refill
-
-@node Control Flow Summary, I/O Summary, Operator Summary, Actions Summary
-@appendixsubsubsec Control Statements
-
-The control statements are as follows:
-
-@example
-if (@var{condition}) @var{statement} @r{[} else @var{statement} @r{]}
-while (@var{condition}) @var{statement}
-do @var{statement} while (@var{condition})
-for (@var{expr1}; @var{expr2}; @var{expr3}) @var{statement}
-for (@var{var} in @var{array}) @var{statement}
-break
-continue
-delete @var{array}[@var{index}]
-exit @r{[} @var{expression} @r{]}
-@{ @var{statements} @}
-@end example
-
-@xref{Statements, ,Control Statements in Actions}, for a full description
-of all the control statements listed above.
-
-@node I/O Summary, Printf Summary, Control Flow Summary, Actions Summary
-@appendixsubsubsec I/O Statements
-
-The input/output statements are as follows:
-
-@table @code
-@item getline
-Set @code{$0} from next input record; set @code{NF}, @code{NR}, @code{FNR}.
-
-@item getline <@var{file}
-Set @code{$0} from next record of @var{file}; set @code{NF}.
-
-@item getline @var{var}
-Set @var{var} from next input record; set @code{NF}, @code{FNR}.
-
-@item getline @var{var} <@var{file}
-Set @var{var} from next record of @var{file}.
-
-@item next
-Stop processing the current input record. The next input record is read and
-processing starts over with the first pattern in the @code{awk} program.
-If the end of the input data is reached, the @code{END} rule(s), if any,
-are executed.
-
-@item next file
-Stop processing the current input file. The next input record read comes
-from the next input file. @code{FILENAME} is updated, @code{FNR} is set to 1,
-and processing starts over with the first pattern in the @code{awk} program.
-If the end of the input data is reached, the @code{END} rule(s), if any,
-are executed.
-
-@item print
-Prints the current record.
-
-@item print @var{expr-list}
-Prints expressions.
-
-@item print @var{expr-list} > @var{file}
-Prints expressions on @var{file}.
-
-@item printf @var{fmt, expr-list}
-Format and print.
-
-@item printf @var{fmt, expr-list} > file
-Format and print on @var{file}.
-@end table
-
-Other input/output redirections are also allowed. For @code{print} and
-@code{printf}, @samp{>> @var{file}} appends output to the @var{file},
-and @samp{| @var{command}} writes on a pipe. In a similar fashion,
-@samp{@var{command} | getline} pipes input into @code{getline}.
-@code{getline} returns 0 on end of file, and @minus{}1 on an error.@refill
-
-@xref{Getline, ,Explicit Input with @code{getline}}, for a full description
-of the @code{getline} statement.
-@xref{Printing, ,Printing Output}, for a full description of @code{print} and
-@code{printf}. Finally, @pxref{Next Statement, ,The @code{next} Statement},
-for a description of how the @code{next} statement works.@refill
-
-@node Printf Summary, Special File Summary, I/O Summary, Actions Summary
-@appendixsubsubsec @code{printf} Summary
-
-The @code{awk} @code{printf} statement and @code{sprintf} function
-accept the following conversion specification formats:
-
-@table @code
-@item %c
-An ASCII character. If the argument used for @samp{%c} is numeric, it is
-treated as a character and printed. Otherwise, the argument is assumed to
-be a string, and the only first character of that string is printed.
-
-@item %d
-@itemx %i
-A decimal number (the integer part).
-
-@item %e
-A floating point number of the form
-@samp{@r{[}-@r{]}d.ddddddE@r{[}+-@r{]}dd}.@refill
-
-@item %f
-A floating point number of the form
-@r{[}@code{-}@r{]}@code{ddd.dddddd}.
-
-@item %g
-Use @samp{%e} or @samp{%f} conversion, whichever produces a shorter string,
-with nonsignificant zeros suppressed.
-
-@item %o
-An unsigned octal number (again, an integer).
-
-@item %s
-A character string.
-
-@item %x
-An unsigned hexadecimal number (an integer).
-
-@item %X
-Like @samp{%x}, except use @samp{A} through @samp{F} instead of @samp{a}
-through @samp{f} for decimal 10 through 15.@refill
-
-@item %%
-A single @samp{%} character; no argument is converted.
-@end table
-
-There are optional, additional parameters that may lie between the @samp{%}
-and the control letter:
-
-@table @code
-@item -
-The expression should be left-justified within its field.
-
-@item @var{width}
-The field should be padded to this width. If @var{width} has a leading zero,
-then the field is padded with zeros. Otherwise it is padded with blanks.
-
-@item .@var{prec}
-A number indicating the maximum width of strings or digits to the right
-of the decimal point.
-@end table
-
-Either or both of the @var{width} and @var{prec} values may be specified
-as @samp{*}. In that case, the particular value is taken from the argument
-list.
-
-@xref{Printf, ,Using @code{printf} Statements for Fancier Printing}, for
-examples and for a more detailed description.
-
-@node Special File Summary, Numeric Functions Summary, Printf Summary, Actions Summary
-@appendixsubsubsec Special File Names
-
-When doing I/O redirection from either @code{print} or @code{printf} into a
-file, or via @code{getline} from a file, @code{gawk} recognizes certain special
-file names internally. These file names allow access to open file descriptors
-inherited from @code{gawk}'s parent process (usually the shell). The
-file names are:
-
-@table @file
-@item /dev/stdin
-The standard input.
-
-@item /dev/stdout
-The standard output.
-
-@item /dev/stderr
-The standard error output.
-
-@item /dev/fd/@var{n}
-The file denoted by the open file descriptor @var{n}.
-@end table
-
-In addition the following files provide process related information
-about the running @code{gawk} program.
-
-@table @file
-@item /dev/pid
-Reading this file returns the process ID of the current process,
-in decimal, terminated with a newline.
-
-@item /dev/ppid
-Reading this file returns the parent process ID of the current process,
-in decimal, terminated with a newline.
-
-@item /dev/pgrpid
-Reading this file returns the process group ID of the current process,
-in decimal, terminated with a newline.
-
-@item /dev/user
-Reading this file returns a single record terminated with a newline.
-The fields are separated with blanks. The fields represent the
-following information:
-
-@table @code
-@item $1
-The value of the @code{getuid} system call.
-
-@item $2
-The value of the @code{geteuid} system call.
-
-@item $3
-The value of the @code{getgid} system call.
-
-@item $4
-The value of the @code{getegid} system call.
-@end table
-
-If there are any additional fields, they are the group IDs returned by
-@code{getgroups} system call.
-(Multiple groups may not be supported on all systems.)@refill
-@end table
-
-@noindent
-These file names may also be used on the command line to name data files.
-These file names are only recognized internally if you do not
-actually have files by these names on your system.
-
-@xref{Special Files, ,Standard I/O Streams}, for a longer description that
-provides the motivation for this feature.
-
-@node Numeric Functions Summary, String Functions Summary, Special File Summary, Actions Summary
-@appendixsubsubsec Numeric Functions
-
-@code{awk} has the following predefined arithmetic functions:
-
-@table @code
-@item atan2(@var{y}, @var{x})
-returns the arctangent of @var{y/x} in radians.
-
-@item cos(@var{expr})
-returns the cosine in radians.
-
-@item exp(@var{expr})
-the exponential function.
-
-@item int(@var{expr})
-truncates to integer.
-
-@item log(@var{expr})
-the natural logarithm function.
-
-@item rand()
-returns a random number between 0 and 1.
-
-@item sin(@var{expr})
-returns the sine in radians.
-
-@item sqrt(@var{expr})
-the square root function.
-
-@item srand(@var{expr})
-use @var{expr} as a new seed for the random number generator. If no @var{expr}
-is provided, the time of day is used. The return value is the previous
-seed for the random number generator.
-@end table
-
-@node String Functions Summary, Time Functions Summary, Numeric Functions Summary, Actions Summary
-@appendixsubsubsec String Functions
-
-@code{awk} has the following predefined string functions:
-
-@table @code
-@item gsub(@var{r}, @var{s}, @var{t})
-for each substring matching the regular expression @var{r} in the string
-@var{t}, substitute the string @var{s}, and return the number of substitutions.
-If @var{t} is not supplied, use @code{$0}.
-
-@item index(@var{s}, @var{t})
-returns the index of the string @var{t} in the string @var{s}, or 0 if
-@var{t} is not present.
-
-@item length(@var{s})
-returns the length of the string @var{s}. The length of @code{$0}
-is returned if no argument is supplied.
-
-@item match(@var{s}, @var{r})
-returns the position in @var{s} where the regular expression @var{r}
-occurs, or 0 if @var{r} is not present, and sets the values of @code{RSTART}
-and @code{RLENGTH}.
-
-@item split(@var{s}, @var{a}, @var{r})
-splits the string @var{s} into the array @var{a} on the regular expression
-@var{r}, and returns the number of fields. If @var{r} is omitted, @code{FS}
-is used instead.
-
-@item sprintf(@var{fmt}, @var{expr-list})
-prints @var{expr-list} according to @var{fmt}, and returns the resulting string.
-
-@item sub(@var{r}, @var{s}, @var{t})
-this is just like @code{gsub}, but only the first matching substring is
-replaced.
-
-@item substr(@var{s}, @var{i}, @var{n})
-returns the @var{n}-character substring of @var{s} starting at @var{i}.
-If @var{n} is omitted, the rest of @var{s} is used.
-
-@item tolower(@var{str})
-returns a copy of the string @var{str}, with all the upper-case characters in
-@var{str} translated to their corresponding lower-case counterparts.
-Nonalphabetic characters are left unchanged.
-
-@item toupper(@var{str})
-returns a copy of the string @var{str}, with all the lower-case characters in
-@var{str} translated to their corresponding upper-case counterparts.
-Nonalphabetic characters are left unchanged.
-
-@item system(@var{cmd-line})
-Execute the command @var{cmd-line}, and return the exit status.
-@end table
-
-@node Time Functions Summary, String Constants Summary, String Functions Summary, Actions Summary
-@appendixsubsubsec Built-in time functions
-
-The following two functions are available for getting the current
-time of day, and for formatting time stamps.
-
-@table @code
-@item systime()
-returns the current time of day as the number of seconds since a particular
-epoch (Midnight, January 1, 1970 @sc{utc}, on @sc{posix} systems).
-
-@item strftime(@var{format}, @var{timestamp})
-formats @var{timestamp} according to the specification in @var{format}.
-The current time of day is used if no @var{timestamp} is supplied.
-@xref{Time Functions, ,Functions for Dealing with Time Stamps}, for the
-details on the conversion specifiers that @code{strftime} accepts.@refill
-@end table
-
-@iftex
-@xref{Built-in, ,Built-in Functions}, for a description of all of
-@code{awk}'s built-in functions.
-@end iftex
-
-@node String Constants Summary, , Time Functions Summary, Actions Summary
-@appendixsubsubsec String Constants
-
-String constants in @code{awk} are sequences of characters enclosed
-between double quotes (@code{"}). Within strings, certain @dfn{escape sequences}
-are recognized, as in C. These are:
-
-@table @code
-@item \\
-A literal backslash.
-
-@item \a
-The ``alert'' character; usually the ASCII BEL character.
-
-@item \b
-Backspace.
-
-@item \f
-Formfeed.
-
-@item \n
-Newline.
-
-@item \r
-Carriage return.
-
-@item \t
-Horizontal tab.
-
-@item \v
-Vertical tab.
-
-@item \x@var{hex digits}
-The character represented by the string of hexadecimal digits following
-the @samp{\x}. As in @sc{ansi} C, all following hexadecimal digits are
-considered part of the escape sequence. (This feature should tell us
-something about language design by committee.) E.g., @code{"\x1B"} is a
-string containing the ASCII ESC (escape) character. (The @samp{\x}
-escape sequence is not in @sc{posix} @code{awk}.)
-
-@item \@var{ddd}
-The character represented by the 1-, 2-, or 3-digit sequence of octal
-digits. Thus, @code{"\033"} is also a string containing the ASCII ESC
-(escape) character.
-
-@item \@var{c}
-The literal character @var{c}.
-@end table
-
-The escape sequences may also be used inside constant regular expressions
-(e.g., the regexp @code{@w{/[@ \t\f\n\r\v]/}} matches whitespace
-characters).@refill
-
-@xref{Constants, ,Constant Expressions}.
-
-@node Functions Summary, Historical Features, Rules Summary, Gawk Summary
-@appendixsec Functions
-
-Functions in @code{awk} are defined as follows:
-
-@example
-function @var{name}(@var{parameter list}) @{ @var{statements} @}
-@end example
-
-Actual parameters supplied in the function call are used to instantiate
-the formal parameters declared in the function. Arrays are passed by
-reference, other variables are passed by value.
-
-If there are fewer arguments passed than there are names in @var{parameter-list},
-the extra names are given the null string as value. Extra names have the
-effect of local variables.
-
-The open-parenthesis in a function call of a user-defined function must
-immediately follow the function name, without any intervening white space.
-This is to avoid a syntactic ambiguity with the concatenation operator.
-
-The word @code{func} may be used in place of @code{function} (but not in
-@sc{posix} @code{awk}).
-
-Use the @code{return} statement to return a value from a function.
-
-@xref{User-defined, ,User-defined Functions}, for a more complete description.
-
-@node Historical Features, , Functions Summary, Gawk Summary
-@appendixsec Historical Features
-
-There are two features of historical @code{awk} implementations that
-@code{gawk} supports. First, it is possible to call the @code{length}
-built-in function not only with no arguments, but even without parentheses!
-
-@example
-a = length
-@end example
-
-@noindent
-is the same as either of
-
-@example
-a = length()
-a = length($0)
-@end example
-
-@noindent
-This feature is marked as ``deprecated'' in the @sc{posix} standard, and
-@code{gawk} will issue a warning about its use if @samp{-W lint} is
-specified on the command line.
-
-The other feature is the use of the @code{continue} statement outside the
-body of a @code{while}, @code{for}, or @code{do} loop. Traditional
-@code{awk} implementations have treated such usage as equivalent to the
-@code{next} statement. @code{gawk} will support this usage if @samp{-W posix}
-has not been specified.
-
-@node Sample Program, Bugs, Gawk Summary, Top
-@appendix Sample Program
-
-The following example is a complete @code{awk} program, which prints
-the number of occurrences of each word in its input. It illustrates the
-associative nature of @code{awk} arrays by using strings as subscripts. It
-also demonstrates the @samp{for @var{x} in @var{array}} construction.
-Finally, it shows how @code{awk} can be used in conjunction with other
-utility programs to do a useful task of some complexity with a minimum of
-effort. Some explanations follow the program listing.@refill
-
-@example
-awk '
-# Print list of word frequencies
-@{
- for (i = 1; i <= NF; i++)
- freq[$i]++
-@}
-
-END @{
- for (word in freq)
- printf "%s\t%d\n", word, freq[word]
-@}'
-@end example
-
-The first thing to notice about this program is that it has two rules. The
-first rule, because it has an empty pattern, is executed on every line of
-the input. It uses @code{awk}'s field-accessing mechanism
-(@pxref{Fields, ,Examining Fields}) to pick out the individual words from
-the line, and the built-in variable @code{NF} (@pxref{Built-in Variables})
-to know how many fields are available.@refill
-
-For each input word, an element of the array @code{freq} is incremented to
-reflect that the word has been seen an additional time.@refill
-
-The second rule, because it has the pattern @code{END}, is not executed
-until the input has been exhausted. It prints out the contents of the
-@code{freq} table that has been built up inside the first action.@refill
-
-Note that this program has several problems that would prevent it from being
-useful by itself on real text files:@refill
-
-@itemize @bullet
-@item
-Words are detected using the @code{awk} convention that fields are
-separated by whitespace and that other characters in the input (except
-newlines) don't have any special meaning to @code{awk}. This means that
-punctuation characters count as part of words.@refill
-
-@item
-The @code{awk} language considers upper and lower case characters to be
-distinct. Therefore, @samp{foo} and @samp{Foo} are not treated by this
-program as the same word. This is undesirable since in normal text, words
-are capitalized if they begin sentences, and a frequency analyzer should not
-be sensitive to that.@refill
-
-@item
-The output does not come out in any useful order. You're more likely to be
-interested in which words occur most frequently, or having an alphabetized
-table of how frequently each word occurs.@refill
-@end itemize
-
-The way to solve these problems is to use some of the more advanced
-features of the @code{awk} language. First, we use @code{tolower} to remove
-case distinctions. Next, we use @code{gsub} to remove punctuation
-characters. Finally, we use the system @code{sort} utility to process the
-output of the @code{awk} script. First, here is the new version of
-the program:@refill
-
-@example
-awk '
-# Print list of word frequencies
-@{
- $0 = tolower($0) # remove case distinctions
- gsub(/[^a-z0-9_ \t]/, "", $0) # remove punctuation
- for (i = 1; i <= NF; i++)
- freq[$i]++
-@}
-
-END @{
- for (word in freq)
- printf "%s\t%d\n", word, freq[word]
-@}'
-@end example
-
-Assuming we have saved this program in a file named @file{frequency.awk},
-and that the data is in @file{file1}, the following pipeline
-
-@example
-awk -f frequency.awk file1 | sort +1 -nr
-@end example
-
-@noindent
-produces a table of the words appearing in @file{file1} in order of
-decreasing frequency.
-
-The @code{awk} program suitably massages the data and produces a word
-frequency table, which is not ordered.
-
-The @code{awk} script's output is then sorted by the @code{sort} command and
-printed on the terminal. The options given to @code{sort} in this example
-specify to sort using the second field of each input line (skipping one field),
-that the sort keys should be treated as numeric quantities (otherwise
-@samp{15} would come before @samp{5}), and that the sorting should be done
-in descending (reverse) order.@refill
-
-We could have even done the @code{sort} from within the program, by
-changing the @code{END} action to:
-
-@example
-END @{
- sort = "sort +1 -nr"
- for (word in freq)
- printf "%s\t%d\n", word, freq[word] | sort
- close(sort)
-@}'
-@end example
-
-See the general operating system documentation for more information on how
-to use the @code{sort} command.@refill
-
-@ignore
-@strong{ADR: I have some more substantial programs courtesy of Rick Adams
-at UUNET. I am planning on incorporating those either in addition to or
-instead of this program.}
-
-@strong{I would also like to incorporate the general @code{translate}
-function that I have written.}
-
-@strong{I have a ton of other sample programs to include too.}
-@end ignore
-
-@node Bugs, Notes, Sample Program, Top
-@appendix Reporting Problems and Bugs
-
-@c This chapter stolen shamelessly from the GNU m4 manual.
-@c This chapter has been unshamelessly altered to emulate changes made to
-@c make.texi from whence it was originally shamelessly stolen! :-} --mew
-
-If you have problems with @code{gawk} or think that you have found a bug,
-please report it to the developers; we cannot promise to do anything
-but we might well want to fix it.
-
-Before reporting a bug, make sure you have actually found a real bug.
-Carefully reread the documentation and see if it really says you can do
-what you're trying to do. If it's not clear whether you should be able
-to do something or not, report that too; it's a bug in the documentation!
-
-Before reporting a bug or trying to fix it yourself, try to isolate it
-to the smallest possible @code{awk} program and input data file that
-reproduces the problem. Then send us the program and data file,
-some idea of what kind of Unix system you're using, and the exact results
-@code{gawk} gave you. Also say what you expected to occur; this will help
-us decide whether the problem was really in the documentation.
-
-Once you have a precise problem, send e-mail to (Internet)
-@samp{bug-gnu-utils@@prep.ai.mit.edu} or (UUCP)
-@samp{mit-eddie!prep.ai.mit.edu!bug-gnu-utils}. Please include the
-version number of @code{gawk} you are using. You can get this information
-with the command @samp{gawk -W version '@{@}' /dev/null}.
-You should send carbon copies of your mail to David Trueman at
-@samp{david@@cs.dal.ca}, and to Arnold Robbins, who can be reached at
-@samp{arnold@@skeeve.atl.ga.us}. David is most likely to fix code
-problems, while Arnold is most likely to fix documentation problems.@refill
-
-Non-bug suggestions are always welcome as well. If you have questions
-about things that are unclear in the documentation or are just obscure
-features, ask Arnold Robbins; he will try to help you out, although he
-may not have the time to fix the problem. You can send him electronic mail at the Internet address
-above.
-
-If you find bugs in one of the non-Unix ports of @code{gawk}, please send
-an electronic mail message to the person who maintains that port. They
-are listed below, and also in the @file{README} file in the @code{gawk}
-distribution. Information in the @code{README} file should be considered
-authoritative if it conflicts with this manual.
-
-The people maintaining the non-Unix ports of @code{gawk} are:
-
-@table @asis
-@item MS-DOS
-The port to MS-DOS is maintained by Scott Deifik.
-His electronic mail address is @samp{scottd@@amgen.com}.
-
-@item VMS
-The port to VAX VMS is maintained by Pat Rankin.
-His electronic mail address is @samp{rankin@@eql.caltech.edu}.
-
-@item Atari ST
-The port to the Atari ST is maintained by Michal Jaegermann.
-His electronic mail address is @samp{ntomczak@@vm.ucs.ualberta.ca}.
-
-@end table
-
-If your bug is also reproducible under Unix, please send copies of your
-report to the general GNU bug list, as well as to Arnold Robbins and David
-Trueman, at the addresses listed above.
-
-@node Notes, Glossary, Bugs, Top
-@appendix Implementation Notes
-
-This appendix contains information mainly of interest to implementors and
-maintainers of @code{gawk}. Everything in it applies specifically to
-@code{gawk}, and not to other implementations.
-
-@menu
-* Compatibility Mode:: How to disable certain @code{gawk} extensions.
-* Future Extensions:: New features we may implement soon.
-* Improvements:: Suggestions for improvements by volunteers.
-@end menu
-
-@node Compatibility Mode, Future Extensions, Notes, Notes
-@appendixsec Downward Compatibility and Debugging
-
-@xref{POSIX/GNU, ,Extensions in @code{gawk} not in POSIX @code{awk}},
-for a summary of the GNU extensions to the @code{awk} language and program.
-All of these features can be turned off by invoking @code{gawk} with the
-@samp{-W compat} option, or with the @samp{-W posix} option.@refill
-
-If @code{gawk} is compiled for debugging with @samp{-DDEBUG}, then there
-is one more option available on the command line:
-
-@table @samp
-@item -W parsedebug
-Print out the parse stack information as the program is being parsed.
-@end table
-
-This option is intended only for serious @code{gawk} developers,
-and not for the casual user. It probably has not even been compiled into
-your version of @code{gawk}, since it slows down execution.
-
-@node Future Extensions, Improvements, Compatibility Mode, Notes
-@appendixsec Probable Future Extensions
-
-This section briefly lists extensions that indicate the directions we are
-currently considering for @code{gawk}. The file @file{FUTURES} in the
-@code{gawk} distributions lists these extensions, as well as several others.
-
-@table @asis
-@item @code{RS} as a regexp
-The meaning of @code{RS} may be generalized along the lines of @code{FS}.
-
-@item Control of subprocess environment
-Changes made in @code{gawk} to the array @code{ENVIRON} may be
-propagated to subprocesses run by @code{gawk}.
-
-@item Databases
-It may be possible to map a GDBM/NDBM/SDBM file into an @code{awk} array.
-
-@item Single-character fields
-The null string, @code{""}, as a field separator, will cause field
-splitting and the @code{split} function to separate individual characters.
-Thus, @code{split(a, "abcd", "")} would yield @code{a[1] == "a"},
-@code{a[2] == "b"}, and so on.
-
-@item More @code{lint} warnings
-There are more things that could be checked for portability.
-
-@item @code{RECLEN} variable for fixed length records
-Along with @code{FIELDWIDTHS}, this would speed up the processing of
-fixed-length records.
-
-@item @code{RT} variable to hold the record terminator
-It is occasionally useful to have access to the actual string of
-characters that matched the @code{RS} variable. The @code{RT}
-variable would hold these characters.
-
-@item A @code{restart} keyword
-After modifying @code{$0}, @code{restart} would restart the pattern
-matching loop, without reading a new record from the input.
-
-@item A @samp{|&} redirection
-The @samp{|&} redirection, in place of @samp{|}, would open a two-way
-pipeline for communication with a sub-process (via @code{getline} and
-@code{print} and @code{printf}).
-
-@item @code{IGNORECASE} affecting all comparisons
-The effects of the @code{IGNORECASE} variable may be generalized to
-all string comparisons, and not just regular expression operations.
-
-@item A way to mix command line source code and library files
-There may be a new option that would make it possible to easily use library
-functions from a program entered on the command line.
-@c probably a @samp{-s} option...
-
-@item GNU-style long options
-We will add GNU-style long options
-to @code{gawk} for compatibility with other GNU programs.
-(For example, @samp{--field-separator=:} would be equivalent to
-@samp{-F:}.)@refill
-
-@c this is @emph{very} long term --- not worth including right now.
-@ignore
-@item The C Comma Operator
-We may add the C comma operator, which takes the form
-@code{@var{expr1},@var{expr2}}. The first expression is evaluated, and the
-result is thrown away. The value of the full expression is the value of
-@var{expr2}.@refill
-@end ignore
-@end table
-
-@node Improvements, , Future Extensions, Notes
-@appendixsec Suggestions for Improvements
-
-Here are some projects that would-be @code{gawk} hackers might like to take
-on. They vary in size from a few days to a few weeks of programming,
-depending on which one you choose and how fast a programmer you are. Please
-send any improvements you write to the maintainers at the GNU
-project.@refill
-
-@enumerate
-@item
-Compilation of @code{awk} programs: @code{gawk} uses a Bison (YACC-like)
-parser to convert the script given it into a syntax tree; the syntax
-tree is then executed by a simple recursive evaluator. This method incurs
-a lot of overhead, since the recursive evaluator performs many procedure
-calls to do even the simplest things.@refill
-
-It should be possible for @code{gawk} to convert the script's parse tree
-into a C program which the user would then compile, using the normal
-C compiler and a special @code{gawk} library to provide all the needed
-functions (regexps, fields, associative arrays, type coercion, and so
-on).@refill
-
-An easier possibility might be for an intermediate phase of @code{awk} to
-convert the parse tree into a linear byte code form like the one used
-in GNU Emacs Lisp. The recursive evaluator would then be replaced by
-a straight line byte code interpreter that would be intermediate in speed
-between running a compiled program and doing what @code{gawk} does
-now.@refill
-
-This may actually happen for the 3.0 version of @code{gawk}.
-
-@item
-An error message section has not been included in this version of the
-manual. Perhaps some nice beta testers will document some of the messages
-for the future.
-
-@item
-The programs in the test suite could use documenting in this manual.
-
-@item
-The programs and data files in the manual should be available in
-separate files to facilitate experimentation.
-
-@item
-See the @file{FUTURES} file for more ideas. Contact us if you would
-seriously like to tackle any of the items listed there.
-@end enumerate
-
-@node Glossary, Index, Notes, Top
-@appendix Glossary
-
-@table @asis
-@item Action
-A series of @code{awk} statements attached to a rule. If the rule's
-pattern matches an input record, the @code{awk} language executes the
-rule's action. Actions are always enclosed in curly braces.
-@xref{Actions, ,Overview of Actions}.@refill
-
-@item Amazing @code{awk} Assembler
-Henry Spencer at the University of Toronto wrote a retargetable assembler
-completely as @code{awk} scripts. It is thousands of lines long, including
-machine descriptions for several 8-bit microcomputers.
-@c It is distributed with @code{gawk} (as part of the test suite) and
-It is a good example of a
-program that would have been better written in another language.@refill
-
-@item @sc{ansi}
-The American National Standards Institute. This organization produces
-many standards, among them the standard for the C programming language.
-
-@item Assignment
-An @code{awk} expression that changes the value of some @code{awk}
-variable or data object. An object that you can assign to is called an
-@dfn{lvalue}. @xref{Assignment Ops, ,Assignment Expressions}.@refill
-
-@item @code{awk} Language
-The language in which @code{awk} programs are written.
-
-@item @code{awk} Program
-An @code{awk} program consists of a series of @dfn{patterns} and
-@dfn{actions}, collectively known as @dfn{rules}. For each input record
-given to the program, the program's rules are all processed in turn.
-@code{awk} programs may also contain function definitions.@refill
-
-@item @code{awk} Script
-Another name for an @code{awk} program.
-
-@item Built-in Function
-The @code{awk} language provides built-in functions that perform various
-numerical, time stamp related, and string computations. Examples are
-@code{sqrt} (for the square root of a number) and @code{substr} (for a
-substring of a string). @xref{Built-in, ,Built-in Functions}.@refill
-
-@item Built-in Variable
-@code{ARGC}, @code{ARGIND}, @code{ARGV}, @code{CONVFMT}, @code{ENVIRON},
-@code{ERRNO}, @code{FIELDWIDTHS}, @code{FILENAME}, @code{FNR}, @code{FS},
-@code{IGNORECASE}, @code{NF}, @code{NR}, @code{OFMT}, @code{OFS}, @code{ORS},
-@code{RLENGTH}, @code{RSTART}, @code{RS}, and @code{SUBSEP},
-are the variables that have special
-meaning to @code{awk}. Changing some of them affects @code{awk}'s running
-environment. @xref{Built-in Variables}.@refill
-
-@item Braces
-See ``Curly Braces.''
-
-@item C
-The system programming language that most GNU software is written in. The
-@code{awk} programming language has C-like syntax, and this manual
-points out similarities between @code{awk} and C when appropriate.@refill
-
-@item CHEM
-A preprocessor for @code{pic} that reads descriptions of molecules
-and produces @code{pic} input for drawing them. It was written by
-Brian Kernighan, and is available from @code{netlib@@research.att.com}.@refill
-
-@item Compound Statement
-A series of @code{awk} statements, enclosed in curly braces. Compound
-statements may be nested.
-@xref{Statements, ,Control Statements in Actions}.@refill
-
-@item Concatenation
-Concatenating two strings means sticking them together, one after another,
-giving a new string. For example, the string @samp{foo} concatenated with
-the string @samp{bar} gives the string @samp{foobar}.
-@xref{Concatenation, ,String Concatenation}.@refill
-
-@item Conditional Expression
-An expression using the @samp{?:} ternary operator, such as
-@code{@var{expr1} ? @var{expr2} : @var{expr3}}. The expression
-@var{expr1} is evaluated; if the result is true, the value of the whole
-expression is the value of @var{expr2} otherwise the value is
-@var{expr3}. In either case, only one of @var{expr2} and @var{expr3}
-is evaluated. @xref{Conditional Exp, ,Conditional Expressions}.@refill
-
-@item Constant Regular Expression
-A constant regular expression is a regular expression written within
-slashes, such as @samp{/foo/}. This regular expression is chosen
-when you write the @code{awk} program, and cannot be changed doing
-its execution. @xref{Regexp Usage, ,How to Use Regular Expressions}.
-
-@item Comparison Expression
-A relation that is either true or false, such as @code{(a < b)}.
-Comparison expressions are used in @code{if}, @code{while}, and @code{for}
-statements, and in patterns to select which input records to process.
-@xref{Comparison Ops, ,Comparison Expressions}.@refill
-
-@item Curly Braces
-The characters @samp{@{} and @samp{@}}. Curly braces are used in
-@code{awk} for delimiting actions, compound statements, and function
-bodies.@refill
-
-@item Data Objects
-These are numbers and strings of characters. Numbers are converted into
-strings and vice versa, as needed.
-@xref{Conversion, ,Conversion of Strings and Numbers}.@refill
-
-@item Dynamic Regular Expression
-A dynamic regular expression is a regular expression written as an
-ordinary expression. It could be a string constant, such as
-@code{"foo"}, but it may also be an expression whose value may vary.
-@xref{Regexp Usage, ,How to Use Regular Expressions}.
-
-@item Escape Sequences
-A special sequence of characters used for describing nonprinting
-characters, such as @samp{\n} for newline, or @samp{\033} for the ASCII
-ESC (escape) character. @xref{Constants, ,Constant Expressions}.
-
-@item Field
-When @code{awk} reads an input record, it splits the record into pieces
-separated by whitespace (or by a separator regexp which you can
-change by setting the built-in variable @code{FS}). Such pieces are
-called fields. If the pieces are of fixed length, you can use the built-in
-variable @code{FIELDWIDTHS} to describe their lengths.
-@xref{Records, ,How Input is Split into Records}.@refill
-
-@item Format
-Format strings are used to control the appearance of output in the
-@code{printf} statement. Also, data conversions from numbers to strings
-are controlled by the format string contained in the built-in variable
-@code{CONVFMT}. @xref{Control Letters, ,Format-Control Letters}.@refill
-
-@item Function
-A specialized group of statements often used to encapsulate general
-or program-specific tasks. @code{awk} has a number of built-in
-functions, and also allows you to define your own.
-@xref{Built-in, ,Built-in Functions}.
-Also, see @ref{User-defined, ,User-defined Functions}.@refill
-
-@item @code{gawk}
-The GNU implementation of @code{awk}.
-
-@item GNU
-``GNU's not Unix''. An on-going project of the Free Software Foundation
-to create a complete, freely distributable, @sc{posix}-compliant computing
-environment.
-
-@item Input Record
-A single chunk of data read in by @code{awk}. Usually, an @code{awk} input
-record consists of one line of text.
-@xref{Records, ,How Input is Split into Records}.@refill
-
-@item Keyword
-In the @code{awk} language, a keyword is a word that has special
-meaning. Keywords are reserved and may not be used as variable names.
-
-@code{awk}'s keywords are:
-@code{if},
-@code{else},
-@code{while},
-@code{do@dots{}while},
-@code{for},
-@code{for@dots{}in},
-@code{break},
-@code{continue},
-@code{delete},
-@code{next},
-@code{function},
-@code{func},
-and @code{exit}.@refill
-
-@item Lvalue
-An expression that can appear on the left side of an assignment
-operator. In most languages, lvalues can be variables or array
-elements. In @code{awk}, a field designator can also be used as an
-lvalue.@refill
-
-@item Number
-A numeric valued data object. The @code{gawk} implementation uses double
-precision floating point to represent numbers.@refill
-
-@item Pattern
-Patterns tell @code{awk} which input records are interesting to which
-rules.
-
-A pattern is an arbitrary conditional expression against which input is
-tested. If the condition is satisfied, the pattern is said to @dfn{match}
-the input record. A typical pattern might compare the input record against
-a regular expression. @xref{Patterns}.@refill
-
-@item @sc{posix}
-The name for a series of standards being developed by the @sc{ieee}
-that specify a Portable Operating System interface. The ``IX'' denotes
-the Unix heritage of these standards. The main standard of interest for
-@code{awk} users is P1003.2, the Command Language and Utilities standard.
-
-@item Range (of input lines)
-A sequence of consecutive lines from the input file. A pattern
-can specify ranges of input lines for @code{awk} to process, or it can
-specify single lines. @xref{Patterns}.@refill
-
-@item Recursion
-When a function calls itself, either directly or indirectly.
-If this isn't clear, refer to the entry for ``recursion.''
-
-@item Redirection
-Redirection means performing input from other than the standard input
-stream, or output to other than the standard output stream.
-
-You can redirect the output of the @code{print} and @code{printf} statements
-to a file or a system command, using the @samp{>}, @samp{>>}, and @samp{|}
-operators. You can redirect input to the @code{getline} statement using
-the @samp{<} and @samp{|} operators.
-@xref{Redirection, ,Redirecting Output of @code{print} and @code{printf}}.@refill
-
-@item Regular Expression
-See ``regexp.''
-
-@item Regexp
-Short for @dfn{regular expression}. A regexp is a pattern that denotes a
-set of strings, possibly an infinite set. For example, the regexp
-@samp{R.*xp} matches any string starting with the letter @samp{R}
-and ending with the letters @samp{xp}. In @code{awk}, regexps are
-used in patterns and in conditional expressions. Regexps may contain
-escape sequences. @xref{Regexp, ,Regular Expressions as Patterns}.@refill
-
-@item Rule
-A segment of an @code{awk} program, that specifies how to process single
-input records. A rule consists of a @dfn{pattern} and an @dfn{action}.
-@code{awk} reads an input record; then, for each rule, if the input record
-satisfies the rule's pattern, @code{awk} executes the rule's action.
-Otherwise, the rule does nothing for that input record.@refill
-
-@item Side Effect
-A side effect occurs when an expression has an effect aside from merely
-producing a value. Assignment expressions, increment expressions and
-function calls have side effects. @xref{Assignment Ops, ,Assignment Expressions}.
-
-@item Special File
-A file name interpreted internally by @code{gawk}, instead of being handed
-directly to the underlying operating system. For example, @file{/dev/stdin}.
-@xref{Special Files, ,Standard I/O Streams}.
-
-@item Stream Editor
-A program that reads records from an input stream and processes them one
-or more at a time. This is in contrast with batch programs, which may
-expect to read their input files in entirety before starting to do
-anything, and with interactive programs, which require input from the
-user.@refill
-
-@item String
-A datum consisting of a sequence of characters, such as @samp{I am a
-string}. Constant strings are written with double-quotes in the
-@code{awk} language, and may contain escape sequences.
-@xref{Constants, ,Constant Expressions}.
-
-@item Whitespace
-A sequence of blank or tab characters occurring inside an input record or a
-string.@refill
-@end table
-
-@node Index, , Glossary, Top
-@unnumbered Index
-@printindex cp
-
-@summarycontents
-@contents
-@bye
-
-Unresolved Issues:
-------------------
-1. From: ntomczak@vm.ucs.ualberta.ca (Michal Jaegermann)
- Examples of usage tend to suggest that /../ and ".." delimiters
- can be used for regular expressions, even if definition is consistently
- using /../. I am not sure what the real rules are and in particular
- what of the following is a bug and what is a feature:
- # This program matches everything
- '"\(" { print }'
- # This one complains about mismatched parenthesis
- '$0 ~ "\(" { print }'
- # This one behaves in an expected manner
- '/\(/ { print }'
- You may also try to use "\(" as an argument to match() to see what
- will happen.
-
-2. From ADR.
-
- The posix (and original Unix!) notion of awk values as both number
- and string values needs to be put into the manual. This involves
- major and minor rewrites of most of the manual, but should help in
- clarifying many of the weirder points of the language.
-
-3. From ADR.
-
- The manual should be reorganized. Expressions should be introduced
- early, building up to regexps as expressions, and from there to their
- use as patterns and then in actions. Built-in vars should come earlier
- in the manual too. The 'expert info' sections marked with comments
- should get their own sections or subsections with nodes and titles.
- The manual should be gone over thoroughly for indexing.
-
-4. From ADR.
-
- Robert J. Chassell points out that awk programs should have some indication
- of how to use them. It would be useful to perhaps have a "programming
- style" section of the manual that would include this and other tips.
-
-5. From ADR in response to moraes@uunet.ca
- (This would make the beginnings of a good "puzzles" section...)
-
- Date: Mon, 2 Dec 91 10:08:05 EST
- From: gatech!cc!arnold (Arnold Robbins)
- To: cs.dal.ca!david, uunet.ca!moraes
- Subject: redirecting to /dev/stderr
- Cc: skeeve!arnold, boeing.com!brennan, research.att.com!bwk
-
- In 2.13.3 the following program no longer dumps core:
-
- BEGIN { print "hello" > /dev/stderr ; exit(1) }
-
- Instead, it creates a file named `0' with the word `hello' in it. AWK
- semantics strikes again. The meaning of the statement is
-
- print "hello" > (($0 ~ /dev/) stderr)
-
- /dev/ tests $0 for the pattern `dev'. This yields a 0. The variable stderr,
- having never been used, has a null string in it. The concatenation yields
- a string value of "0" which is used as the file name. Sigh.
-
- I think with some more time I can come up with a decent fix, but it will
- probably only print a diagnostic with -Wlint.
-
- Arnold
-
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info b/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info
deleted file mode 100644
index 060d932..0000000
--- a/gnu/usr.bin/cvs/contrib/pcl-cvs/pcl-cvs.info
+++ /dev/null
@@ -1,1659 +0,0 @@
-This is Info file pcl-cvs, produced by Makeinfo-1.49 from the input
-file pcl-cvs.texinfo.
-
- Copyright (C) 1992 Per Cederqvist
-
- 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 section entitled "GNU General Public License" is included
-exactly as in the original, 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, except that the section entitled "GNU General Public
-License" and this permission notice may be included in translations
-approved by the Free Software Foundation instead of in the original
-English.
-
-
-File: pcl-cvs, Node: Top, Next: Copying, Prev: (dir), Up: (dir)
-
- This info manual describes pcl-cvs which is a GNU Emacs front-end
-to CVS. It works with CVS version 1.3. This manual is updated to
-release 1.05 of pcl-cvs.
-
-* Menu:
-
-* Copying:: GNU General Public License
-* Installation:: How to install pcl-cvs on your system.
-* About pcl-cvs:: Authors and ftp sites.
-
-* Getting started:: An introduction with a walk-through example.
-* Buffer contents:: An explanation of the buffer contents.
-* Commands:: All commands, grouped by type.
-
-* Customization:: How you can tailor pcl-cvs to suit your needs.
-* Future enhancements:: Future enhancements of pcl-cvs.
-* Bugs:: Bugs (known and unknown).
-* Function and Variable Index:: List of functions and variables.
-* Concept Index:: List of concepts.
-* Key Index:: List of keystrokes.
-
- -- The Detailed Node Listing --
-
-Installation
-
-* Pcl-cvs installation:: How to install pcl-cvs on your system.
-* On-line manual installation:: How to install the on-line manual.
-* Typeset manual installation:: How to create typeset documentation
- about pcl-cvs.
-
-About pcl-cvs
-
-* Contributors:: Contributors to pcl-cvs.
-* Archives:: Where can I get a copy of Pcl-Cvs?
-
-Buffer contents
-
-* File status:: The meaning of the second field.
-* Selected files:: How selection works.
-
-Commands
-
-* Updating the directory:: Commands to update the local directory
-* Movement commands:: How to move up and down in the buffer
-* Marking files:: How to mark files that other commands
- will later operate on.
-* Committing changes:: Checking in your modifications to the
- CVS repository.
-* Editing files:: Loading files into Emacs.
-* Getting info about files:: Display the log and status of files.
-* Adding and removing files:: Adding and removing files
-* Undoing changes:: Undoing changes
-* Removing handled entries:: Uninteresting lines can easily be removed.
-* Ignoring files:: Telling CVS to ignore generated files.
-* Viewing differences:: Commands to `diff' different versions.
-* Emerge::
-* Reverting your buffers:: Reverting your buffers
-* Miscellaneous commands:: Miscellaneous commands
-
-
-File: pcl-cvs, Node: Copying, Next: Installation, Prev: Top, Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-========
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to
-copy, distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make
-certain that everyone understands that there is no warranty for this
-free software. If the software is modified by someone else and
-passed on, we want its recipients to know that what they have is not
-the original, so that any problems introduced by others will not
-reflect on the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at
-all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 1. This License applies to any program or other work which contains
- a notice placed by the copyright holder saying it may be
- distributed under the terms of this General Public License. The
- "Program", below, refers to any such program or work, and a
- "work based on the Program" means either the Program or any
- derivative work under copyright law: that is to say, a work
- containing the Program or a portion of it, either verbatim or
- with modifications and/or translated into another language.
- (Hereinafter, translation is included without limitation in the
- term "modification".) Each licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are
- not covered by this License; they are outside its scope. The
- act of running the Program is not restricted, and the output
- from the Program is covered only if its contents constitute a
- work based on the Program (independent of having been made by
- running the Program). Whether that is true depends on what the
- Program does.
-
- 2. You may copy and distribute verbatim copies of the Program's
- source code as you receive it, in any medium, provided that you
- conspicuously and appropriately publish on each copy an
- appropriate copyright notice and disclaimer of warranty; keep
- intact all the notices that refer to this License and to the
- absence of any warranty; and give any other recipients of the
- Program a copy of this License along with the Program.
-
- You may charge a fee for the physical act of transferring a
- copy, and you may at your option offer warranty protection in
- exchange for a fee.
-
- 3. You may modify your copy or copies of the Program or any portion
- of it, thus forming a work based on the Program, and copy and
- distribute such modifications or work under the terms of Section
- 1 above, provided that you also meet all of these conditions:
-
- a. You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any
- change.
-
- b. You must cause any work that you distribute or publish,
- that in whole or in part contains or is derived from the
- Program or any part thereof, to be licensed as a whole at
- no charge to all third parties under the terms of this
- License.
-
- c. If the modified program normally reads commands
- interactively when run, you must cause it, when started
- running for such interactive use in the most ordinary way,
- to print or display an announcement including an
- appropriate copyright notice and a notice that there is no
- warranty (or else, saying that you provide a warranty) and
- that users may redistribute the program under these
- conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive
- but does not normally print such an announcement, your work
- based on the Program is not required to print an
- announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the
- Program, and can be reasonably considered independent and
- separate works in themselves, then this License, and its terms,
- do not apply to those sections when you distribute them as
- separate works. But when you distribute the same sections as
- part of a whole which is a work based on the Program, the
- distribution of the whole must be on the terms of this License,
- whose permissions for other licensees extend to the entire
- whole, and thus to each and every part regardless of who wrote
- it.
-
- Thus, it is not the intent of this section to claim rights or
- contest your rights to work written entirely by you; rather, the
- intent is to exercise the right to control the distribution of
- derivative or collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the
- Program with the Program (or with a work based on the Program)
- on a volume of a storage or distribution medium does not bring
- the other work under the scope of this License.
-
- 4. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the
- terms of Sections 1 and 2 above provided that you also do one of
- the following:
-
- a. Accompany it with the complete corresponding
- machine-readable source code, which must be distributed
- under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- b. Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than
- your cost of physically performing source distribution, a
- complete machine-readable copy of the corresponding source
- code, to be distributed under the terms of Sections 1 and 2
- above on a medium customarily used for software
- interchange; or,
-
- c. Accompany it with the information you received as to the
- offer to distribute corresponding source code. (This
- alternative is allowed only for noncommercial distribution
- and only if you received the program in object code or
- executable form with such an offer, in accord with
- Subsection b above.)
-
- The source code for a work means the preferred form of the work
- for making modifications to it. For an executable work,
- complete source code means all the source code for all modules
- it contains, plus any associated interface definition files,
- plus the scripts used to control compilation and installation of
- the executable. However, as a special exception, the source
- code distributed need not include anything that is normally
- distributed (in either source or binary form) with the major
- components (compiler, kernel, and so on) of the operating system
- on which the executable runs, unless that component itself
- accompanies the executable.
-
- If distribution of executable or object code is made by offering
- access to copy from a designated place, then offering equivalent
- access to copy the source code from the same place counts as
- distribution of the source code, even though third parties are
- not compelled to copy the source along with the object code.
-
- 5. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense or distribute the Program
- is void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 6. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to
- modify or distribute the Program or its derivative works. These
- actions are prohibited by law if you do not accept this License.
- Therefore, by modifying or distributing the Program (or any
- work based on the Program), you indicate your acceptance of this
- License to do so, and all its terms and conditions for copying,
- distributing or modifying the Program or works based on it.
-
- 7. Each time you redistribute the Program (or any work based on the
- Program), the recipient automatically receives a license from the
- original licensor to copy, distribute or modify the Program
- subject to these terms and conditions. You may not impose any
- further restrictions on the recipients' exercise of the rights
- granted herein. You are not responsible for enforcing compliance
- by third parties to this License.
-
- 8. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent
- issues), conditions are imposed on you (whether by court order,
- agreement or otherwise) that contradict the conditions of this
- License, they do not excuse you from the conditions of this
- License. If you cannot distribute so as to satisfy
- simultaneously your obligations under this License and any other
- pertinent obligations, then as a consequence you may not
- distribute the Program at all. For example, if a patent license
- would not permit royalty-free redistribution of the Program by
- all those who receive copies directly or indirectly through you,
- then the only way you could satisfy both it and this License
- would be to refrain entirely from distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable
- under any particular circumstance, the balance of the section is
- intended to apply and the section as a whole is intended to
- apply in other circumstances.
-
- It is not the purpose of this section to induce you to infringe
- any patents or other property right claims or to contest
- validity of any such claims; this section has the sole purpose
- of protecting the integrity of the free software distribution
- system, which is implemented by public license practices. Many
- people have made generous contributions to the wide range of
- software distributed through that system in reliance on
- consistent application of that system; it is up to the
- author/donor to decide if he or she is willing to distribute
- software through any other system and a licensee cannot impose
- that choice.
-
- This section is intended to make thoroughly clear what is
- believed to be a consequence of the rest of this License.
-
- 9. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted
- interfaces, the original copyright holder who places the Program
- under this License may add an explicit geographical distribution
- limitation excluding those countries, so that distribution is
- permitted only in or among countries not thus excluded. In such
- case, this License incorporates the limitation as if written in
- the body of this License.
-
- 10. The Free Software Foundation may publish revised and/or new
- versions of the General Public License from time to time. Such
- new versions will be similar in spirit to the present version,
- but may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies a version number of this License which applies
- to it and "any later version", you have the option of following
- the terms and conditions either of that version or of any later
- version published by the Free Software Foundation. If the
- Program does not specify a version number of this License, you
- may choose any version ever published by the Free Software
- Foundation.
-
- 11. If you wish to incorporate parts of the Program into other free
- programs whose distribution conditions are different, write to
- the author to ask for permission. For software which is
- copyrighted by the Free Software Foundation, write to the Free
- Software Foundation; we sometimes make exceptions for this. Our
- decision will be guided by the two goals of preserving the free
- status of all derivatives of our free software and of promoting
- the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
- BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
- SERVICING, REPAIR OR CORRECTION.
-
- 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS
- OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
- YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH
- ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Appendix: How to Apply These Terms to Your New Programs
-=======================================================
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is
-safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
-
- ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
- Copyright (C) 19YY NAME OF AUTHOR
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- Also add information on how to contact you by electronic and paper
-mail.
-
- If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
- The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and
-`show c'; they could even be mouse-clicks or menu items--whatever
-suits your program.
-
- You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the
-program, if necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- SIGNATURE OF TY COON, 1 April 1989
- Ty Coon, President of Vice
-
- This General Public License does not permit incorporating your
-program into proprietary programs. If your program is a subroutine
-library, you may consider it more useful to permit linking
-proprietary applications with the library. If this is what you want
-to do, use the GNU Library General Public License instead of this
-License.
-
-
-File: pcl-cvs, Node: Installation, Next: About pcl-cvs, Prev: Copying, Up: Top
-
-Installation
-************
-
- This section describes the installation of pcl-cvs, the GNU Emacs
-CVS front-end. You should install not only the elisp files
-themselves, but also the on-line documentation so that your users
-will know how to use it. You can create typeset documentation from
-the file `pcl-cvs.texinfo' as well as an on-line info file. The
-following steps are also described in the file `INSTALL' in the source
-directory.
-
-* Menu:
-
-* Pcl-cvs installation:: How to install pcl-cvs on your system.
-* On-line manual installation:: How to install the on-line manual.
-* Typeset manual installation:: How to create typeset documentation
- about pcl-cvs.
-
-
-File: pcl-cvs, Node: Pcl-cvs installation, Next: On-line manual installation, Prev: Installation, Up: Installation
-
-Installation of the pcl-cvs program
-===================================
-
- 1. Edit the file `Makefile' to reflect the situation at your site.
- The only things you have to change is the definition of `lispdir'
- and `infodir'. The elisp files will be copied to `lispdir', and
- the info file to `infodir'.
-
- 2. Configure pcl-cvs.el
-
- There are a couple of paths that you have to check to make sure
- that they match you system. They appear early in the file
- pcl-cvs.el.
-
- *NOTE:* If your system is running emacs 18.57 or earlier you
- MUST uncomment the line that says:
-
- (setq delete-exited-processes nil)
-
- Setting `delete-exited-processes' to `nil' works around a bug in
- emacs that causes it to dump core. The bug was fixed in emacs
- 18.58.
-
- 3. Release 1.05 and later of pcl-cvs requires parts of the Elib
- library, version 0.07 or later. Elib is available via anonymous
- ftp from prep.ai.mit.edu in `pub/gnu/elib-0.07.tar.z', and from
- a lot of other sites that mirrors prep. Get Elib, and install
- it, before proceeding.
-
- 4. Type `make install' in the source directory. This will
- byte-compile all `.el' files and copy both the `.el' and the
- `.elc' into the directory you specified in step 1.
-
- If you don't want to install the `.el' files but only the `.elc'
- files (the byte-compiled files), you can type ``make
- install_elc'' instead of ``make install''.
-
- If you only want to create the compiled elisp files, but don't
- want to install them, you can type `make elcfiles' instead.
- This is what happens if you only type `make' without parameters.
-
- 5. Edit the file `default.el' in your emacs lisp directory (usually
- `/usr/gnu/emacs/lisp' or something similar) and enter the
- contents of the file `pcl-cvs-startup.el' into it. It contains
- a couple of `auto-load's that facilitates the use of pcl-cvs.
-
-
-
-File: pcl-cvs, Node: On-line manual installation, Next: Typeset manual installation, Prev: Pcl-cvs installation, Up: Installation
-
-Installation of the on-line manual.
-===================================
-
- 1. Create the info file `pcl-cvs' from `pcl-cvs.texinfo' by typing
- `make info'. If you don't have the program `makeinfo' you can
- get it by anonymous ftp from e.g. `ftp.gnu.ai.mit.edu' as
- `pub/gnu/texinfo-2.14.tar.Z' (there might be a newer version
- there when you read this), or you could use the preformatted
- info file `pcl-cvs.info' that is included in the distribution
- (type `cp pcl-cvs.info pcl-cvs').
-
- 2. Move the info file `pcl-cvs' to your standard info directory.
- This might be called something like `/usr/gnu/emacs/info'.
-
- 3. Edit the file `dir' in the info directory and enter one line to
- contain a pointer to the info file `pcl-cvs'. The line can, for
- instance, look like this:
-
- * Pcl-cvs: (pcl-cvs). An Emacs front-end to CVS.
-
-
-File: pcl-cvs, Node: Typeset manual installation, Prev: On-line manual installation, Up: Installation
-
-How to make typeset documentation from pcl-cvs.texinfo
-======================================================
-
- If you have TeX installed at your site, you can make a typeset
-manual from `pcl-cvs.texinfo'.
-
- 1. Run TeX by typing ``make pcl-cvs.dvi''. You will not get the
- indices unless you have the `texindex' program.
-
- 2. Convert the resulting device independent file `pcl-cvs.dvi' to a
- form which your printer can output and print it. If you have a
- postscript printer there is a program, `dvi2ps', which does.
- There is also a program which comes together with TeX, `dvips',
- which you can use.
-
-
-
-File: pcl-cvs, Node: About pcl-cvs, Next: Getting started, Prev: Installation, Up: Top
-
-About pcl-cvs
-*************
-
- Pcl-cvs is a front-end to CVS version 1.3. It integrates the most
-frequently used CVS commands into emacs.
-
-* Menu:
-
-* Contributors:: Contributors to pcl-cvs.
-* Archives:: Where can I get a copy of Pcl-Cvs?
-
-
-File: pcl-cvs, Node: Contributors, Next: Archives, Prev: About pcl-cvs, Up: About pcl-cvs
-
-Contributors to pcl-cvs
-=======================
-
- Contributions to the package are welcome. I have limited time to
-work on this project, but I will gladly add any code that you
-contribute to me to this package (*note Bugs::.).
-
- The following persons have made contributions to pcl-cvs.
-
- * Brian Berliner wrote CVS, together with some other contributors.
- Without his work on CVS this package would be useless...
-
- * Per Cederqvist wrote most of the otherwise unattributed
- functions in pcl-cvs as well as all documentation.
-
- * Inge Wallin (`inge@lysator.liu.se') wrote the skeleton to
- `pcl-cvs.texinfo', and gave useful comments on it. He also wrote
- the files `elib-node.el' and `compile-all.el'. The file
- `cookie.el' was inspired by Inge.
-
- * Linus Tolke (`linus@lysator.liu.se') contributed useful comments
- on both the functionality and the documentation.
-
- * Jamie Zawinski (`jwz@lucid.com') contributed `pcl-cvs-lucid.el'.
-
- * Leif Lonnblad contributed RCVS support.
-
- Apart from these, a lot of people have send me suggestions, ideas,
-requests, bug reports and encouragement. Thanks a lot! Without your
-there would be no new releases of pcl-cvs.
-
-
-File: pcl-cvs, Node: Archives, Prev: Contributors, Up: About pcl-cvs
-
-Where can I get pcl-cvs?
-========================
-
- The latest release of pcl-cvs can be fetched via anonymous ftp from
-`ftp.lysator.liu.se', (IP no. 130.236.254.1) in the directory
-`pub/emacs'. If you don't live in Scandinavia you should probably
-check with archie to see if there is a site closer to you that
-archives pcl-cvs.
-
- New releases will be announced to appropriate newsgroups. If you
-send your email address to me I will add you to my list of people to
-mail when I make a new release.
-
-
-File: pcl-cvs, Node: Getting started, Next: Buffer contents, Prev: About pcl-cvs, Up: Top
-
-Getting started
-***************
-
- This document assumes that you know what CVS is, and that you at
-least knows the fundamental concepts of CVS. If that is not the case
-you should read the man page for CVS.
-
- Pcl-cvs is only useful once you have checked out a module. So
-before you invoke it you must have a copy of a module somewhere in
-the file system.
-
- You invoke pcl-cvs by typing `M-x cvs-update RET'. If your emacs
-responds with `[No match]' your system administrator has not
-installed pcl-cvs properly. Try `M-x load-library RET pcl-cvs RET'.
-If that also fails - talk to your root. If it succeeds you might put
-this line in your `.emacs' file so that you don't have to type the
-`load-library' command every time you wish to use pcl-cvs:
-
- (autoload 'cvs-update "pcl-cvs" nil t)
-
- The function `cvs-update' will ask for a directory. The command
-`cvs update' will be run in that directory. (It should contain files
-that have been checked out from a CVS archive.) The output from
-`cvs' will be parsed and presented in a table in a buffer called
-`*cvs*'. It might look something like this:
-
- PCL-CVS release 1.05.
-
- In directory /users/ceder/FOO/test:
- Updated bar
- Updated file.txt
- Modified ci namechange
- Updated newer
-
- In directory /users/ceder/FOO/test/sub:
- Modified ci ChangeLog
- ---------- End -----
-
- In this example the three files (`bar', `file.txt' and `newer')
-that are marked with `Updated' have been copied from the CVS
-repository to `/users/ceder/FOO/test/' since someone else have
-checked in newer versions of them. Two files (`namechange' and
-`sub/ChangeLog') have been modified locally, and needs to be checked
-in.
-
- You can move the cursor up and down in the buffer with `C-n' and
-`C-p' or `n' and `p'. If you press `c' on one of the `Modified'
-files that file will be checked in to the CVS repository. *Note
-Committing changes::. You can press `x' to get rid of the
-"uninteresting" files that have only been `Updated' (and don't
-require any further action from you).
-
- You can also easily get a `diff' between your modified file and the
-base version that you started from, and you can get the output from
-`cvs log' and `cvs status' on the listed files simply by pressing a
-key (*note Getting info about files::.).
-
-
-File: pcl-cvs, Node: Buffer contents, Next: Commands, Prev: Getting started, Up: Top
-
-Buffer contents
-***************
-
- The display contains four columns. They contain, from left to
-right:
-
- * An asterisk when the file is "marked" (*note Selected files::.).
-
- * The status of the file. See *Note File status::, for more
- information.
-
- * A "need to be checked in"-marker (`ci').
-
- * The file name.
-
-* Menu:
-
-* File status:: The meaning of the second field.
-* Selected files:: How selection works.
-
-
-File: pcl-cvs, Node: File status, Next: Selected files, Prev: Buffer contents, Up: Buffer contents
-
-File status
-===========
-
- The `file status' field can have the following values:
-
-`Updated'
- The file was brought up to date with respect to the repository.
- This is done for any file that exists in the repository but not
- in your source, and for files that you haven't changed but are
- not the most recent versions available in the repository.
-
-`Modified'
- The file is modified in your working directory, and there was
- no modification to the same file in the repository.
-
-`Merged'
- The file is modified in your working directory, and there were
- modifications in the repository as well as in your copy, but
- they were merged successfully, without conflict, in your working
- directory.
-
-`Conflict'
- A conflict was detected while trying to merge your changes to
- FILE with changes from the source repository. FILE (the copy in
- your working directory) is now the output of the `rcsmerge'
- command on the two versions; an unmodified copy of your file is
- also in your working directory, with the name `.#FILE.VERSION',
- where VERSION is the RCS revision that your modified file started
- from. *Note Viewing differences::, for more details.
-
-`Added'
- The file has been added by you, but it still needs to be checked
- in to the repository.
-
-`Removed'
- The file has been removed by you, but it needs to be checked in
- to the repository. You can resurrect it by typing `a' (*note
- Adding and removing files::.).
-
-`Unknown'
- A file that was detected in your directory, but that neither
- appears in the repository, nor is present on the list of files
- that CVS should ignore.
-
- There are also a few special cases, that rarely occur, which have
-longer strings in the fields:
-
-`Removed from repository'
- The file has been removed from your directory since someone has
- removed it from the repository. (It is still present in the
- Attic directory, so no permanent loss has occurred). This,
- unlike the other entries in this table, is not an error
- condition.
-
-`Removed from repository, changed by you'
- You have modified a file that someone have removed from the
- repository. You can correct this situation by removing the file
- manually (see *note Adding and removing files::.).
-
-`Removed by you, changed in repository'
- You have removed a file, and before you committed the removal
- someone committed a change to that file. You could use `a' to
- resurrect the file (see *note Adding and removing files::.).
-
-`Move away FILE - it is in the way'
- For some reason CVS does not like the file FILE. Rename or
- remove it.
-
-`This repository is missing! Remove this dir manually.'
- It is impossible to remove a directory in the CVS repository in
- a clean way. Someone have tried to remove one, and CVS gets
- confused. Remove your copy of the directory.
-
-
-File: pcl-cvs, Node: Selected files, Prev: File status, Up: Buffer contents
-
-Selected files
-==============
-
- Many of the commands works on the current set of "selected" files.
-
- * If there are any files that are marked they constitute the set of
- selected files.
-
- * Otherwise, if the cursor points to a file, that file is the
- selected file.
-
- * Otherwise, if the cursor points to a directory, all the files in
- that directory that appears in the buffer are the selected files.
-
- This scheme might seem a little complicated, but once one get used
-to it, it is quite powerful.
-
- *Note Marking files:: tells how you mark and unmark files.
-
-
-File: pcl-cvs, Node: Commands, Next: Customization, Prev: Buffer contents, Up: Top
-
-Commands
-********
-
- The nodes in this menu contains explanations about all the
-commands that you can use in pcl-cvs. They are grouped together by
-type.
-
-* Menu:
-
-* Updating the directory:: Commands to update the local directory
-* Movement commands:: How to move up and down in the buffer
-* Marking files:: How to mark files that other commands
- will later operate on.
-* Committing changes:: Checking in your modifications to the
- CVS repository.
-* Editing files:: Loading files into Emacs.
-* Getting info about files:: Display the log and status of files.
-* Adding and removing files:: Adding and removing files
-* Undoing changes:: Undoing changes
-* Removing handled entries:: Uninteresting lines can easily be removed.
-* Ignoring files:: Telling CVS to ignore generated files.
-* Viewing differences:: Commands to `diff' different versions.
-* Emerge::
-* Reverting your buffers:: Reverting your buffers
-* Miscellaneous commands:: Miscellaneous commands
-
-
-File: pcl-cvs, Node: Updating the directory, Next: Movement commands, Prev: Commands, Up: Commands
-
-Updating the directory
-======================
-
-`M-x cvs-update'
- Run a `cvs update' command. You will be asked for the directory
- in which the `cvs update' will be run. The output will be
- parsed by pcl-cvs, and the result printed in the `*cvs*' buffer
- (see *note Buffer contents::. for a description of the contents).
-
- By default, `cvs-update' will descend recursively into
- subdirectories. You can avoid that behavior by giving a prefix
- argument to it (e.g., by typing `C-u M-x cvs-update RET').
-
- All other commands in pcl-cvs requires that you have a `*cvs*'
- buffer. This is the command that you use to get one.
-
- CVS uses lock files in the repository to ensure the integrity of
- the data files in the repository. They might be left behind
- i.e. if a workstation crashes in the middle of a CVS operation.
- CVS outputs a message when it is waiting for a lock file to go
- away. Pcl-cvs will show the same message in the *cvs* buffer,
- together with instructions for deleting the lock files. You
- should normally not have to delete them manually -- just wait a
- little while and the problem should fix itself. But if the lock
- files doesn't disappear you can delete them with `M-x
- cvs-delete-lock RET'.
-
-`g'
- This will run `cvs update' again. It will always use the same
- buffer that was used with the previous `cvs update'. Give a
- prefix argument to avoid descending into subdirectories. This
- runs the command `cvs-mode-update-no-prompt'.
-
-
-File: pcl-cvs, Node: Movement commands, Next: Marking files, Prev: Updating the directory, Up: Commands
-
-Movement Commands
-=================
-
- You can use most normal Emacs commands to move forward and
-backward in the buffer. Some keys are rebound to functions that take
-advantage of the fact that the buffer is a pcl-cvs buffer:
-
-`SPC'
-`C-n'
-`n'
- These keys move the cursor one file forward, towards the end of
- the buffer (`cookie-next-cookie').
-
-`C-p'
-`p'
- These keys move one file backward, towards the beginning of the
- buffer (`cookie-previous-cookie').
-
-
-File: pcl-cvs, Node: Marking files, Next: Committing changes, Prev: Movement commands, Up: Commands
-
-Marking files
-=============
-
- Pcl-cvs works on a set of "selected files" (*note Selected
-files::.). You can mark and unmark files with these commands:
-
-`m'
- This marks the file that the cursor is positioned on. If the
- cursor is positioned on a directory all files in that directory
- will be marked. (`cvs-mode-mark').
-
-`u'
- Unmark the file that the cursor is positioned on. If the cursor
- is on a directory, all files in that directory will be unmarked.
- (`cvs-mode-unmark').
-
-`M'
- Mark *all* files in the buffer (`cvs-mode-mark-all-files').
-
-`ESC DEL'
- Unmark *all* files (`cvs-mode-unmark-all-files').
-
-`DEL'
- Unmark the file on the previous line, and move point to that line
- (`cvs-mode-unmark-up').
-
-
-File: pcl-cvs, Node: Committing changes, Next: Editing files, Prev: Marking files, Up: Commands
-
-Committing changes
-==================
-
-`c'
- All files that have a "need to be checked in"-marker (*note
- Buffer contents::.) can be checked in with the `c' command. It
- checks in all selected files (*note Selected files::.) (except
- those who lack the "ci"-marker - they are ignored). Pressing
- `c' causes `cvs-mode-commit' to be run.
-
- When you press `c' you will get a buffer called
- `*cvs-commit-message*'. Enter the log message for the file(s) in
- it. When you are ready you should press `C-c C-c' to actually
- commit the files (using `cvs-edit-done').
-
- Normally the `*cvs-commit-message*' buffer will retain the log
- message from the previous commit, but if the variable
- `cvs-erase-input-buffer' is set to a non-`nil' value the buffer
- will be erased. Point and mark will always be located around the
- entire buffer so that you can easily erase it with `C-w'
- (`kill-region').
-
- If you are editing the files in your emacs an automatic
- `revert-buffer' will be performed. (If the file contains `$Id$'
- keywords `cvs commit' will write a new file with the new values
- substituted. The auto-revert makes sure that you get them into
- your buffer). The revert will not occur if you have modified
- your buffer, or if `cvs-auto-revert-after-commit' is set to
- `nil'.
-
-
-File: pcl-cvs, Node: Editing files, Next: Getting info about files, Prev: Committing changes, Up: Commands
-
-Editing files
-=============
-
- There are currently three commands that can be used to find a file
-(that is, load it into a buffer and start editing it there). These
-commands work on the line that the cursor is situated at. They
-ignore any marked files.
-
-`f'
- Find the file that the cursor points to. Run `dired' (*note
- Dired: (Emacs)Dired.) if the cursor points to a directory
- (`cvs-mode-find-file').
-
-`o'
- Like `f', but use another window
- (`cvs-mode-find-file-other-window').
-
-`A'
- Invoke `add-change-log-entry-other-window' to edit a `ChangeLog'
- file. The `ChangeLog' will be found in the directory of the
- file the cursor points to.
- (`cvs-mode-add-change-log-entry-other-window').
-
-
-File: pcl-cvs, Node: Getting info about files, Next: Adding and removing files, Prev: Editing files, Up: Commands
-
-Getting info about files
-========================
-
- Both of the following commands can be customized. *Note
-Customization::.
-
-`l'
- Run `cvs log' on all selected files, and show the result in a
- temporary buffer (`cvs-mode-log').
-
-`s'
- Run `cvs status' on all selected files, and show the result in a
- temporary buffer (`cvs-mode-status').
-
-
-File: pcl-cvs, Node: Adding and removing files, Next: Undoing changes, Prev: Getting info about files, Up: Commands
-
-Adding and removing files
-=========================
-
- The following commands are available to make it easy to add and
-remove files from the CVS repository.
-
-`a'
- Add all selected files. This command can be used on `Unknown'
- files (see *note File status::.). The status of the file will
- change to `Added', and you will have to use `c'
- (`cvs-mode-commit', see *note Committing changes::.) to really
- add the file to the repository.
-
- This command can also be used on `Removed' files (before you
- commit them) to resurrect them.
-
- Selected files that are neither `Unknown' nor `Removed' will be
- ignored by this command.
-
- The command that is run is `cvs-mode-add'.
-
-`r'
- This command removes the selected files (after prompting for
- confirmation). The files are `rm'ed from your directory and
- (unless the status was `Unknown'; *note File status::.) they will
- also be `cvs remove'd. If the files were `Unknown' they will
- disappear from the buffer. Otherwise their status will change to
- `Removed', and you must use `c' (`cvs-mode-commit', *note
- Committing changes::.) to commit the removal.
-
- The command that is run is `cvs-mode-remove-file'.
-
-
-File: pcl-cvs, Node: Undoing changes, Next: Removing handled entries, Prev: Adding and removing files, Up: Commands
-
-Undoing changes
-===============
-
-`U'
- If you have modified a file, and for some reason decide that you
- don't want to keep the changes, you can undo them with this
- command. It works by removing your working copy of the file and
- then getting the latest version from the repository
- (`cvs-mode-undo-local-changes'.
-
-
-File: pcl-cvs, Node: Removing handled entries, Next: Ignoring files, Prev: Undoing changes, Up: Commands
-
-Removing handled entries
-========================
-
-`x'
- This command allows you to remove all entries that you have
- processed. More specifically, the lines for `Updated' files
- (*note File status::. and files that have been checked in (*note
- Committing changes::.) are removed from the buffer. If a
- directory becomes empty the heading for that directory is also
- removed. This makes it easier to get an overview of what needs
- to be done.
-
- The command is called `cvs-mode-remove-handled'. If
- `cvs-auto-remove-handled' is set to non-`nil' this will
- automatically be performed after every commit.
-
-`C-k'
- This command can be used for lines that
- `cvs-mode-remove-handled' would not delete, but that you want to
- delete (`cvs-mode-acknowledge').
-
-
-File: pcl-cvs, Node: Ignoring files, Next: Viewing differences, Prev: Removing handled entries, Up: Commands
-
-Ignoring files
-==============
-
-`i'
- Arrange so that CVS will ignore the selected files. The file
- names are added to the `.cvsignore' file in the corresponding
- directory. If the `.cvsignore' doesn't exist it will be created.
-
- The `.cvsignore' file should normally be added to the repository,
- but you could ignore it also if you like it better that way.
-
- This runs `cvs-mode-ignore'.
-
-
-File: pcl-cvs, Node: Viewing differences, Next: Emerge, Prev: Ignoring files, Up: Commands
-
-Viewing differences
-===================
-
-`d'
- Display a `cvs diff' between the selected files and the RCS
- version that they are based on. *Note Customization:: describes
- how you can send flags to `cvs diff'. If CVS-DIFF-IGNORE-MARKS
- is set to a non-`nil' value or if a prefix argument is given
- (but not both) any marked files will not be considered to be
- selected. (`cvs-mode-diff-cvs').
-
-`b'
- If CVS finds a conflict while merging two versions of a file
- (during a `cvs update', *note Updating the directory::.) it will
- save the original file in a file called `.#FILE.VERSION' where
- FILE is the name of the file, and VERSION is the RCS version
- number that your file was based on.
-
- With the `b' command you can run a `diff' on the files
- `.#FILE.VERSION' and `FILE'. You can get a context- or Unidiff
- by setting `cvs-diff-flags' - *note Customization::.. This
- command only works on files that have status `Conflict' or
- `Merged'.
-
- If CVS-DIFF-IGNORE-MARKS is set to a non-`nil' value or if a
- prefix argument is given (but not both) any marked files will
- not be considered to be selected. (`cvs-mode-diff-backup').
-
-
-File: pcl-cvs, Node: Emerge, Next: Reverting your buffers, Prev: Viewing differences, Up: Commands
-
-Running emerge
-==============
-
-`e'
- Invoke `emerge' on one file. This command works slightly
- different depending on the file status.
-
- `Modified'
- Run `emerge-files' with your working file as file A, and
- the latest revision in the repository as file B.
-
- `Merged'
- `Conflict'
- Run `emerge-files-with-ancestor' with your working file (as
- it was prior to your invocation of `cvs-update') as file A,
- the latest revision in the repository as file B, and the
- revision that you based your local modifications on as
- ancestor.
-
- *Note:* CVS has already performed a merge. The resulting file is
- not used in any way if you use this command. If you use the `q'
- command inside `emerge' (to successfully terminate the merge) the
- file that CVS created will be overwritten.
-
-
-File: pcl-cvs, Node: Reverting your buffers, Next: Miscellaneous commands, Prev: Emerge, Up: Commands
-
-Reverting your buffers
-======================
-
-`R'
- If you are editing (or just viewing) a file in a buffer, and
- that file is changed by CVS during a `cvs-update', all you have
- to do is type `R' in the *cvs* buffer to read in the new
- versions of the files.
-
- All files that are `Updated', `Merged' or in `Conflict' are
- reverted from the disk. Any other files are ignored. Only files
- that you were already editing are read.
-
- An error is signalled if you have modified the buffer since it
- was last changed. (`cvs-mode-revert-updated-buffers').
-
-
-File: pcl-cvs, Node: Miscellaneous commands, Prev: Reverting your buffers, Up: Commands
-
-Miscellaneous commands
-======================
-
-`M-x cvs-byte-compile-files'
- Byte compile all selected files that end in .el.
-
-`M-x cvs-delete-lock'
- This command can be used in any buffer, and deletes the lock
- files that the *cvs* buffer informs you about. You should
- normally never have to use this command since CVS tries very
- carefully to always remove the lock files itself.
-
- You can only use this command when a message in the *cvs* buffer
- tells you so. You should wait a while before using this command
- in case someone else is running a cvs command.
-
-`q'
- Bury the *cvs* buffer. (`bury-buffer').
-
-
-File: pcl-cvs, Node: Customization, Next: Future enhancements, Prev: Commands, Up: Top
-
-Customization
-*************
-
- If you have an idea about any customization that would be handy but
-isn't present in this list, please tell me! *Note Bugs:: for info on
-how to reach me.
-
-`cvs-erase-input-buffer'
- If set to anything else than `nil' the edit buffer will be erased
- before you write the log message (*note Committing changes::.).
-
-`cvs-inhibit-copyright-message'
- The copyright message that is displayed on startup can be
- annoying after a while. Set this variable to `t' if you want to
- get rid of it. (But don't set this to `t' in the system defaults
- file - new users should see this message at least once).
-
-`cvs-diff-flags'
- A list of strings to pass as arguments to the `cvs diff' and
- `diff' programs. This is used by `cvs-mode-diff-cvs' and
- `cvs-mode-diff-backup' (key `b', *note Viewing differences::.).
- If you prefer the Unidiff format you could add this line to your
- `.emacs' file:
-
- (setq cvs-diff-flags '("-u"))
-
-`cvs-diff-ignore-marks'
- If this variable is non-`nil' or if a prefix argument is given
- (but not both) to `cvs-mode-diff-cvs' or `cvs-mode-diff-backup'
- marked files are not considered selected.
-
-`cvs-log-flags'
- List of strings to send to `cvs log'. Used by `cvs-mode-log'
- (key `l', *note Getting info about files::.).
-
-`cvs-status-flags'
- List of strings to send to `cvs status'. Used by
- `cvs-mode-status' (key `s', *note Getting info about files::.).
-
-`cvs-auto-remove-handled'
- If this variable is set to any non-`nil' value
- `cvs-mode-remove-handled' will be called every time you check in
- files, after the check-in is ready. *Note Removing handled
- entries::.
-
-`cvs-auto-revert-after-commit'
- If this variable is set to any non-`nil' value any buffers you
- have that visit a file that is committed will be automatically
- reverted. This variable is default `t'. *Note Committing
- changes::.
-
-`cvs-update-prog-output-skip-regexp'
- The `-u' flag in the `modules' file can be used to run a command
- whenever a `cvs update' is performed (see cvs(5)). This regexp
- is used to search for the last line in that output. It is
- normally set to `"$"'. That setting is only correct if the
- command outputs nothing. Note that pcl-cvs will get very
- confused if the command outputs *anything* to `stderr'.
-
-`cvs-cvsroot'
- This variable can be set to override `CVSROOT'. It should be a
- string. If it is set then everytime a cvs command is run it will
- be called as `cvs -d CVS-CVSROOT...' This can be useful if your
- site has several repositories.
-
-`TMPDIR'
- Pcl-cvs uses this *environment variable* to decide where to put
- the temporary files it needs. It defaults to `/tmp' if it is
- not set.
-
-`cvs-commit-buffer-require-final-newline'
- When you enter a log message in the `*cvs-commit-message*' buffer
- pcl-cvs will normally automatically insert a trailing newline,
- unless there already is one. This behavior can be controlled via
- `cvs-commit-buffer-require-final-newline'. If it is `t' (the
- default behavior), a newline will always be appended. If it is
- `nil', newlines will never be appended. Any other value causes
- pcl-cvs to ask the user whenever there is no trailing newline in
- the commit message buffer.
-
-`cvs-sort-ignore-file'
- If this variable is set to any non-`nil' value the `.cvsignore'
- will always be sorted whenever you use `cvs-mode-ignore' to add
- a file to it. This option is on by default.
-
-
-File: pcl-cvs, Node: Future enhancements, Next: Bugs, Prev: Customization, Up: Top
-
-Future enhancements
-*******************
-
- Pcl-cvs is still under development and needs a number of
-enhancements to be called complete. Below is my current wish-list
-for future releases of pcl-cvs. Please, let me know which of these
-features you want most. They are listed below in approximately the
-order that I currently think I will implement them in.
-
- * Rewritten parser code. There are many situations where pcl-cvs
- will fail to recognize the output from CVS. The situation could
- be greatly increased.
-
- * `cvs-status'. This will run `cvs status' in a directory and
- produce a buffer that looks pretty much like the current *cvs*
- buffer. That buffer will include information for all
- version-controlled files. (There will be a simple keystroke to
- remove all "uninteresting" files, that is, files that are
- "Up-to-date"). In this new buffer you will be able to update a
- file, commit a file, et c. The big win with this is that you
- will be able to watch the differences between your current
- working file and the head revision in the repository before you
- update the file, and you can then choose to update it or let it
- wait for a while longer.
-
- * Log mode. When this mode is finished you will be able to move
- around (using `n' and `p') between the revisions of a file, mark
- two of them, and run a diff between them. You will be able to
- hide branches (similar to the way you can hide sub-paragraphs in
- outline-mode) and do merges between revisions. Other ideas
- about this are welcome.
-
- * The current model for marks in the *cvs* buffer seems to be
- confusing. I am considering to use the VM model instead, where
- marks are normally inactive. To activate the mark, you issue a
- command like `cvs-mode-next-command-uses-marks'. I might
- implement a flag so that you can use either version. Feedback
- on this before I start coding it is very welcome.
-
- * It should be possible to run commands such as `cvs log', `cvs
- status' and `cvs commit' directly from a buffer containing a
- file, instead of having to `cvs-update'. If the directory
- contains many files the `cvs-update' can take quite some time,
- especially on a slow machine. I planed to put these kind of
- commands on the prefix `C-c C-v', but that turned out to be used
- by for instance c++-mode. If you have any suggestions for a
- better prefix key, please let me know.
-
- * Increased robustness. For instance, you can not currently press
- `C-g' when you are entering the description of a file that you
- are adding without confusing pcl-cvs.
-
- * Support for multiple active *cvs* buffers.
-
- * Dired support. I have an experimental `dired-cvs.el' that works
- together with CVS 1.2. Unfortunately I wrote it on top of a
- non-standard `dired.el', so it must be rewritten.
-
- * An ability to send user-supplied options to all the cvs commands.
-
- * Pcl-cvs is not at all clever about what it should do when `cvs
- update' runs a program (due to the `-u' option in the `modules'
- file -- see `cvs(5)'). The current release uses a regexp to
- search for the end. At the very least that regexp should be
- configured for different modules. Tell me if you have any idea
- about what is the right thing to do. In a perfect world the
- program should also be allowed to print to `stderr' without
- causing pcl-cvs to crash.
-
- If you miss something in this wish-list, let me know! I don't
-promise that I will write it, but I will at least try to coordinate
-the efforts of making a good Emacs front end to CVS. See *Note
-Bugs:: for information about how to reach me.
-
- So far, I have written most of pcl-cvs in my all-to-rare spare
-time. If you want pcl-cvs to be developed faster you can write a
-contract with Signum Support to do the extension. You can reach
-Signum Support by email to `info@signum.se' or via mail to Signum
-Support AB, Box 2044, S-580 02 Linkoping, Sweden. Phone: +46 (0) 13 -
-21 46 00. Fax: +46 (0) 13 - 21 47 00.
-
-
-File: pcl-cvs, Node: Bugs, Next: Function and Variable Index, Prev: Future enhancements, Up: Top
-
-Bugs (known and unknown)
-************************
-
- If you find a bug or misfeature, don't hesitate to tell me! Send
-email to `ceder@lysator.liu.se'.
-
- If you have ideas for improvements, or if you have written some
-extensions to this package, I would like to hear from you. I hope
-that you find this package useful!
-
- Below is a partial list of currently known problems with pcl-cvs
-version 1.05.
-
-Commit causes Emacs to hang
- Emacs waits for the `cvs commit' command to finish before you can
- do anything. If you start a background job from the loginfo
- file you must take care that it closes `stdout' and `stderr' if
- you do not want to wait for it. (You do that with
- `background-command &>- 2&>- &' if you are starting
- `background-command' from a `/bin/sh' shell script).
-
- Your emacs will also hang if there was a lock file in the
- repository. In this case you can type `C-g' to get control over
- your emacs again.
-
-Name clash in Emacs 19
- This is really a bug in Elib or the Emacs 19 distribution. Both
- Elib and Emacs 19.6 through at least 19.10 contains a file named
- `cookie.el'. One of the files will have to be renamed, and we
- are currently negotiating about which of the files to rename.
-
-Commands while cvs-update is running
- It is possible to type commands in the *cvs* buffer while the
- update is running, but error messages is all that you will get.
- The error messages should be better.
-
-Unexpected output from CVS
- Unexpected output from CVS confuses pcl-cvs. It will currently
- create a bug report that you can mail to me. It should do
- something more civilized.
-
-
-File: pcl-cvs, Node: Function and Variable Index, Next: Concept Index, Prev: Bugs, Up: Top
-
-Function and Variable Index
-***************************
-
-* Menu:
-
-* bury-buffer: Miscellaneous commands.
-* cookie-next-cookie: Movement commands.
-* cookie-previous-cookie: Movement commands.
-* cvs-auto-remove-handled (variable): Customization.
-* cvs-auto-revert-after-commit (variable): Customization.
-* cvs-auto-revert-after-commit (variable): Committing changes.
-* cvs-byte-compile-files: Miscellaneous commands.
-* cvs-commit-buffer-require-final-newline (variable): Customization.
-* cvs-cvsroot (variable): Customization.
-* cvs-delete-lock: Updating the directory.
-* cvs-diff-flags (variable): Customization.
-* cvs-diff-ignore-marks (variable): Customization.
-* cvs-diff-ignore-marks (variable): Viewing differences.
-* cvs-erase-input-buffer (variable): Customization.
-* cvs-erase-input-buffer (variable): Committing changes.
-* cvs-inhibit-copyright-message (variable): Customization.
-* cvs-log-flags (variable): Customization.
-* cvs-mode-acknowledge: Removing handled entries.
-* cvs-mode-add: Adding and removing files.
-* cvs-mode-add-change-log-entry-other-window: Editing files.
-* cvs-mode-commit: Committing changes.
-* cvs-mode-diff-backup: Viewing differences.
-* cvs-mode-diff-cvs: Viewing differences.
-* cvs-mode-emerge: Emerge.
-* cvs-mode-find-file: Editing files.
-* cvs-mode-find-file-other-window: Editing files.
-* cvs-mode-ignore: Removing handled entries.
-* cvs-mode-log: Getting info about files.
-* cvs-mode-mark: Marking files.
-* cvs-mode-mark-all-files: Marking files.
-* cvs-mode-remove-file: Adding and removing files.
-* cvs-mode-remove-handled: Removing handled entries.
-* cvs-mode-revert-updated-buffers: Reverting your buffers.
-* cvs-mode-status: Getting info about files.
-* cvs-mode-undo-local-changes: Undoing changes.
-* cvs-mode-unmark: Marking files.
-* cvs-mode-unmark-all-files: Marking files.
-* cvs-mode-unmark-up: Marking files.
-* cvs-mode-update-no-prompt: Updating the directory.
-* cvs-sort-ignore-file (variable): Customization.
-* cvs-status-flags (variable): Customization.
-* cvs-update: Updating the directory.
-* cvs-update-prog-output-skip-regexp (variable): Customization.
-* TMPDIR (environment variable): Customization.
-
-
-File: pcl-cvs, Node: Concept Index, Next: Key Index, Prev: Function and Variable Index, Up: Top
-
-Concept Index
-*************
-
-* Menu:
-
-* -u option in modules file: Customization.
-* .cvsignore file, sorting: Customization.
-* About pcl-cvs: About pcl-cvs.
-* Active files: Selected files.
-* Added (file status): File status.
-* Adding files: Adding and removing files.
-* Archives: Archives.
-* Author, how to reach: Bugs.
-* Authors: Contributors.
-* Automatically inserting newline: Customization.
-* Automatically remove handled files: Customization.
-* Automatically sorting .cvsignore: Customization.
-* Buffer contents: Buffer contents.
-* Bugs, how to report them: Bugs.
-* Bugs, known: Bugs.
-* Byte compilation: Miscellaneous commands.
-* Ci: Committing changes.
-* Commit buffer: Committing changes.
-* Commit message, inserting newline: Customization.
-* Committing changes: Committing changes.
-* Conflict (file status): File status.
-* Conflicts, how to resolve them: Viewing differences.
-* Conflicts, resolving: Emerge.
-* Context diff, how to get: Customization.
-* Contributors: Contributors.
-* Copyright message, getting rid of it: Customization.
-* Customization: Customization.
-* Deleting files: Adding and removing files.
-* Diff: Viewing differences.
-* Dired: Editing files.
-* Edit buffer: Committing changes.
-* Editing files: Editing files.
-* Email archives: Archives.
-* Email to the author: Bugs.
-* Emerge: Emerge.
-* Enhancements: Future enhancements.
-* Erasing commit message: Committing changes.
-* Erasing the input buffer: Customization.
-* Example run: Getting started.
-* Expunging uninteresting entries: Removing handled entries.
-* FAQ: Bugs.
-* File selection: Selected files.
-* File status: File status.
-* Finding files: Editing files.
-* Flush changes: Undoing changes.
-* Ftp-sites: Archives.
-* Generating a typeset manual: Typeset manual installation.
-* Generating the on-line manual: On-line manual installation.
-* Getting pcl-cvs: Archives.
-* Getting rid of lock files: Miscellaneous commands.
-* Getting rid of the Copyright message.: Customization.
-* Getting rid of uninteresting lines: Removing handled entries.
-* Getting status: Getting info about files.
-* Getting the *cvs* buffer: Updating the directory.
-* Handled lines, removing them: Removing handled entries.
-* Info-file (how to generate): On-line manual installation.
-* Inhibiting the Copyright message.: Customization.
-* Installation: Installation.
-* Installation of elisp files: Pcl-cvs installation.
-* Installation of on-line manual: On-line manual installation.
-* Installation of typeset manual: Typeset manual installation.
-* Introduction: Getting started.
-* Invoking dired: Editing files.
-* Invoking emerge: Emerge.
-* Known bugs: Bugs.
-* Loading files: Editing files.
-* Lock files: Miscellaneous commands.
-* Log (RCS/cvs command): Getting info about files.
-* Manual installation (on-line): On-line manual installation.
-* Manual installation (typeset): Typeset manual installation.
-* Marked files: Selected files.
-* Marking files: Marking files.
-* Merged (file status): File status.
-* Modified (file status): File status.
-* Modules file (-u option): Customization.
-* Move away FILE - it is in the way (file status): File status.
-* Movement Commands: Movement commands.
-* On-line manual (how to generate): On-line manual installation.
-* Printing a manual: Typeset manual installation.
-* Problems, list of common: Bugs.
-* Putting files under CVS control: Adding and removing files.
-* Recompiling elisp files: Miscellaneous commands.
-* Removed (file status): File status.
-* Removed by you, changed in repository (file status): File status.
-* Removed from repository (file status): File status.
-* Removed from repository, changed by you (file status): File status.
-* Removing files: Adding and removing files.
-* Removing uninteresting (processed) lines: Removing handled entries.
-* Reporting bugs and ideas: Bugs.
-* Require final newline: Customization.
-* Resolving conflicts: Emerge.
-* Resurrecting files: Adding and removing files.
-* Reverting buffers: Reverting your buffers.
-* Reverting buffers after commit: Committing changes.
-* Reverting buffers after commit: Customization.
-* Selected files: Selected files.
-* Selecting files (commands to mark files): Marking files.
-* Sites: Archives.
-* Sorting the .cvsignore file: Customization.
-* Status (cvs command): Getting info about files.
-* Syncing buffers: Reverting your buffers.
-* TeX - generating a typeset manual: Typeset manual installation.
-* This repository is missing!... (file status): File status.
-* Undo changes: Undoing changes.
-* Unidiff, how to get: Customization.
-* Uninteresting entries, getting rid of them: Removing handled entries.
-* Unknown (file status): File status.
-* Update program (-u option in modules file): Customization.
-* Updated (file status): File status.
-* Variables, list of all: Customization.
-* Viewing differences: Viewing differences.
-
-
-File: pcl-cvs, Node: Key Index, Prev: Concept Index, Up: Top
-
-Key Index
-*********
-
-* Menu:
-
-* a - add a file: Adding and removing files.
-* A - add ChangeLog entry: Editing files.
-* b - diff backup file: Viewing differences.
-* c - commit files: Committing changes.
-* C-k - remove selected entries: Removing handled entries.
-* C-n - Move down one file: Movement commands.
-* C-p - Move up one file: Movement commands.
-* d - run cvs diff: Viewing differences.
-* DEL - unmark previous file: Marking files.
-* e - invoke emerge: Emerge.
-* ESC DEL - unmark all files: Marking files.
-* f - find file or directory: Editing files.
-* g - Rerun cvs update: Updating the directory.
-* l - run cvs log: Getting info about files.
-* m - marking a file: Marking files.
-* M - marking all files: Marking files.
-* n - Move down one file: Movement commands.
-* o - find file in other window: Editing files.
-* p - Move up on file: Movement commands.
-* q - bury the *cvs* buffer: Miscellaneous commands.
-* r - remove a file: Adding and removing files.
-* R - revert buffers: Reverting your buffers.
-* s - run cvs status: Getting info about files.
-* SPC - Move down one file: Movement commands.
-* U - undo changes: Undoing changes.
-* u - unmark a file: Marking files.
-* x - remove processed entries: Removing handled entries.
-
-
-
-Tag Table:
-Node: Top1007
-Node: Copying3571
-Node: Installation22803
-Node: Pcl-cvs installation23593
-Node: On-line manual installation25654
-Node: Typeset manual installation26672
-Node: About pcl-cvs27411
-Node: Contributors27780
-Node: Archives29083
-Node: Getting started29662
-Node: Buffer contents32105
-Node: File status32654
-Node: Selected files35679
-Node: Commands36347
-Node: Updating the directory37558
-Node: Movement commands39217
-Node: Marking files39803
-Node: Committing changes40658
-Node: Editing files42124
-Node: Getting info about files42969
-Node: Adding and removing files43448
-Node: Undoing changes44799
-Node: Removing handled entries45259
-Node: Ignoring files46176
-Node: Viewing differences46706
-Node: Emerge48014
-Node: Reverting your buffers48988
-Node: Miscellaneous commands49685
-Node: Customization50427
-Node: Future enhancements54107
-Node: Bugs58298
-Node: Function and Variable Index60079
-Node: Concept Index62872
-Node: Key Index69468
-
-End Tag Table
diff --git a/gnu/usr.bin/cvs/cvs/config.h b/gnu/usr.bin/cvs/cvs/config.h
deleted file mode 100644
index b3bee5f..0000000
--- a/gnu/usr.bin/cvs/cvs/config.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/* @(#)config.h 1.19 92/03/31 */
-
-/*
- * Copyright (c) 1992, Brian Berliner and Jeff Polk
- * Copyright (c) 1989-1992, Brian Berliner
- *
- * You may distribute under the terms of the GNU General Public License as
- * specified in the README file that comes with the CVS 1.3 kit.
- *
- * This file holds (most of) the configuration tweaks that can be made to
- * customize CVS for your site. CVS comes configured for a typical SunOS 4.x
- * environment. The comments for each configurable item are intended to be
- * self-explanatory. All #defines are tested first to see if an over-riding
- * option was specified on the "make" command line.
- *
- * If special libraries are needed, you will have to edit the Makefile.in file
- * or the configure script directly. Sorry.
- */
-
-/*
- * CVS provides the most features when used in conjunction with the Version-5
- * release of RCS. Thus, it is the default. This also assumes that GNU diff
- * Version-1.15 is being used as well -- you will have to configure your RCS
- * V5 release separately to make this the case. If you do not have RCS V5 and
- * GNU diff V1.15, comment out this define. You should not try mixing and
- * matching other combinations of these tools.
- */
-#ifndef HAVE_RCS5
-#define HAVE_RCS5
-#endif
-
-/*
- * If, before installing this version of CVS, you were running RCS V4 AND you
- * are installing this CVS and RCS V5 and GNU diff 1.15 all at the same time,
- * you should turn on the following define. It only exists to try to do
- * reasonable things with your existing checked out files when you upgrade to
- * RCS V5, since the keyword expansion formats have changed with RCS V5.
- *
- * If you already have been running with RCS5, or haven't been running with CVS
- * yet at all, or are sticking with RCS V4 for now, leave the commented out.
- */
-#ifndef HAD_RCS4
-/* #define HAD_RCS4 */
-#endif
-
-/*
- * For portability and heterogeneity reasons, CVS is shipped by default using
- * my own text-file version of the ndbm database library in the src/myndbm.c
- * file. If you want better performance and are not concerned about
- * heterogeneous hosts accessing your modules file, turn this option off.
- */
-#ifndef MY_NDBM
-#define MY_NDBM
-#endif
-
-/*
- * The "diff" program to execute when creating patch output. This "diff"
- * must support the "-c" option for context diffing. Specify a full pathname
- * if your site wants to use a particular diff. If you are using the GNU
- * version of diff (version 1.15 or later), this should be "diff -a".
- *
- * NOTE: this program is only used for the ``patch'' sub-command. The other
- * commands use rcsdiff which will use whatever version of diff was specified
- * when rcsdiff was built on your system.
- */
-#ifndef DIFF
-#define DIFF "diff"
-#endif
-
-/*
- * The "grep" program to execute when checking to see if a merged file had
- * any conflicts. This "grep" must support the "-s" option and a standard
- * regular expression as an argument. Specify a full pathname if your site
- * wants to use a particular grep.
- */
-#ifndef GREP
-#define GREP "grep"
-#endif
-
-/*
- * The "rm" program to execute when pruning directories that are not part of
- * a release. This "rm" must support the "-fr" options. Specify a full
- * pathname if your site wants to use a particular rm.
- */
-#ifndef RM
-#define RM "rm"
-#endif
-
-/*
- * The "sort" program to execute when displaying the module database. Specify
- * a full pathname if your site wants to use a particular sort.
- */
-#ifndef SORT
-#define SORT "sort"
-#endif
-
-/*
- * By default, RCS programs are executed with the shell or through execlp(),
- * so the user's PATH environment variable is searched. If you'd like to
- * bind all RCS programs to a certain directory (perhaps one not in most
- * people's PATH) then set the default in RCSBIN_DFLT. Note that setting
- * this here will cause all RCS programs to be executed from this directory,
- * unless the user overrides the default with the RCSBIN environment variable
- * or the "-b" option to CVS.
- *
- * This define should be either the empty string ("") or a full pathname to the
- * directory containing all the installed programs from the RCS distribution.
- */
-#ifndef RCSBIN_DFLT
-#define RCSBIN_DFLT ""
-#endif
-
-/*
- * The default editor to use, if one does not specify the "-e" option to cvs,
- * or does not have an EDITOR environment variable. I set this to just "vi",
- * and use the shell to find where "vi" actually is. This allows sites with
- * /usr/bin/vi or /usr/ucb/vi to work equally well (assuming that your PATH
- * is reasonable).
- */
-#ifndef EDITOR_DFLT
-#define EDITOR_DFLT "vi"
-#endif
-
-/*
- * The Repository file holds the path to the directory within the source
- * repository that contains the RCS ,v files for each CVS working directory.
- * This path is either a full-path or a path relative to CVSROOT.
- *
- * The only advantage that I can see to having a relative path is that One can
- * change the physical location of the master source repository, change one's
- * CVSROOT environment variable, and CVS will work without problems. I
- * recommend using full-paths.
- */
-#ifndef RELATIVE_REPOS
-/* #define RELATIVE_REPOS */
-#endif
-
-/*
- * When committing or importing files, you must enter a log message.
- * Normally, you can do this either via the -m flag on the command line or an
- * editor will be started for you. If you like to use logging templates (the
- * rcsinfo file within the $CVSROOT/CVSROOT directory), you might want to
- * force people to use the editor even if they specify a message with -m.
- * Enabling FORCE_USE_EDITOR will cause the -m message to be appended to the
- * temp file when the editor is started.
- */
-#ifndef FORCE_USE_EDITOR
-/* #define FORCE_USE_EDITOR */
-#endif
-
-/*
- * When locking the repository, some sites like to remove locks and assume
- * the program that created them went away if the lock has existed for a long
- * time. This used to be the default for previous versions of CVS. CVS now
- * attempts to be much more robust, so lock files should not be left around
- * by mistake. The new behaviour will never remove old locks (they must now
- * be removed by hand). Enabling CVS_FUDGELOCKS will cause CVS to remove
- * locks that are older than CVSLCKAGE seconds.
- * Use of this option is NOT recommended.
- */
-#ifndef CVS_FUDGELOCKS
-/* #define CVS_FUDGELOCKS */
-#endif
-
-/*
- * When committing a permanent change, CVS and RCS make a log entry of
- * who committed the change. If you are committing the change logged in
- * as "root" (not under "su" or other root-priv giving program), CVS/RCS
- * cannot determine who is actually making the change.
- *
- * As such, by default, CVS disallows changes to be committed by users
- * logged in as "root". You can disable this option by commenting
- * out the lines below.
- */
-#ifndef CVS_BADROOT
-#define CVS_BADROOT
-#endif
-
-/*
- * The "cvs diff" command accepts all the single-character options that GNU
- * diff (1.15) accepts. Except -D. GNU diff uses -D as a way to put
- * cpp-style #define's around the output differences. CVS, by default, uses
- * -D to specify a free-form date (like "cvs diff -D '1 week ago'"). If
- * you would prefer that the -D option of "cvs diff" work like the GNU diff
- * option, then comment out this define.
- */
-#ifndef CVS_DIFFDATE
-#define CVS_DIFFDATE
-#endif
-
-/* End of CVS configuration section */
-
-/*
- * Externs that are included in libc, but are used frequently enough to
- * warrant defining here.
- */
-#ifndef STDC_HEADERS
-extern void exit ();
-#endif
-
-#ifndef getwd
-extern char *getwd ();
-#endif
-
-/*
- * Some UNIX distributions don't include these in their stat.h Defined here
- * because "config.h" is always included last.
- */
-#ifndef S_IWRITE
-#define S_IWRITE 0000200 /* write permission, owner */
-#endif
-#ifndef S_IWGRP
-#define S_IWGRP 0000020 /* write permission, grougroup */
-#endif
-#ifndef S_IWOTH
-#define S_IWOTH 0000002 /* write permission, other */
-#endif
diff --git a/gnu/usr.bin/cvs/cvs/version.c b/gnu/usr.bin/cvs/cvs/version.c
deleted file mode 100644
index 18a9d14..0000000
--- a/gnu/usr.bin/cvs/cvs/version.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * Copyright (c) 1992, Brian Berliner and Jeff Polk
- * Copyright (c) 1989-1992, Brian Berliner
- *
- * You may distribute under the terms of the GNU General Public License as
- * specified in the README file that comes with the CVS 1.3 kit.
- *
- * version.c - the CVS version number
- */
-
-char *version_string = "\nConcurrent Versions System (CVS) 1.3\n";
diff --git a/gnu/usr.bin/cvs/doc/cvs.ms b/gnu/usr.bin/cvs/doc/cvs.ms
deleted file mode 100644
index 567179b..0000000
--- a/gnu/usr.bin/cvs/doc/cvs.ms
+++ /dev/null
@@ -1,1073 +0,0 @@
-.\" soelim cvs.ms | pic | tbl | troff -ms
-.\" @(#)cvs.ms 1.2 92/01/30
-.\"
-.\" troff source to the cvs USENIX article, Winter 1990, Washington, D.C.
-.\" Copyright (c) 1989, Brian Berliner
-.\"
-.\" 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 1, or (at your option)
-.\" any later version.
-.\"
-.\" This program is distributed in the hope that it will be useful,
-.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
-.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.\" GNU General Public License for more details.
-.\"
-.\" You should have received a copy of the GNU General Public License
-.\" along with this program; if not, write to the Free Software
-.\" Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\" The author can be reached at: berliner@prisma.com
-.\"
-.de SP
-.if n .sp
-.if t .sp .5
-..
-.de hl
-.br
-.in +0.5i
-\l'\\n(LLu-1i'
-.in -0.5i
-.sp
-..
-.OH ""
-.nr PS 11
-.nr PO 1.25i
-.pl -0.2i
-.TL
-.ps 14
-.ft B
-.nf
-CVS II:
-Parallelizing Software Development
-.fi
-.ft
-.ps
-.AU
-.ps 12
-.ft I
-Brian Berliner
-.ft
-.ps
-.AI
-.ps 12
-.ft I
-Prisma, Inc.
-5465 Mark Dabling Blvd.
-Colorado Springs, CO 80918
-berliner@prisma.com
-.ft
-.ps
-.AB
-The program described in this paper fills a need in the UNIX
-community for a freely available tool to manage software revision and
-release control in a multi-developer, multi-directory, multi-group
-environment.
-This tool also addresses the increasing need for tracking third-party vendor
-source distributions while trying to maintain local modifications to
-earlier releases.
-.AE
-.NH
-Background
-.PP
-In large software development projects, it is usually necessary for more
-than one software developer to be modifying (usually different) modules of the
-code at the same time.
-Some of these code modifications are done in an
-experimental sense, at least until the code functions correctly, and some
-testing of the entire program is usually necessary.
-Then, the modifications are returned to a master source repository
-so that others in the project can
-enjoy the new bug-fix or functionality.
-In order to manage such a project, some sort of revision control system is
-necessary.
-.PP
-Specifically, UNIX\**
-.FS
-UNIX is a registered trademark of AT&T.
-.FE
-kernel development is an excellent example of the
-problems that an adequate revision control system must address.
-The SunOS\**
-.FS
-SunOS is a trademark of Sun Microsystems, Inc.
-.FE
-kernel is composed of over a thousand files spread across a
-hierarchy of dozens of directories.\**
-.FS
-Yes, the SunOS 4.0 kernel is composed of over a \fIthousand\fP files!
-.FE
-Pieces of the kernel must be edited
-by many software developers within an organization.
-While undesirable in
-theory, it is not uncommon to have two or more people making
-modifications to the same file within the kernel sources in
-order to facilitate a desired change.
-Existing revision control systems like
-.SM
-RCS
-.LG
-[Tichy] or
-.SM
-SCCS
-.LG
-[Bell] serialize file modifications by
-allowing only one developer to have a writable copy of a particular file at
-any one point in time.
-That developer is said to
-have \*Qlocked\*U the file for his exclusive use, and no other developer is
-allowed to check out a writable copy of the file until the locking
-developer has finished impeding others' productivity.
-Development pressures of productivity and deadlines
-often force organizations to require that multiple developers be able to
-simultaneously edit
-copies of the same revision controlled file.
-.PP
-The necessity for multiple developers to modify the same file concurrently
-questions the value of serialization-based policies in traditional revision
-control.
-This paper discusses the approach that
-Prisma took in adapting a standard revision control system,
-.SM
-RCS\c
-.LG
-, along with an existing public-domain collection of shell scripts that sits
-atop
-.SM
-RCS
-.LG
-and provides the basic conflict-resolution algorithms.
-The resulting
-program, \fBcvs\fP, addresses not only the issue of conflict-resolution in
-a multi-developer open-editing environment, but also the issues of
-software release control and vendor source support and integration.
-.NH
-The CVS Program
-.PP
-\fBcvs\fP
-(Concurrent Versions System)
-is a front end to the
-.SM
-RCS
-.LG
-revision control system which extends
-the notion of revision control from a collection of files in a single
-directory to a hierarchical collection of directories each containing
-revision controlled files.
-Directories and files in the \fBcvs\fP system can be combined together in
-many ways to form a software release.
-\fBcvs\fP
-provides the functions necessary to manage these software releases and to
-control the concurrent editing of source files among multiple software
-developers.
-.PP
-The six major features of \fBcvs\fP are listed below, and will be
-described in more detail in the following sections:
-.RS
-.IP 1.
-Concurrent access and conflict-resolution algorithms to guarantee that
-source changes are not \*Qlost.\*U
-.IP 2.
-Support for tracking third-party vendor source distributions while
-maintaining the local modifications made to those sources.
-.IP 3.
-A flexible module database that provides a symbolic mapping of names to
-components of a larger software distribution.
-This symbolic mapping provides for location independence within the software
-release and, for example, allows one to check out a copy of the \*Qdiff\*U
-program without ever knowing that the sources to \*Qdiff\*U actually reside
-in the \*Qbin/diff\*U directory.
-.IP 4.
-Configurable logging support allows all \*Qcommitted\*U source file changes
-to be logged using an arbitrary program to save the log messages in a file,
-notesfile, or news database.
-.IP 5.
-A software release can be symbolically tagged and checked out at any time
-based on that tag.
-An exact copy of a previous software release can be checked out at
-any time, \fIregardless\fP of whether files or directories have been
-added/removed from the \*Qcurrent\*U software release.
-As well,
-a \*Qdate\*U can be used to check out the \fIexact\fP version of the software
-release as of the specified date.
-.IP 6.
-A \*Qpatch\*U format file [Wall] can be produced between two software
-releases, even if the releases span multiple directories.
-.RE
-.PP
-The sources maintained by \fBcvs\fP are kept within a single directory
-hierarchy known as the \*Qsource repository.\*U
-This \*Qsource repository\*U holds the actual
-.SM
-RCS
-.LG
-\*Q,v\*U files directly, as well as a special per-repository directory
-(\c
-.SM
-CVSROOT.adm\c
-.LG
-) which contains a small number of administrative files that describe the
-repository and how it can be accessed.
-See Figure 1 for a picture of the \fBcvs\fP tree.
-.KF
-.hl
-.DS B
-.PS
-line from 4.112,9.200 to 5.550,8.887
-line from 5.447,8.884 to 5.550,8.887 to 5.458,8.933
-line from 4.112,9.200 to 4.550,8.950
-line from 4.451,8.978 to 4.550,8.950 to 4.476,9.021
-line from 4.112,9.200 to 3.737,8.887
-line from 3.798,8.971 to 3.737,8.887 to 3.830,8.932
-line from 3.612,8.762 to 4.737,8.137
-line from 4.638,8.164 to 4.737,8.137 to 4.662,8.208
-line from 3.612,8.762 to 3.737,8.137
-line from 3.693,8.231 to 3.737,8.137 to 3.742,8.240
-line from 3.612,8.762 to 2.612,8.200
-line from 2.687,8.271 to 2.612,8.200 to 2.712,8.227
-line from 2.362,9.262 to 2.737,8.950
-line from 2.645,8.995 to 2.737,8.950 to 2.677,9.033
-line from 2.362,9.262 to 1.925,8.950
-line from 1.992,9.028 to 1.925,8.950 to 2.021,8.988
-line from 3.362,9.762 to 4.050,9.387
-line from 3.950,9.413 to 4.050,9.387 to 3.974,9.457
-line from 3.362,9.762 to 2.487,9.387
-line from 2.570,9.450 to 2.487,9.387 to 2.589,9.404
-.ps 11
-"newfs.c,v" at 4.487,8.043 ljust
-.ps 11
-"mkfs.c,v" at 3.487,8.043 ljust
-.ps 11
-"Makefile,v" at 2.237,8.043 ljust
-.ps 11
-"newfs" at 3.487,8.793 ljust
-.ps 11
-"halt.c,v" at 5.487,8.793 ljust
-.ps 11
-"Makefile,v" at 4.237,8.793 ljust
-.ps 11
-"modules,v" at 2.487,8.793 ljust
-.ps 11
-"loginfo,v" at 1.488,8.793 ljust
-.ps 11
-"etc" at 3.987,9.293 ljust
-.ps 11
-"CVSROOT.adm" at 1.988,9.293 ljust
-.ps 11
-"/src/master" at 2.987,9.793 ljust
-.PE
-.DE
-.hl
-.ce 100
-.LG
-\fBFigure 1.\fP
-.SM
-\fBcvs\fP Source Repository
-.ce 0
-.sp
-.KE
-.NH 2
-Software Conflict Resolution\**
-.FS
-The basic conflict-resolution algorithms
-used in the \fBcvs\fP program find their roots
-in the original work done by Dick Grune at Vrije Universiteit in Amsterdam
-and posted to \fBcomp.sources.unix\fP in the volume 6 release sometime in 1986.
-This original version of \fBcvs\fP was a collection of shell scripts that
-combined to form a front end to the
-.SM
-RCS
-.LG
-programs.
-.FE
-.PP
-\fBcvs\fP allows several software developers to edit personal copies of a
-revision controlled file concurrently.
-The revision number of each checked out file is maintained independently
-for each user, and \fBcvs\fP forces the checked out file to be current with
-the \*Qhead\*U revision before it can be \*Qcommitted\*U as a permanent change.
-A checked out file is brought up-to-date with the \*Qhead\*U revision using
-the \*Qupdate\*U command of \fBcvs\fP.
-This command compares the \*Qhead\*U revision number with that of the user's
-file and performs an
-.SM
-RCS
-.LG
-merge operation if they are not the same.
-The result of the merge is a file that contains the user's modifications
-and those modifications that were \*Qcommitted\*U after the user
-checked out his version of the file (as well as a backup copy of the
-user's original file).
-\fBcvs\fP points out any conflicts during the merge.
-It is the user's responsibility to resolve these conflicts
-and to \*Qcommit\*U his/her changes when ready.
-.PP
-Although the \fBcvs\fP conflict-resolution algorithm was defined in 1986,
-it is remarkably similar to the \*QCopy-Modify-Merge\*U scenario included
-with NSE\**
-.FS
-NSE is the Network Software Environment, a product of Sun Microsystems, Inc.
-.FE
-and described in [Honda] and [Courington].
-The following explanation from [Honda] also applies to \fBcvs\fP:
-.QP
-Simply stated, a developer copies an object without locking it, modifies
-the copy, and then merges the modified copy with the original.
-This paradigm allows developers to work in isolation from one another since
-changes are made to copies of objects.
-Because locks are not used, development is not serialized and can proceed
-in parallel.
-Developers, however, must merge objects after the changes have been made.
-In particular, a developer must resolve conflicts when the same object has
-been modified by someone else.
-.PP
-In practice, Prisma has found that conflicts that occur when the same
-object has been modified by someone else are quite rare.
-When they do happen, the changes made by the other developer are usually
-easily resolved.
-This practical use has shown that the \*QCopy-Modify-Merge\*U paradigm is a
-correct and useful one.
-.NH 2
-Tracking Third-Party Source Distributions
-.PP
-Currently, a large amount of software is based on source
-distributions from a third-party distributor.
-It is often the case that local modifications are to be made to this
-distribution, \fIand\fP that the vendor's future releases should be
-tracked.
-Rolling your local modifications forward into the new vendor release is a
-time-consuming task, but \fBcvs\fP can ease this burden somewhat.
-The \fBcheckin\fP program of \fBcvs\fP initially sets up a source
-repository by integrating the source modules directly from the vendor's
-release, preserving the directory hierarchy of the vendor's distribution.
-The branch support of
-.SM
-RCS
-.LG
-is used to build this vendor release as a branch of the main
-.SM
-RCS
-.LG
-trunk.
-Figure 2 shows how the \*Qhead\*U tracks a sample vendor
-branch when no local modifications have been made to the file.
-.KF
-.hl
-.DS B
-.PS
-ellipse at 3.237,6.763 wid 1.000 ht 0.500
-dashwid = 0.050i
-line dashed from 3.237,7.513 to 3.737,7.513 to 3.737,9.762 to 4.237,9.762
-line from 4.138,9.737 to 4.237,9.762 to 4.138,9.787
-line dashed from 2.237,8.262 to 3.237,8.262 to 3.237,7.013
-line from 3.212,7.112 to 3.237,7.013 to 3.262,7.112
-line from 3.737,6.763 to 4.237,6.763
-line from 4.138,6.737 to 4.237,6.763 to 4.138,6.788
-line from 2.237,6.763 to 2.737,6.763
-line from 2.637,6.737 to 2.737,6.763 to 2.637,6.788
-line from 1.738,6.013 to 1.738,6.513
-line from 1.762,6.413 to 1.738,6.513 to 1.713,6.413
-line from 1.238,7.013 to 2.237,7.013 to 2.237,6.513 to 1.238,6.513 to 1.238,7.013
-line from 4.237,9.012 to 5.237,9.012 to 5.237,8.512 to 4.237,8.512 to 4.237,9.012
-line from 4.237,8.012 to 5.237,8.012 to 5.237,7.513 to 4.237,7.513 to 4.237,8.012
-line from 4.237,7.013 to 5.237,7.013 to 5.237,6.513 to 4.237,6.513 to 4.237,7.013
-line from 4.737,7.013 to 4.737,7.513
-line from 4.763,7.413 to 4.737,7.513 to 4.712,7.413
-line from 4.737,8.012 to 4.737,8.512
-line from 4.763,8.412 to 4.737,8.512 to 4.712,8.412
-line from 4.237,10.012 to 5.237,10.012 to 5.237,9.512 to 4.237,9.512 to 4.237,10.012
-line from 4.737,9.012 to 4.737,9.512
-line from 4.763,9.412 to 4.737,9.512 to 4.712,9.412
-line from 5.987,5.013 to 5.987,6.013 to 0.988,6.013 to 0.988,5.013 to 5.987,5.013
-.ps 11
-"\"HEAD\"" at 1.550,8.231 ljust
-.ps 11
-"'SunOS'" at 2.987,6.293 ljust
-.ps 11
-"1.1.1" at 3.050,6.793 ljust
-.ps 11
-"1.1" at 1.613,6.793 ljust
-.ps 11
-"1.1.1.1" at 4.487,6.793 ljust
-.ps 11
-"1.1.1.2" at 4.487,7.793 ljust
-.ps 11
-"1.1.1.3" at 4.487,8.793 ljust
-.ps 11
-"1.1.1.4" at 4.487,9.793 ljust
-.ps 11
-"'SunOS_4_0'" at 5.487,6.793 ljust
-.ps 11
-"'SunOS_4_0_1'" at 5.487,7.793 ljust
-.ps 11
-"'YAPT_5_5C'" at 5.487,8.793 ljust
-.ps 11
-"'SunOS_4_0_3'" at 5.487,9.793 ljust
-.ps 11
-"rcsfile.c,v" at 2.987,5.543 ljust
-.PE
-.DE
-.hl
-.ce 100
-.LG
-\fBFigure 2.\fP
-.SM
-\fBcvs\fP Vendor Branch Example
-.ce 0
-.sp .3
-.KE
-Once this is done, developers can check out files and make local changes to
-the vendor's source distribution.
-These local changes form a new branch to the tree which is then used as the
-source for future check outs.
-Figure 3 shows how the \*Qhead\*U moves to the main
-.SM
-RCS
-.LG
-trunk when a local modification is made.
-.KF
-.hl
-.DS B
-.PS
-ellipse at 3.237,6.763 wid 1.000 ht 0.500
-dashwid = 0.050i
-line dashed from 2.800,9.075 to 1.738,9.075 to 1.738,8.012
-line from 1.713,8.112 to 1.738,8.012 to 1.762,8.112
-line from 1.738,7.013 to 1.738,7.513
-line from 1.762,7.413 to 1.738,7.513 to 1.713,7.413
-line from 1.238,8.012 to 2.237,8.012 to 2.237,7.513 to 1.238,7.513 to 1.238,8.012
-line from 3.737,6.763 to 4.237,6.763
-line from 4.138,6.737 to 4.237,6.763 to 4.138,6.788
-line from 2.237,6.763 to 2.737,6.763
-line from 2.637,6.737 to 2.737,6.763 to 2.637,6.788
-line from 1.738,6.013 to 1.738,6.513
-line from 1.762,6.413 to 1.738,6.513 to 1.713,6.413
-line from 1.238,7.013 to 2.237,7.013 to 2.237,6.513 to 1.238,6.513 to 1.238,7.013
-line from 4.237,9.012 to 5.237,9.012 to 5.237,8.512 to 4.237,8.512 to 4.237,9.012
-line from 4.237,8.012 to 5.237,8.012 to 5.237,7.513 to 4.237,7.513 to 4.237,8.012
-line from 4.237,7.013 to 5.237,7.013 to 5.237,6.513 to 4.237,6.513 to 4.237,7.013
-line from 4.737,7.013 to 4.737,7.513
-line from 4.763,7.413 to 4.737,7.513 to 4.712,7.413
-line from 4.737,8.012 to 4.737,8.512
-line from 4.763,8.412 to 4.737,8.512 to 4.712,8.412
-line from 4.237,10.012 to 5.237,10.012 to 5.237,9.512 to 4.237,9.512 to 4.237,10.012
-line from 4.737,9.012 to 4.737,9.512
-line from 4.763,9.412 to 4.737,9.512 to 4.712,9.412
-line from 5.987,5.013 to 5.987,6.013 to 0.988,6.013 to 0.988,5.013 to 5.987,5.013
-.ps 11
-"1.2" at 1.613,7.793 ljust
-.ps 11
-"\"HEAD\"" at 2.862,9.043 ljust
-.ps 11
-"'SunOS'" at 2.987,6.293 ljust
-.ps 11
-"1.1.1" at 3.050,6.793 ljust
-.ps 11
-"1.1" at 1.613,6.793 ljust
-.ps 11
-"1.1.1.1" at 4.487,6.793 ljust
-.ps 11
-"1.1.1.2" at 4.487,7.793 ljust
-.ps 11
-"1.1.1.3" at 4.487,8.793 ljust
-.ps 11
-"1.1.1.4" at 4.487,9.793 ljust
-.ps 11
-"'SunOS_4_0'" at 5.487,6.793 ljust
-.ps 11
-"'SunOS_4_0_1'" at 5.487,7.793 ljust
-.ps 11
-"'YAPT_5_5C'" at 5.487,8.793 ljust
-.ps 11
-"'SunOS_4_0_3'" at 5.487,9.793 ljust
-.ps 11
-"rcsfile.c,v" at 2.987,5.543 ljust
-.PE
-.DE
-.hl
-.ce 100
-.LG
-\fBFigure 3.\fP
-.SM
-\fBcvs\fP Local Modification to Vendor Branch
-.ce 0
-.sp
-.KE
-.PP
-When a new version of the vendor's source distribution arrives, the
-\fBcheckin\fP program adds the new and changed vendor's files to the
-already existing source repository.
-For files that have not been changed locally, the new file from the
-vendor becomes the current \*Qhead\*U revision.
-For files that have been modified locally, \fBcheckin\fP warns that the
-file must be merged with the new vendor release.
-The \fBcvs\fP \*Qjoin\*U command is a useful tool that aids this process by
-performing the necessary
-.SM
-RCS
-.LG
-merge, as is done above when performing an \*Qupdate.\*U
-.PP
-There is also limited support for \*Qdual\*U derivations for source files.
-See Figure 4 for a sample dual-derived file.
-.KF
-.hl
-.DS B
-.PS
-ellipse at 2.337,8.575 wid 0.700 ht 0.375
-ellipse at 2.312,9.137 wid 0.700 ht 0.375
-line from 1.225,9.012 to 1.225,9.363
-line from 1.250,9.263 to 1.225,9.363 to 1.200,9.263
-line from 0.875,9.725 to 1.600,9.725 to 1.600,9.363 to 0.875,9.363 to 0.875,9.725
-line from 0.875,9.012 to 1.600,9.012 to 1.600,8.650 to 0.875,8.650 to 0.875,9.012
-line from 4.050,10.200 to 4.775,10.200 to 4.775,9.850 to 4.050,9.850 to 4.050,10.200
-line from 4.050,9.475 to 4.775,9.475 to 4.775,9.113 to 4.050,9.113 to 4.050,9.475
-line from 4.050,8.762 to 4.775,8.762 to 4.775,8.400 to 4.050,8.400 to 4.050,8.762
-line from 4.425,8.762 to 4.425,9.113
-line from 4.450,9.013 to 4.425,9.113 to 4.400,9.013
-line from 4.425,9.475 to 4.425,9.850
-line from 4.450,9.750 to 4.425,9.850 to 4.400,9.750
-line from 3.050,10.000 to 3.775,10.000 to 3.775,9.637 to 3.050,9.637 to 3.050,10.000
-line from 3.050,9.312 to 3.775,9.312 to 3.775,8.950 to 3.050,8.950 to 3.050,9.312
-line from 0.713,7.325 to 0.713,8.075 to 4.925,8.075 to 4.925,7.325 to 0.713,7.325
-line from 1.238,8.075 to 1.238,8.637
-line from 1.262,8.537 to 1.238,8.637 to 1.213,8.537
-line from 1.613,8.825 to 1.975,8.575
-line from 1.878,8.611 to 1.975,8.575 to 1.907,8.652
-line from 2.675,8.575 to 4.050,8.575
-line from 3.950,8.550 to 4.050,8.575 to 3.950,8.600
-line from 2.675,9.137 to 3.050,9.137
-line from 2.950,9.112 to 3.050,9.137 to 2.950,9.162
-line from 3.425,9.325 to 3.425,9.637
-line from 3.450,9.537 to 3.425,9.637 to 3.400,9.537
-line from 1.613,8.825 to 1.925,9.137
-line from 1.872,9.049 to 1.925,9.137 to 1.837,9.084
-.ps 11
-"'BSD'" at 2.138,9.481 ljust
-.ps 11
-"1.2" at 1.113,9.543 ljust
-.ps 11
-"1.1" at 1.125,8.831 ljust
-.ps 11
-"1.1.1.1" at 4.175,8.543 ljust
-.ps 11
-"1.1.1.2" at 4.175,9.281 ljust
-.ps 11
-"1.1.1.3" at 4.175,9.993 ljust
-.ps 11
-"1.1.2.2" at 3.175,9.793 ljust
-.ps 11
-"1.1.2.1" at 3.175,9.106 ljust
-.ps 11
-"rcsfile.c,v" at 2.425,7.706 ljust
-.ps 11
-"1.1.1" at 2.175,8.568 ljust
-.ps 11
-"'SunOS'" at 2.125,8.243 ljust
-.ps 11
-"1.1.2" at 2.163,9.131 ljust
-.PE
-.DE
-.hl
-.ce 100
-.LG
-\fBFigure 4.\fP
-.SM
-\fBcvs\fP Support For \*QDual\*U Derivations
-.ce 0
-.sp
-.KE
-This example tracks the SunOS distribution but includes major changes from
-Berkeley.
-These BSD files are saved directly in the
-.SM
-RCS
-.LG
-file off a new branch.
-.NH 2
-Location Independent Module Database
-.PP
-\fBcvs\fP contains support for a simple, yet powerful, \*Qmodule\*U database.
-For reasons of efficiency, this database is stored in \fBndbm\fP\|(3) format.
-The module database is used to apply names to collections of directories
-and files as a matter of convenience for checking out pieces of a large
-software distribution.
-The database records the physical location of the sources as a form of
-information hiding, allowing one to check out whole directory hierarchies
-or individual files without regard for their actual location within the
-global source distribution.
-.PP
-Consider the following small sample of a module database, which must be
-tailored manually to each specific source repository environment:
-.DS
-\f(CW #key [-option argument] directory [files...]
- diff bin/diff
- libc lib/libc
- sys -o sys/tools/make_links sys
- modules -i mkmodules CVSROOT.adm modules
- kernel -a sys lang/adb
- ps bin Makefile ps.c\fP
-.DE
-.PP
-The \*Qdiff\*U and \*Qlibc\*U modules refer to whole directory hierarchies that
-are extracted on check out.
-The \*Qsys\*U module extracts the \*Qsys\*U hierarchy, and runs the
-\*Qmake_links\*U program at the end of the check out process (the \fI-o\fP
-option specifies a program to run on check\fIo\fPut).
-The \*Qmodules\*U module allows one to edit the module database file and
-runs the \*Qmkmodules\*U program on check\fIi\fPn to regenerate the
-\fBndbm\fP database that \fBcvs\fP uses.
-The \*Qkernel\*U module is an alias (as the \fI-a\fP option specifies)
-which causes the remaining arguments after the \fI-a\fP to be interpreted
-exactly as if they had been specified on the command line.
-This is useful for objects that require shared pieces of code from far away
-places to be compiled (as is the case with the kernel debugger, \fBkadb\fP,
-which shares code with the standard \fBadb\fP debugger).
-The \*Qps\*U module shows that the source for \*Qps\*U lives in the \*Qbin\*U
-directory, but only \fIMakefile\fP and \fIps.c\fP are required to build the
-object.
-.PP
-The module database at Prisma is now populated for the entire UNIX
-distribution and thereby allows us to issue the
-following convenient commands to check out components of the UNIX
-distribution without regard for their actual location within the master source
-repository:
-.DS
-\f(CW example% cvs checkout diff
- example% cvs checkout libc ps
- example% cd diff; make\fP
-.DE
-.PP
-In building the module database file, it is quite possible to have name
-conflicts within a global software distribution.
-For example, SunOS provides two \fBcat\fP programs:
-one for the standard environment, \fI/bin/cat\fP, and one for the System V
-environment, \fI/usr/5bin/cat\fP.
-We resolved this conflict by naming the standard \fBcat\fP module
-\*Qcat\*U, and the System V \fBcat\fP module \*Q5cat\*U.
-Similar name modifications must be applied to other conflicting names, as
-might be found between a utility program and a library function, though
-Prisma chose not to include individual library functions within the module
-database at this time.
-.NH 2
-Configurable Logging Support
-.PP
-The \fBcvs\fP \*Qcommit\*U command is used to make a permanent change to the
-master source repository (where the
-.SM
-RCS
-.LG
-\*Q,v\*U files live).
-Whenever a \*Qcommit\*U is done, the log message for the change is carefully
-logged by an arbitrary program (in a file, notesfile, news database, or
-mail).
-For example, a collection of these updates can be used to produce release
-notices.
-\fBcvs\fP can be configured to send log updates through one or more filter
-programs, based on a regular expression match on the directory that is
-being changed.
-This allows multiple related or unrelated projects to exist within a single
-\fBcvs\fP source repository tree, with each different project sending its
-\*Qcommit\*U reports to a unique log device.
-.PP
-A sample logging configuration file might look as follows:
-.DS
-\f(CW #regex filter-program
- DEFAULT /usr/local/bin/nfpipe -t %s utils.updates
- ^diag /usr/local/bin/nfpipe -t %s diag.updates
- ^local /usr/local/bin/nfpipe -t %s local.updates
- ^perf /usr/local/bin/nfpipe -t %s perf.updates
- ^sys /usr/local/bin/nfpipe -t %s kernel.updates\fP
-.DE
-.PP
-This sample allows the diagnostics and performance groups to
-share the same source repository with the kernel and utilities groups.
-Changes that they make are sent directly to their own notesfile [Essick]
-through the \*Qnfpipe\*U program.
-A sufficiently simple title is substituted for the \*Q%s\*U argument before
-the filter program is executed.
-This logging configuration file is tailored manually to each specific
-source repository environment.
-.NH 2
-Tagged Releases and Dates
-.PP
-Any release can be given a symbolic tag name that is stored directly in the
-.SM
-RCS
-.LG
-files.
-This tag can be used at any time to get an exact copy of any previous
-release.
-With equal ease, one can also extract an exact copy of the source files as
-of any arbitrary date in the past as well.
-Thus, all that's required to tag the current kernel, and to tag the kernel
-as of the Fourth of July is:
-.DS
-\f(CW example% cvs tag TEST_KERNEL kernel
- example% cvs tag -D 'July 4' PATRIOTIC_KERNEL kernel\fP
-.DE
-The following command would retrieve an exact copy of the test kernel at
-some later date:
-.DS
-\f(CW example% cvs checkout -fp -rTEST_KERNEL kernel\fP
-.DE
-The \fI-f\fP option causes only files that match the specified tag to be
-extracted, while the \fI-p\fP option automatically prunes empty directories.
-Consequently, directories added to the kernel after the test kernel was
-tagged are not included in the newly extracted copy of the test kernel.
-.PP
-The \fBcvs\fP date support has exactly the same interface as that provided
-with
-.SM
-RCS\c
-.LG
-, however \fBcvs\fP must process the \*Q,v\*U files directly due to the
-special handling required by the vendor branch support.
-The standard
-.SM
-RCS
-.LG
-date handling only processes one branch (or the main trunk) when checking
-out based on a date specification.
-\fBcvs\fP must instead process the current \*Qhead\*U branch and, if a
-match is not found, proceed to look for a match on the vendor branch.
-This, combined with reasons of performance, is why \fBcvs\fP processes
-revision (symbolic and numeric) and date specifications directly from the
-\*Q,v\*U files.
-.NH 2
-Building \*Qpatch\*U Source Distributions
-.PP
-\fBcvs\fP can produce a \*Qpatch\*U format [Wall] output file which can be
-used to bring a previously released software distribution current with the
-newest release.
-This patch file supports an entire directory hierarchy within a single
-patch, as well as being able to add whole new files to the previous
-release.
-One can combine symbolic revisions and dates together to display changes in
-a very generic way:
-.DS
-\f(CW example% cvs patch -D 'December 1, 1988' \e
- -D 'January 1, 1989' sys\fP
-.DE
-This example displays the kernel changes made in the month of December,
-1988.
-To release a patch file, for example, to take the \fBcvs\fP distribution
-from version 1.0 to version 1.4 might be done as follows:
-.DS
-\f(CW example% cvs patch -rCVS_1_0 -rCVS_1_4 cvs\fP
-.DE
-.NH
-CVS Experience
-.NH 2
-Statistics
-.PP
-A quick summary of the scale that \fBcvs\fP is addressing today
-can be found in Table 1.
-.KF
-.TS
-box center tab(:);
-c s
-c s
-c | c
-l | n .
-\fB\s+2Revision Control Statistics at Prisma
-as of 11/11/89\fP\s-2
-_
-How Many...:Total
-=
-Files:17243
-Directories:1005
-Lines of code:3927255
-Removed files:131
-Software developers:14
-Software groups:6
-Megabytes of source:128
-.TE
-.ce 100
-.LG
-\fBTable 1.\fP
-.SM
-\fBcvs\fP Statistics
-.ce 0
-.sp .3
-.KE
-Table 2 shows the history of files changed or added and the number
-of source lines affected by the change at Prisma.
-Only changes made to the kernel sources are included.
-.KF
-.TS
-box center tab(:);
-c s s s s
-c s s s s
-c || c | c || c | c
-c || c | c || c | c
-l || n | n || n | n.
-\fB\s+2Prisma Kernel Source File Changes
-By Month, 1988-1989\fP\s-2
-_
-Month:# Changed:# Lines:# Added:# Lines
-\^:Files:Changed:Files:Added
-=
-Dec:87:3619:68:9266
-Jan:39:4324:0:0
-Feb:73:1578:5:3550
-Mar:99:5301:18:11461
-Apr:112:7333:11:5759
-May:138:5371:17:13986
-Jun:65:2261:27:12875
-Jul:34:2000:1:58
-Aug:65:6378:8:4724
-Sep:266:23410:113:39965
-Oct:22:621:1:155
-Total:1000:62196:269:101799
-.TE
-.ce 100
-.LG
-\fBTable 2.\fP
-.SM
-\fBcvs\fP Usage History for the Kernel
-.ce 0
-.sp
-.KE
-The large number of source file changes made in September are the result of
-merging the SunOS 4.0.3 sources into the kernel.
-This merge process is described in section 3.3.
-.NH 2
-Performance
-.PP
-The performance of \fBcvs\fP is currently quite reasonable.
-Little effort has been expended on tuning \fBcvs\fP, although performance
-related decisions were made during the \fBcvs\fP design.
-For example, \fBcvs\fP parses the
-.SM
-RCS
-.LG
-\*Q,v\*U files directly instead of running an
-.SM
-RCS
-.LG
-process.
-This includes following branches as well as integrating with the vendor
-source branches and the main trunk when checking out files based on a date.
-.PP
-Checking out the entire kernel source tree (1223 files/59 directories)
-currently takes 16 wall clock minutes on a Sun-4/280.
-However, bringing the tree up-to-date with the current kernel sources, once
-it has been checked out, takes only 1.5 wall clock minutes.
-Updating the \fIcomplete\fP 128 MByte source tree under \fBcvs\fP control
-(17243 files/1005 directories) takes roughly 28 wall clock minutes and
-utilizes one-third of the machine.
-For now this is entirely acceptable; improvements on these numbers will
-possibly be made in the future.
-.NH 2
-The SunOS 4.0.3 Merge
-.PP
-The true test of the \fBcvs\fP vendor branch support came with the arrival
-of the SunOS 4.0.3 source upgrade tape.
-As described above, the \fBcheckin\fP program was used to install the new
-sources and the resulting output file listed the files that had been
-locally modified, needing to be merged manually.
-For the kernel, there were 94 files in conflict.
-The \fBcvs\fP \*Qjoin\*U command was used on each of the 94 conflicting
-files, and the remaining conflicts were resolved.
-.PP
-The \*Qjoin\*U command performs an \fBrcsmerge\fP operation.
-This in turn uses \fI/usr/lib/diff3\fP to produce a three-way diff file.
-As it happens, the \fBdiff3\fP program has a hard-coded limit of 200
-source-file changes maximum.
-This proved to be too small for a few of the kernel files that needed
-merging by hand, due to the large number of local changes that Prisma had
-made.
-The \fBdiff3\fP problem was solved by increasing the hard-coded limit by an
-order of magnitude.
-.PP
-The SunOS 4.0.3 kernel source upgrade distribution contained
-346 files, 233 of which were modifications to previously released files,
-and 113 of which were newly added files.
-\fBcheckin\fP added the 113 new files to the source repository
-without intervention.
-Of the 233 modified files, 139 dropped in cleanly by \fBcheckin\fP, since
-Prisma had not made any local changes to them, and 94 required manual
-merging due to local modifications.
-The 233 modified files consisted of 20,766 lines of differences.
-It took one developer two days to manually merge the 94 files using the
-\*Qjoin\*U command and resolving conflicts manually.
-An additional day was required for kernel debugging.
-The entire process of merging over 20,000 lines of differences was
-completed in less than a week.
-This one time-savings alone was justification enough for the \fBcvs\fP
-development effort; we expect to gain even more when tracking future SunOS
-releases.
-.NH
-Future Enhancements and Current Bugs
-.PP
-Since \fBcvs\fP was designed to be incomplete, for reasons of design
-simplicity, there are naturally a good
-number of enhancements that can be made to make it more useful.
-As well, some nuisances exist in the current implementation.
-.RS
-.IP \(bu 3
-\fBcvs\fP does not currently \*Qremember\*U who has a checked out a copy of a
-module.
-As a result, it is impossible to know who might be working on the same
-module that you are.
-A simple-minded database that is updated nightly would likely suffice.
-.IP \(bu 3
-Signal processing, keyboard interrupt handling in particular, is currently
-somewhat weak.
-This is due to the heavy use of the \fBsystem\fP\|(3) library
-function to execute
-.SM
-RCS
-.LG
-programs like \fBco\fP and \fBci\fP.
-It sometimes takes multiple interrupts to make \fBcvs\fP quit.
-This can be fixed by using a home-grown \fBsystem\fP\|() replacement.
-.IP \(bu 3
-Security of the source repository is currently not dealt with directly.
-The usual UNIX approach of user-group-other security permissions through
-the file system is utilized, but nothing else.
-\fBcvs\fP could likely be a set-group-id executable that checks a
-protected database to verify user access permissions for particular objects
-before allowing any operations to affect those objects.
-.IP \(bu 3
-With every checked-out directory, \fBcvs\fP maintains some administrative
-files that record the current revision numbers of the checked-out files as
-well as the location of the respective source repository.
-\fBcvs\fP does not recover nicely at all if these administrative files are
-removed.
-.IP \(bu 3
-The source code for \fBcvs\fP has been tested extensively on Sun-3 and
-Sun-4 systems, all running SunOS 4.0 or later versions of the operating
-system.
-Since the code has not yet been compiled under other platforms, the overall
-portability of the code is still questionable.
-.IP \(bu 3
-As witnessed in the previous section, the \fBcvs\fP method for tracking
-third party vendor source distributions can work quite nicely.
-However, if the vendor changes the directory structure or the file names
-within the source distribution, \fBcvs\fP has no way of matching the old
-release with the new one.
-It is currently unclear as to how to solve this, though it is certain to
-happen in practice.
-.RE
-.NH
-Availability
-.PP
-The \fBcvs\fP program sources can be found in a recent posting to the
-\fBcomp.sources.unix\fP newsgroup.
-It is also currently available via anonymous ftp from \*Qprisma.com\*U.
-Copying rights for \fBcvs\fP will be covered by the GNU General Public
-License.
-.NH
-Summary
-.PP
-Prisma has used \fBcvs\fP since December, 1988.
-It has evolved to meet our specific needs of revision and release control.
-We will make our code freely available so that others can
-benefit from our work, and can enhance \fBcvs\fP to meet broader needs yet.
-.PP
-Many of the other software release and revision control systems, like the
-one described in [Glew], appear to use a collection of tools that are
-geared toward specific environments \(em one set of tools for the kernel,
-one set for \*Qgeneric\*U software, one set for utilities, and one set for
-kernel and utilities.
-Each of these tool sets apparently handle some specific aspect of the
-problem uniquely.
-\fBcvs\fP took a somewhat different approach.
-File sharing through symbolic or hard links is not addressed; instead, the
-disk space is simply burned since it is \*Qcheap.\*U
-Support for producing objects for multiple architectures is not addressed;
-instead, a parallel checked-out source tree must be used for each
-architecture, again wasting disk space to simplify complexity and ease of
-use \(em punting on this issue allowed \fIMakefile\fPs to remain
-unchanged, unlike the approach taken in [Mahler], thereby maintaining closer
-compatibility with the third-party vendor sources.
-\fBcvs\fP is essentially a source-file server, making no assumptions or
-special handling of the sources that it controls.
-To \fBcvs\fP:
-.QP
-A source is a source, of course, of course, unless of course the source is
-Mr. Ed.\**
-.FS
-\fBcvs\fP, of course, does not really discriminate against Mr. Ed.\**
-.FE
-.FS
-Yet.
-.FE
-.LP
-Sources are maintained, saved, and retrievable at any time based on
-symbolic or numeric revision or date in the past.
-It is entirely up to \fBcvs\fP wrapper programs to provide for release
-environments and such.
-.PP
-The major advantage of \fBcvs\fP over the
-many other similar systems that have already been designed is the
-simplicity of \fBcvs\fP.
-\fBcvs\fP contains only three programs that do all the work of release
-and revision control, and two manually-maintained administrative
-files for each source repository.
-Of course, the deciding factor of any tool is whether people use it, and if
-they even \fIlike\fP to use it.
-At Prisma, \fBcvs\fP prevented members of the kernel
-group from killing each other.
-.NH
-Acknowledgements
-.PP
-Many thanks to Dick Grune at Vrije Universiteit in Amsterdam for his work
-on the original version of \fBcvs\fP and for making it available to the
-world.
-Thanks to Jeff Polk of Prisma for helping with the design of the module
-database, vendor branch support, and for writing the \fBcheckin\fP shell
-script.
-Thanks also to the entire software group at Prisma for taking the
-time to review the paper and correct my grammar.
-.NH
-References
-.IP [Bell] 12
-Bell Telephone Laboratories.
-\*QSource Code Control System User's Guide.\*U
-\fIUNIX System III Programmer's Manual\fP, October 1981.
-.IP [Courington] 12
-Courington, W.
-\fIThe Network Software Environment\fP,
-Sun Technical Report FE197-0, Sun Microsystems Inc, February 1989.
-.IP [Essick] 12
-Essick, Raymond B. and Robert Bruce Kolstad.
-\fINotesfile Reference Manual\fP,
-Department of Computer Science Technical Report #1081,
-University of Illinois at Urbana-Champaign, Urbana, Illinois,
-1982, p. 26.
-.IP [Glew] 12
-Glew, Andy.
-\*QBoxes, Links, and Parallel Trees:
-Elements of a Configuration Management System.\*U
-\fIWorkshop Proceedings of the Software Management Conference\fP, USENIX,
-New Orleans, April 1989.
-.IP [Grune] 12
-Grune, Dick.
-Distributed the original shell script version of \fBcvs\fP in the
-\fBcomp.sources.unix\fP volume 6 release in 1986.
-.IP [Honda] 12
-Honda, Masahiro and Terrence Miller.
-\*QSoftware Management Using a CASE Environment.\*U
-\fIWorkshop Proceedings of the Software Management Conference\fP, USENIX,
-New Orleans, April 1989.
-.IP [Mahler] 12
-Mahler, Alex and Andreas Lampen.
-\*QAn Integrated Toolset for Engineering Software Configurations.\*U
-\fIProceedings of the ACM SIGSOFT/SIGPLAN Software Engineering Symposium on
-Practical Software Development Environments\fP, ACM, Boston, November 1988.
-Described is the \fBshape\fP toolkit posted to the
-\fBcomp.sources.unix\fP newsgroup in the volume 19 release.
-.IP [Tichy] 12
-Tichy, Walter F.
-\*QDesign, Implementation, and Evaluation of a Revision Control System.\*U
-\fIProceedings of the 6th International Conference on Software
-Engineering\fP, IEEE, Tokyo, September 1982.
-.IP [Wall] 12
-Wall, Larry.
-The \fBpatch\fP program is an indispensable tool for applying a diff file
-to an original.
-Can be found on uunet.uu.net in ~ftp/pub/patch.tar.
diff --git a/gnu/usr.bin/cvs/lib/Makefile.in b/gnu/usr.bin/cvs/lib/Makefile.in
deleted file mode 100644
index a8309f2..0000000
--- a/gnu/usr.bin/cvs/lib/Makefile.in
+++ /dev/null
@@ -1,91 +0,0 @@
-# Makefile for library files used by GNU CVS.
-# Do not use this makefile directly, but only from `../Makefile'.
-# Copyright (C) 1986, 1988-1992 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-# @(#)Makefile.in 1.12 92/03/31
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-@VPATH@
-
-SOURCES = argmatch.c \
-error.c getopt.c getopt1.c \
-sighandle.c \
-strippath.c stripslash.c yesno.c \
-getdate.y \
-hostname.c fnmatch.c ftruncate.c mkdir.c rename.c regex.c \
-strdup.c getwd.c alloca.c
-
-OBJECTS = argmatch.o \
-error.o getopt.o getopt1.o \
-sighandle.o \
-strippath.o stripslash.o yesno.o \
-getdate.o \
-@LIBOBJS@
-
-DISTFILES = Makefile.in getopt.h \
-fnmatch.h regex.h system.h wait.h $(SOURCES)
-
-xxx:
- @cd ..; $(MAKE) all SUBDIRS=lib
-
-all: libcvs.a
-.PHONY: all
-
-install: all
-.PHONY: install
-
-tags: $(DISTFILES)
- ctags $(DISTFILES)
-
-TAGS: $(DISTFILES)
- etags $(DISTFILES)
-
-ls:
- @echo $(DISTFILES)
-.PHONY: ls
-
-clean:
- rm -f *.a *.o *.tab.c getdate.c
-.PHONY: clean
-
-distclean: clean
- rm -f tags TAGS Makefile
-.PHONY: distclean
-
-realclean: distclean
-.PHONY: realclean
-
-dist:
- ln $(DISTFILES) ../`cat ../.fname`/lib
-.PHONY: dist
-
-libcvs.a: $(OBJECTS)
- $(AR) cr $@ $(OBJECTS)
- -$(RANLIB) $@
-
-getdate.c: getdate.y
- @echo expect 8 shift/reduce conflicts
- $(YACC) $(srcdir)/getdate.y
- -if test -f y.tab.c ; then mv y.tab.c getdate.c ; fi
- -if test -f getdate.tab.c ; then mv getdate.tab.c getdate.c ; fi
-
-fnmatch.o: fnmatch.h
-getopt1.o: getopt.h
-regex.o: regex.h
-getwd.o: system.h
diff --git a/gnu/usr.bin/cvs/lib/regex.c b/gnu/usr.bin/cvs/lib/regex.c
deleted file mode 100644
index 8169880..0000000
--- a/gnu/usr.bin/cvs/lib/regex.c
+++ /dev/null
@@ -1,4948 +0,0 @@
-/* Extended regular expression matching and search library,
- version 0.12.
- (Implements POSIX draft P10003.2/D11.2, except for
- internationalization features.)
-
- Copyright (C) 1993 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* AIX requires this to be the first thing in the file. */
-#if defined (_AIX) && !defined (REGEX_MALLOC)
- #pragma alloca
-#endif
-
-#define _GNU_SOURCE
-
-/* We need this for `regex.h', and perhaps for the Emacs include files. */
-#include <sys/types.h>
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* The `emacs' switch turns on certain matching commands
- that make sense only in Emacs. */
-#ifdef emacs
-
-#include "lisp.h"
-#include "buffer.h"
-#include "syntax.h"
-
-/* Emacs uses `NULL' as a predicate. */
-#undef NULL
-
-#else /* not emacs */
-
-/* We used to test for `BSTRING' here, but only GCC and Emacs define
- `BSTRING', as far as I know, and neither of them use this code. */
-#if HAVE_STRING_H || STDC_HEADERS
-#include <string.h>
-#ifndef bcmp
-#define bcmp(s1, s2, n) memcmp ((s1), (s2), (n))
-#endif
-#ifndef bcopy
-#define bcopy(s, d, n) memcpy ((d), (s), (n))
-#endif
-#ifndef bzero
-#define bzero(s, n) memset ((s), 0, (n))
-#endif
-#else
-#include <strings.h>
-#endif
-
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#else
-char *malloc ();
-char *realloc ();
-#endif
-
-
-/* Define the syntax stuff for \<, \>, etc. */
-
-/* This must be nonzero for the wordchar and notwordchar pattern
- commands in re_match_2. */
-#ifndef Sword
-#define Sword 1
-#endif
-
-#ifdef SYNTAX_TABLE
-
-extern char *re_syntax_table;
-
-#else /* not SYNTAX_TABLE */
-
-/* How many characters in the character set. */
-#define CHAR_SET_SIZE 256
-
-static char re_syntax_table[CHAR_SET_SIZE];
-
-static void
-init_syntax_once ()
-{
- register int c;
- static int done = 0;
-
- if (done)
- return;
-
- bzero (re_syntax_table, sizeof re_syntax_table);
-
- for (c = 'a'; c <= 'z'; c++)
- re_syntax_table[c] = Sword;
-
- for (c = 'A'; c <= 'Z'; c++)
- re_syntax_table[c] = Sword;
-
- for (c = '0'; c <= '9'; c++)
- re_syntax_table[c] = Sword;
-
- re_syntax_table['_'] = Sword;
-
- done = 1;
-}
-
-#endif /* not SYNTAX_TABLE */
-
-#define SYNTAX(c) re_syntax_table[c]
-
-#endif /* not emacs */
-
-/* Get the interface, including the syntax bits. */
-#include "regex.h"
-
-/* isalpha etc. are used for the character classes. */
-#include <ctype.h>
-
-#ifndef isascii
-#define isascii(c) 1
-#endif
-
-#ifdef isblank
-#define ISBLANK(c) (isascii (c) && isblank (c))
-#else
-#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
-#endif
-#ifdef isgraph
-#define ISGRAPH(c) (isascii (c) && isgraph (c))
-#else
-#define ISGRAPH(c) (isascii (c) && isprint (c) && !isspace (c))
-#endif
-
-#define ISPRINT(c) (isascii (c) && isprint (c))
-#define ISDIGIT(c) (isascii (c) && isdigit (c))
-#define ISALNUM(c) (isascii (c) && isalnum (c))
-#define ISALPHA(c) (isascii (c) && isalpha (c))
-#define ISCNTRL(c) (isascii (c) && iscntrl (c))
-#define ISLOWER(c) (isascii (c) && islower (c))
-#define ISPUNCT(c) (isascii (c) && ispunct (c))
-#define ISSPACE(c) (isascii (c) && isspace (c))
-#define ISUPPER(c) (isascii (c) && isupper (c))
-#define ISXDIGIT(c) (isascii (c) && isxdigit (c))
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* We remove any previous definition of `SIGN_EXTEND_CHAR',
- since ours (we hope) works properly with all combinations of
- machines, compilers, `char' and `unsigned char' argument types.
- (Per Bothner suggested the basic approach.) */
-#undef SIGN_EXTEND_CHAR
-#if __STDC__
-#define SIGN_EXTEND_CHAR(c) ((signed char) (c))
-#else /* not __STDC__ */
-/* As in Harbison and Steele. */
-#define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
-#endif
-
-/* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we
- use `alloca' instead of `malloc'. This is because using malloc in
- re_search* or re_match* could cause memory leaks when C-g is used in
- Emacs; also, malloc is slower and causes storage fragmentation. On
- the other hand, malloc is more portable, and easier to debug.
-
- Because we sometimes use alloca, some routines have to be macros,
- not functions -- `alloca'-allocated space disappears at the end of the
- function it is called in. */
-
-#ifdef REGEX_MALLOC
-
-#define REGEX_ALLOCATE malloc
-#define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
-
-#else /* not REGEX_MALLOC */
-
-/* Emacs already defines alloca, sometimes. */
-#ifndef alloca
-
-/* Make alloca work the best possible way. */
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not __GNUC__ */
-#if HAVE_ALLOCA_H
-#include <alloca.h>
-#else /* not __GNUC__ or HAVE_ALLOCA_H */
-#ifndef _AIX /* Already did AIX, up at the top. */
-char *alloca ();
-#endif /* not _AIX */
-#endif /* not HAVE_ALLOCA_H */
-#endif /* not __GNUC__ */
-
-#endif /* not alloca */
-
-#define REGEX_ALLOCATE alloca
-
-/* Assumes a `char *destination' variable. */
-#define REGEX_REALLOCATE(source, osize, nsize) \
- (destination = (char *) alloca (nsize), \
- bcopy (source, destination, osize), \
- destination)
-
-#endif /* not REGEX_MALLOC */
-
-
-/* True if `size1' is non-NULL and PTR is pointing anywhere inside
- `string1' or just past its end. This works if PTR is NULL, which is
- a good thing. */
-#define FIRST_STRING_P(ptr) \
- (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
-
-/* (Re)Allocate N items of type T using malloc, or fail. */
-#define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
-#define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
-#define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
-
-#define BYTEWIDTH 8 /* In bits. */
-
-#define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
-
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-
-typedef char boolean;
-#define false 0
-#define true 1
-
-/* These are the command codes that appear in compiled regular
- expressions. Some opcodes are followed by argument bytes. A
- command code can specify any interpretation whatsoever for its
- arguments. Zero bytes may appear in the compiled regular expression.
-
- The value of `exactn' is needed in search.c (search_buffer) in Emacs.
- So regex.h defines a symbol `RE_EXACTN_VALUE' to be 1; the value of
- `exactn' we use here must also be 1. */
-
-typedef enum
-{
- no_op = 0,
-
- /* Followed by one byte giving n, then by n literal bytes. */
- exactn = 1,
-
- /* Matches any (more or less) character. */
- anychar,
-
- /* Matches any one char belonging to specified set. First
- following byte is number of bitmap bytes. Then come bytes
- for a bitmap saying which chars are in. Bits in each byte
- are ordered low-bit-first. A character is in the set if its
- bit is 1. A character too large to have a bit in the map is
- automatically not in the set. */
- charset,
-
- /* Same parameters as charset, but match any character that is
- not one of those specified. */
- charset_not,
-
- /* Start remembering the text that is matched, for storing in a
- register. Followed by one byte with the register number, in
- the range 0 to one less than the pattern buffer's re_nsub
- field. Then followed by one byte with the number of groups
- inner to this one. (This last has to be part of the
- start_memory only because we need it in the on_failure_jump
- of re_match_2.) */
- start_memory,
-
- /* Stop remembering the text that is matched and store it in a
- memory register. Followed by one byte with the register
- number, in the range 0 to one less than `re_nsub' in the
- pattern buffer, and one byte with the number of inner groups,
- just like `start_memory'. (We need the number of inner
- groups here because we don't have any easy way of finding the
- corresponding start_memory when we're at a stop_memory.) */
- stop_memory,
-
- /* Match a duplicate of something remembered. Followed by one
- byte containing the register number. */
- duplicate,
-
- /* Fail unless at beginning of line. */
- begline,
-
- /* Fail unless at end of line. */
- endline,
-
- /* Succeeds if at beginning of buffer (if emacs) or at beginning
- of string to be matched (if not). */
- begbuf,
-
- /* Analogously, for end of buffer/string. */
- endbuf,
-
- /* Followed by two byte relative address to which to jump. */
- jump,
-
- /* Same as jump, but marks the end of an alternative. */
- jump_past_alt,
-
- /* Followed by two-byte relative address of place to resume at
- in case of failure. */
- on_failure_jump,
-
- /* Like on_failure_jump, but pushes a placeholder instead of the
- current string position when executed. */
- on_failure_keep_string_jump,
-
- /* Throw away latest failure point and then jump to following
- two-byte relative address. */
- pop_failure_jump,
-
- /* Change to pop_failure_jump if know won't have to backtrack to
- match; otherwise change to jump. This is used to jump
- back to the beginning of a repeat. If what follows this jump
- clearly won't match what the repeat does, such that we can be
- sure that there is no use backtracking out of repetitions
- already matched, then we change it to a pop_failure_jump.
- Followed by two-byte address. */
- maybe_pop_jump,
-
- /* Jump to following two-byte address, and push a dummy failure
- point. This failure point will be thrown away if an attempt
- is made to use it for a failure. A `+' construct makes this
- before the first repeat. Also used as an intermediary kind
- of jump when compiling an alternative. */
- dummy_failure_jump,
-
- /* Push a dummy failure point and continue. Used at the end of
- alternatives. */
- push_dummy_failure,
-
- /* Followed by two-byte relative address and two-byte number n.
- After matching N times, jump to the address upon failure. */
- succeed_n,
-
- /* Followed by two-byte relative address, and two-byte number n.
- Jump to the address N times, then fail. */
- jump_n,
-
- /* Set the following two-byte relative address to the
- subsequent two-byte number. The address *includes* the two
- bytes of number. */
- set_number_at,
-
- wordchar, /* Matches any word-constituent character. */
- notwordchar, /* Matches any char that is not a word-constituent. */
-
- wordbeg, /* Succeeds if at word beginning. */
- wordend, /* Succeeds if at word end. */
-
- wordbound, /* Succeeds if at a word boundary. */
- notwordbound /* Succeeds if not at a word boundary. */
-
-#ifdef emacs
- ,before_dot, /* Succeeds if before point. */
- at_dot, /* Succeeds if at point. */
- after_dot, /* Succeeds if after point. */
-
- /* Matches any character whose syntax is specified. Followed by
- a byte which contains a syntax code, e.g., Sword. */
- syntaxspec,
-
- /* Matches any character whose syntax is not that specified. */
- notsyntaxspec
-#endif /* emacs */
-} re_opcode_t;
-
-/* Common operations on the compiled pattern. */
-
-/* Store NUMBER in two contiguous bytes starting at DESTINATION. */
-
-#define STORE_NUMBER(destination, number) \
- do { \
- (destination)[0] = (number) & 0377; \
- (destination)[1] = (number) >> 8; \
- } while (0)
-
-/* Same as STORE_NUMBER, except increment DESTINATION to
- the byte after where the number is stored. Therefore, DESTINATION
- must be an lvalue. */
-
-#define STORE_NUMBER_AND_INCR(destination, number) \
- do { \
- STORE_NUMBER (destination, number); \
- (destination) += 2; \
- } while (0)
-
-/* Put into DESTINATION a number stored in two contiguous bytes starting
- at SOURCE. */
-
-#define EXTRACT_NUMBER(destination, source) \
- do { \
- (destination) = *(source) & 0377; \
- (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \
- } while (0)
-
-#ifdef DEBUG
-static void
-extract_number (dest, source)
- int *dest;
- unsigned char *source;
-{
- int temp = SIGN_EXTEND_CHAR (*(source + 1));
- *dest = *source & 0377;
- *dest += temp << 8;
-}
-
-#ifndef EXTRACT_MACROS /* To debug the macros. */
-#undef EXTRACT_NUMBER
-#define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
-#endif /* not EXTRACT_MACROS */
-
-#endif /* DEBUG */
-
-/* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
- SOURCE must be an lvalue. */
-
-#define EXTRACT_NUMBER_AND_INCR(destination, source) \
- do { \
- EXTRACT_NUMBER (destination, source); \
- (source) += 2; \
- } while (0)
-
-#ifdef DEBUG
-static void
-extract_number_and_incr (destination, source)
- int *destination;
- unsigned char **source;
-{
- extract_number (destination, *source);
- *source += 2;
-}
-
-#ifndef EXTRACT_MACROS
-#undef EXTRACT_NUMBER_AND_INCR
-#define EXTRACT_NUMBER_AND_INCR(dest, src) \
- extract_number_and_incr (&dest, &src)
-#endif /* not EXTRACT_MACROS */
-
-#endif /* DEBUG */
-
-/* If DEBUG is defined, Regex prints many voluminous messages about what
- it is doing (if the variable `debug' is nonzero). If linked with the
- main program in `iregex.c', you can enter patterns and strings
- interactively. And if linked with the main program in `main.c' and
- the other test files, you can run the already-written tests. */
-
-#ifdef DEBUG
-
-/* We use standard I/O for debugging. */
-#include <stdio.h>
-
-/* It is useful to test things that ``must'' be true when debugging. */
-#include <assert.h>
-
-static int debug = 0;
-
-#define DEBUG_STATEMENT(e) e
-#define DEBUG_PRINT1(x) if (debug) printf (x)
-#define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
-#define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
-#define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
-#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \
- if (debug) print_partial_compiled_pattern (s, e)
-#define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \
- if (debug) print_double_string (w, s1, sz1, s2, sz2)
-
-
-extern void printchar ();
-
-/* Print the fastmap in human-readable form. */
-
-void
-print_fastmap (fastmap)
- char *fastmap;
-{
- unsigned was_a_range = 0;
- unsigned i = 0;
-
- while (i < (1 << BYTEWIDTH))
- {
- if (fastmap[i++])
- {
- was_a_range = 0;
- printchar (i - 1);
- while (i < (1 << BYTEWIDTH) && fastmap[i])
- {
- was_a_range = 1;
- i++;
- }
- if (was_a_range)
- {
- printf ("-");
- printchar (i - 1);
- }
- }
- }
- putchar ('\n');
-}
-
-
-/* Print a compiled pattern string in human-readable form, starting at
- the START pointer into it and ending just before the pointer END. */
-
-void
-print_partial_compiled_pattern (start, end)
- unsigned char *start;
- unsigned char *end;
-{
- int mcnt, mcnt2;
- unsigned char *p = start;
- unsigned char *pend = end;
-
- if (start == NULL)
- {
- printf ("(null)\n");
- return;
- }
-
- /* Loop over pattern commands. */
- while (p < pend)
- {
- switch ((re_opcode_t) *p++)
- {
- case no_op:
- printf ("/no_op");
- break;
-
- case exactn:
- mcnt = *p++;
- printf ("/exactn/%d", mcnt);
- do
- {
- putchar ('/');
- printchar (*p++);
- }
- while (--mcnt);
- break;
-
- case start_memory:
- mcnt = *p++;
- printf ("/start_memory/%d/%d", mcnt, *p++);
- break;
-
- case stop_memory:
- mcnt = *p++;
- printf ("/stop_memory/%d/%d", mcnt, *p++);
- break;
-
- case duplicate:
- printf ("/duplicate/%d", *p++);
- break;
-
- case anychar:
- printf ("/anychar");
- break;
-
- case charset:
- case charset_not:
- {
- register int c;
-
- printf ("/charset%s",
- (re_opcode_t) *(p - 1) == charset_not ? "_not" : "");
-
- assert (p + *p < pend);
-
- for (c = 0; c < *p; c++)
- {
- unsigned bit;
- unsigned char map_byte = p[1 + c];
-
- putchar ('/');
-
- for (bit = 0; bit < BYTEWIDTH; bit++)
- if (map_byte & (1 << bit))
- printchar (c * BYTEWIDTH + bit);
- }
- p += 1 + *p;
- break;
- }
-
- case begline:
- printf ("/begline");
- break;
-
- case endline:
- printf ("/endline");
- break;
-
- case on_failure_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/on_failure_jump/0/%d", mcnt);
- break;
-
- case on_failure_keep_string_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/on_failure_keep_string_jump/0/%d", mcnt);
- break;
-
- case dummy_failure_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/dummy_failure_jump/0/%d", mcnt);
- break;
-
- case push_dummy_failure:
- printf ("/push_dummy_failure");
- break;
-
- case maybe_pop_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/maybe_pop_jump/0/%d", mcnt);
- break;
-
- case pop_failure_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/pop_failure_jump/0/%d", mcnt);
- break;
-
- case jump_past_alt:
- extract_number_and_incr (&mcnt, &p);
- printf ("/jump_past_alt/0/%d", mcnt);
- break;
-
- case jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/jump/0/%d", mcnt);
- break;
-
- case succeed_n:
- extract_number_and_incr (&mcnt, &p);
- extract_number_and_incr (&mcnt2, &p);
- printf ("/succeed_n/0/%d/0/%d", mcnt, mcnt2);
- break;
-
- case jump_n:
- extract_number_and_incr (&mcnt, &p);
- extract_number_and_incr (&mcnt2, &p);
- printf ("/jump_n/0/%d/0/%d", mcnt, mcnt2);
- break;
-
- case set_number_at:
- extract_number_and_incr (&mcnt, &p);
- extract_number_and_incr (&mcnt2, &p);
- printf ("/set_number_at/0/%d/0/%d", mcnt, mcnt2);
- break;
-
- case wordbound:
- printf ("/wordbound");
- break;
-
- case notwordbound:
- printf ("/notwordbound");
- break;
-
- case wordbeg:
- printf ("/wordbeg");
- break;
-
- case wordend:
- printf ("/wordend");
-
-#ifdef emacs
- case before_dot:
- printf ("/before_dot");
- break;
-
- case at_dot:
- printf ("/at_dot");
- break;
-
- case after_dot:
- printf ("/after_dot");
- break;
-
- case syntaxspec:
- printf ("/syntaxspec");
- mcnt = *p++;
- printf ("/%d", mcnt);
- break;
-
- case notsyntaxspec:
- printf ("/notsyntaxspec");
- mcnt = *p++;
- printf ("/%d", mcnt);
- break;
-#endif /* emacs */
-
- case wordchar:
- printf ("/wordchar");
- break;
-
- case notwordchar:
- printf ("/notwordchar");
- break;
-
- case begbuf:
- printf ("/begbuf");
- break;
-
- case endbuf:
- printf ("/endbuf");
- break;
-
- default:
- printf ("?%d", *(p-1));
- }
- }
- printf ("/\n");
-}
-
-
-void
-print_compiled_pattern (bufp)
- struct re_pattern_buffer *bufp;
-{
- unsigned char *buffer = bufp->buffer;
-
- print_partial_compiled_pattern (buffer, buffer + bufp->used);
- printf ("%d bytes used/%d bytes allocated.\n", bufp->used, bufp->allocated);
-
- if (bufp->fastmap_accurate && bufp->fastmap)
- {
- printf ("fastmap: ");
- print_fastmap (bufp->fastmap);
- }
-
- printf ("re_nsub: %d\t", bufp->re_nsub);
- printf ("regs_alloc: %d\t", bufp->regs_allocated);
- printf ("can_be_null: %d\t", bufp->can_be_null);
- printf ("newline_anchor: %d\n", bufp->newline_anchor);
- printf ("no_sub: %d\t", bufp->no_sub);
- printf ("not_bol: %d\t", bufp->not_bol);
- printf ("not_eol: %d\t", bufp->not_eol);
- printf ("syntax: %d\n", bufp->syntax);
- /* Perhaps we should print the translate table? */
-}
-
-
-void
-print_double_string (where, string1, size1, string2, size2)
- const char *where;
- const char *string1;
- const char *string2;
- int size1;
- int size2;
-{
- unsigned this_char;
-
- if (where == NULL)
- printf ("(null)");
- else
- {
- if (FIRST_STRING_P (where))
- {
- for (this_char = where - string1; this_char < size1; this_char++)
- printchar (string1[this_char]);
-
- where = string2;
- }
-
- for (this_char = where - string2; this_char < size2; this_char++)
- printchar (string2[this_char]);
- }
-}
-
-#else /* not DEBUG */
-
-#undef assert
-#define assert(e)
-
-#define DEBUG_STATEMENT(e)
-#define DEBUG_PRINT1(x)
-#define DEBUG_PRINT2(x1, x2)
-#define DEBUG_PRINT3(x1, x2, x3)
-#define DEBUG_PRINT4(x1, x2, x3, x4)
-#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
-#define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
-
-#endif /* not DEBUG */
-
-/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can
- also be assigned to arbitrarily: each pattern buffer stores its own
- syntax, so it can be changed between regex compilations. */
-reg_syntax_t re_syntax_options = RE_SYNTAX_EMACS;
-
-
-/* Specify the precise syntax of regexps for compilation. This provides
- for compatibility for various utilities which historically have
- different, incompatible syntaxes.
-
- The argument SYNTAX is a bit mask comprised of the various bits
- defined in regex.h. We return the old syntax. */
-
-reg_syntax_t
-re_set_syntax (syntax)
- reg_syntax_t syntax;
-{
- reg_syntax_t ret = re_syntax_options;
-
- re_syntax_options = syntax;
- return ret;
-}
-
-/* This table gives an error message for each of the error codes listed
- in regex.h. Obviously the order here has to be same as there. */
-
-static const char *re_error_msg[] =
- { NULL, /* REG_NOERROR */
- "No match", /* REG_NOMATCH */
- "Invalid regular expression", /* REG_BADPAT */
- "Invalid collation character", /* REG_ECOLLATE */
- "Invalid character class name", /* REG_ECTYPE */
- "Trailing backslash", /* REG_EESCAPE */
- "Invalid back reference", /* REG_ESUBREG */
- "Unmatched [ or [^", /* REG_EBRACK */
- "Unmatched ( or \\(", /* REG_EPAREN */
- "Unmatched \\{", /* REG_EBRACE */
- "Invalid content of \\{\\}", /* REG_BADBR */
- "Invalid range end", /* REG_ERANGE */
- "Memory exhausted", /* REG_ESPACE */
- "Invalid preceding regular expression", /* REG_BADRPT */
- "Premature end of regular expression", /* REG_EEND */
- "Regular expression too big", /* REG_ESIZE */
- "Unmatched ) or \\)", /* REG_ERPAREN */
- };
-
-/* Subroutine declarations and macros for regex_compile. */
-
-static void store_op1 (), store_op2 ();
-static void insert_op1 (), insert_op2 ();
-static boolean at_begline_loc_p (), at_endline_loc_p ();
-static boolean group_in_compile_stack ();
-static reg_errcode_t compile_range ();
-
-/* Fetch the next character in the uncompiled pattern---translating it
- if necessary. Also cast from a signed character in the constant
- string passed to us by the user to an unsigned char that we can use
- as an array index (in, e.g., `translate'). */
-#define PATFETCH(c) \
- do {if (p == pend) return REG_EEND; \
- c = (unsigned char) *p++; \
- if (translate) c = translate[c]; \
- } while (0)
-
-/* Fetch the next character in the uncompiled pattern, with no
- translation. */
-#define PATFETCH_RAW(c) \
- do {if (p == pend) return REG_EEND; \
- c = (unsigned char) *p++; \
- } while (0)
-
-/* Go backwards one character in the pattern. */
-#define PATUNFETCH p--
-
-
-/* If `translate' is non-null, return translate[D], else just D. We
- cast the subscript to translate because some data is declared as
- `char *', to avoid warnings when a string constant is passed. But
- when we use a character as a subscript we must make it unsigned. */
-#define TRANSLATE(d) (translate ? translate[(unsigned char) (d)] : (d))
-
-
-/* Macros for outputting the compiled pattern into `buffer'. */
-
-/* If the buffer isn't allocated when it comes in, use this. */
-#define INIT_BUF_SIZE 32
-
-/* Make sure we have at least N more bytes of space in buffer. */
-#define GET_BUFFER_SPACE(n) \
- while (b - bufp->buffer + (n) > bufp->allocated) \
- EXTEND_BUFFER ()
-
-/* Make sure we have one more byte of buffer space and then add C to it. */
-#define BUF_PUSH(c) \
- do { \
- GET_BUFFER_SPACE (1); \
- *b++ = (unsigned char) (c); \
- } while (0)
-
-
-/* Ensure we have two more bytes of buffer space and then append C1 and C2. */
-#define BUF_PUSH_2(c1, c2) \
- do { \
- GET_BUFFER_SPACE (2); \
- *b++ = (unsigned char) (c1); \
- *b++ = (unsigned char) (c2); \
- } while (0)
-
-
-/* As with BUF_PUSH_2, except for three bytes. */
-#define BUF_PUSH_3(c1, c2, c3) \
- do { \
- GET_BUFFER_SPACE (3); \
- *b++ = (unsigned char) (c1); \
- *b++ = (unsigned char) (c2); \
- *b++ = (unsigned char) (c3); \
- } while (0)
-
-
-/* Store a jump with opcode OP at LOC to location TO. We store a
- relative address offset by the three bytes the jump itself occupies. */
-#define STORE_JUMP(op, loc, to) \
- store_op1 (op, loc, (to) - (loc) - 3)
-
-/* Likewise, for a two-argument jump. */
-#define STORE_JUMP2(op, loc, to, arg) \
- store_op2 (op, loc, (to) - (loc) - 3, arg)
-
-/* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */
-#define INSERT_JUMP(op, loc, to) \
- insert_op1 (op, loc, (to) - (loc) - 3, b)
-
-/* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */
-#define INSERT_JUMP2(op, loc, to, arg) \
- insert_op2 (op, loc, (to) - (loc) - 3, arg, b)
-
-
-/* This is not an arbitrary limit: the arguments which represent offsets
- into the pattern are two bytes long. So if 2^16 bytes turns out to
- be too small, many things would have to change. */
-#define MAX_BUF_SIZE (1L << 16)
-
-
-/* Extend the buffer by twice its current size via realloc and
- reset the pointers that pointed into the old block to point to the
- correct places in the new one. If extending the buffer results in it
- being larger than MAX_BUF_SIZE, then flag memory exhausted. */
-#define EXTEND_BUFFER() \
- do { \
- unsigned char *old_buffer = bufp->buffer; \
- if (bufp->allocated == MAX_BUF_SIZE) \
- return REG_ESIZE; \
- bufp->allocated <<= 1; \
- if (bufp->allocated > MAX_BUF_SIZE) \
- bufp->allocated = MAX_BUF_SIZE; \
- bufp->buffer = (unsigned char *) realloc (bufp->buffer, bufp->allocated);\
- if (bufp->buffer == NULL) \
- return REG_ESPACE; \
- /* If the buffer moved, move all the pointers into it. */ \
- if (old_buffer != bufp->buffer) \
- { \
- b = (b - old_buffer) + bufp->buffer; \
- begalt = (begalt - old_buffer) + bufp->buffer; \
- if (fixup_alt_jump) \
- fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\
- if (laststart) \
- laststart = (laststart - old_buffer) + bufp->buffer; \
- if (pending_exact) \
- pending_exact = (pending_exact - old_buffer) + bufp->buffer; \
- } \
- } while (0)
-
-
-/* Since we have one byte reserved for the register number argument to
- {start,stop}_memory, the maximum number of groups we can report
- things about is what fits in that byte. */
-#define MAX_REGNUM 255
-
-/* But patterns can have more than `MAX_REGNUM' registers. We just
- ignore the excess. */
-typedef unsigned regnum_t;
-
-
-/* Macros for the compile stack. */
-
-/* Since offsets can go either forwards or backwards, this type needs to
- be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */
-typedef int pattern_offset_t;
-
-typedef struct
-{
- pattern_offset_t begalt_offset;
- pattern_offset_t fixup_alt_jump;
- pattern_offset_t inner_group_offset;
- pattern_offset_t laststart_offset;
- regnum_t regnum;
-} compile_stack_elt_t;
-
-
-typedef struct
-{
- compile_stack_elt_t *stack;
- unsigned size;
- unsigned avail; /* Offset of next open position. */
-} compile_stack_type;
-
-
-#define INIT_COMPILE_STACK_SIZE 32
-
-#define COMPILE_STACK_EMPTY (compile_stack.avail == 0)
-#define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size)
-
-/* The next available element. */
-#define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
-
-
-/* Set the bit for character C in a list. */
-#define SET_LIST_BIT(c) \
- (b[((unsigned char) (c)) / BYTEWIDTH] \
- |= 1 << (((unsigned char) c) % BYTEWIDTH))
-
-
-/* Get the next unsigned number in the uncompiled pattern. */
-#define GET_UNSIGNED_NUMBER(num) \
- { if (p != pend) \
- { \
- PATFETCH (c); \
- while (ISDIGIT (c)) \
- { \
- if (num < 0) \
- num = 0; \
- num = num * 10 + c - '0'; \
- if (p == pend) \
- break; \
- PATFETCH (c); \
- } \
- } \
- }
-
-#define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
-
-#define IS_CHAR_CLASS(string) \
- (STREQ (string, "alpha") || STREQ (string, "upper") \
- || STREQ (string, "lower") || STREQ (string, "digit") \
- || STREQ (string, "alnum") || STREQ (string, "xdigit") \
- || STREQ (string, "space") || STREQ (string, "print") \
- || STREQ (string, "punct") || STREQ (string, "graph") \
- || STREQ (string, "cntrl") || STREQ (string, "blank"))
-
-/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
- Returns one of error codes defined in `regex.h', or zero for success.
-
- Assumes the `allocated' (and perhaps `buffer') and `translate'
- fields are set in BUFP on entry.
-
- If it succeeds, results are put in BUFP (if it returns an error, the
- contents of BUFP are undefined):
- `buffer' is the compiled pattern;
- `syntax' is set to SYNTAX;
- `used' is set to the length of the compiled pattern;
- `fastmap_accurate' is zero;
- `re_nsub' is the number of subexpressions in PATTERN;
- `not_bol' and `not_eol' are zero;
-
- The `fastmap' and `newline_anchor' fields are neither
- examined nor set. */
-
-static reg_errcode_t
-regex_compile (pattern, size, syntax, bufp)
- const char *pattern;
- int size;
- reg_syntax_t syntax;
- struct re_pattern_buffer *bufp;
-{
- /* We fetch characters from PATTERN here. Even though PATTERN is
- `char *' (i.e., signed), we declare these variables as unsigned, so
- they can be reliably used as array indices. */
- register unsigned char c, c1;
-
- /* A random tempory spot in PATTERN. */
- const char *p1;
-
- /* Points to the end of the buffer, where we should append. */
- register unsigned char *b;
-
- /* Keeps track of unclosed groups. */
- compile_stack_type compile_stack;
-
- /* Points to the current (ending) position in the pattern. */
- const char *p = pattern;
- const char *pend = pattern + size;
-
- /* How to translate the characters in the pattern. */
- char *translate = bufp->translate;
-
- /* Address of the count-byte of the most recently inserted `exactn'
- command. This makes it possible to tell if a new exact-match
- character can be added to that command or if the character requires
- a new `exactn' command. */
- unsigned char *pending_exact = 0;
-
- /* Address of start of the most recently finished expression.
- This tells, e.g., postfix * where to find the start of its
- operand. Reset at the beginning of groups and alternatives. */
- unsigned char *laststart = 0;
-
- /* Address of beginning of regexp, or inside of last group. */
- unsigned char *begalt;
-
- /* Place in the uncompiled pattern (i.e., the {) to
- which to go back if the interval is invalid. */
- const char *beg_interval;
-
- /* Address of the place where a forward jump should go to the end of
- the containing expression. Each alternative of an `or' -- except the
- last -- ends with a forward jump of this sort. */
- unsigned char *fixup_alt_jump = 0;
-
- /* Counts open-groups as they are encountered. Remembered for the
- matching close-group on the compile stack, so the same register
- number is put in the stop_memory as the start_memory. */
- regnum_t regnum = 0;
-
-#ifdef DEBUG
- DEBUG_PRINT1 ("\nCompiling pattern: ");
- if (debug)
- {
- unsigned debug_count;
-
- for (debug_count = 0; debug_count < size; debug_count++)
- printchar (pattern[debug_count]);
- putchar ('\n');
- }
-#endif /* DEBUG */
-
- /* Initialize the compile stack. */
- compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
- if (compile_stack.stack == NULL)
- return REG_ESPACE;
-
- compile_stack.size = INIT_COMPILE_STACK_SIZE;
- compile_stack.avail = 0;
-
- /* Initialize the pattern buffer. */
- bufp->syntax = syntax;
- bufp->fastmap_accurate = 0;
- bufp->not_bol = bufp->not_eol = 0;
-
- /* Set `used' to zero, so that if we return an error, the pattern
- printer (for debugging) will think there's no pattern. We reset it
- at the end. */
- bufp->used = 0;
-
- /* Always count groups, whether or not bufp->no_sub is set. */
- bufp->re_nsub = 0;
-
-#if !defined (emacs) && !defined (SYNTAX_TABLE)
- /* Initialize the syntax table. */
- init_syntax_once ();
-#endif
-
- if (bufp->allocated == 0)
- {
- if (bufp->buffer)
- { /* If zero allocated, but buffer is non-null, try to realloc
- enough space. This loses if buffer's address is bogus, but
- that is the user's responsibility. */
- RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
- }
- else
- { /* Caller did not allocate a buffer. Do it for them. */
- bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
- }
- if (!bufp->buffer) return REG_ESPACE;
-
- bufp->allocated = INIT_BUF_SIZE;
- }
-
- begalt = b = bufp->buffer;
-
- /* Loop through the uncompiled pattern until we're at the end. */
- while (p != pend)
- {
- PATFETCH (c);
-
- switch (c)
- {
- case '^':
- {
- if ( /* If at start of pattern, it's an operator. */
- p == pattern + 1
- /* If context independent, it's an operator. */
- || syntax & RE_CONTEXT_INDEP_ANCHORS
- /* Otherwise, depends on what's come before. */
- || at_begline_loc_p (pattern, p, syntax))
- BUF_PUSH (begline);
- else
- goto normal_char;
- }
- break;
-
-
- case '$':
- {
- if ( /* If at end of pattern, it's an operator. */
- p == pend
- /* If context independent, it's an operator. */
- || syntax & RE_CONTEXT_INDEP_ANCHORS
- /* Otherwise, depends on what's next. */
- || at_endline_loc_p (p, pend, syntax))
- BUF_PUSH (endline);
- else
- goto normal_char;
- }
- break;
-
-
- case '+':
- case '?':
- if ((syntax & RE_BK_PLUS_QM)
- || (syntax & RE_LIMITED_OPS))
- goto normal_char;
- handle_plus:
- case '*':
- /* If there is no previous pattern... */
- if (!laststart)
- {
- if (syntax & RE_CONTEXT_INVALID_OPS)
- return REG_BADRPT;
- else if (!(syntax & RE_CONTEXT_INDEP_OPS))
- goto normal_char;
- }
-
- {
- /* Are we optimizing this jump? */
- boolean keep_string_p = false;
-
- /* 1 means zero (many) matches is allowed. */
- char zero_times_ok = 0, many_times_ok = 0;
-
- /* If there is a sequence of repetition chars, collapse it
- down to just one (the right one). We can't combine
- interval operators with these because of, e.g., `a{2}*',
- which should only match an even number of `a's. */
-
- for (;;)
- {
- zero_times_ok |= c != '+';
- many_times_ok |= c != '?';
-
- if (p == pend)
- break;
-
- PATFETCH (c);
-
- if (c == '*'
- || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
- ;
-
- else if (syntax & RE_BK_PLUS_QM && c == '\\')
- {
- if (p == pend) return REG_EESCAPE;
-
- PATFETCH (c1);
- if (!(c1 == '+' || c1 == '?'))
- {
- PATUNFETCH;
- PATUNFETCH;
- break;
- }
-
- c = c1;
- }
- else
- {
- PATUNFETCH;
- break;
- }
-
- /* If we get here, we found another repeat character. */
- }
-
- /* Star, etc. applied to an empty pattern is equivalent
- to an empty pattern. */
- if (!laststart)
- break;
-
- /* Now we know whether or not zero matches is allowed
- and also whether or not two or more matches is allowed. */
- if (many_times_ok)
- { /* More than one repetition is allowed, so put in at the
- end a backward relative jump from `b' to before the next
- jump we're going to put in below (which jumps from
- laststart to after this jump).
-
- But if we are at the `*' in the exact sequence `.*\n',
- insert an unconditional jump backwards to the .,
- instead of the beginning of the loop. This way we only
- push a failure point once, instead of every time
- through the loop. */
- assert (p - 1 > pattern);
-
- /* Allocate the space for the jump. */
- GET_BUFFER_SPACE (3);
-
- /* We know we are not at the first character of the pattern,
- because laststart was nonzero. And we've already
- incremented `p', by the way, to be the character after
- the `*'. Do we have to do something analogous here
- for null bytes, because of RE_DOT_NOT_NULL? */
- if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
- && zero_times_ok
- && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
- && !(syntax & RE_DOT_NEWLINE))
- { /* We have .*\n. */
- STORE_JUMP (jump, b, laststart);
- keep_string_p = true;
- }
- else
- /* Anything else. */
- STORE_JUMP (maybe_pop_jump, b, laststart - 3);
-
- /* We've added more stuff to the buffer. */
- b += 3;
- }
-
- /* On failure, jump from laststart to b + 3, which will be the
- end of the buffer after this jump is inserted. */
- GET_BUFFER_SPACE (3);
- INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
- : on_failure_jump,
- laststart, b + 3);
- pending_exact = 0;
- b += 3;
-
- if (!zero_times_ok)
- {
- /* At least one repetition is required, so insert a
- `dummy_failure_jump' before the initial
- `on_failure_jump' instruction of the loop. This
- effects a skip over that instruction the first time
- we hit that loop. */
- GET_BUFFER_SPACE (3);
- INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6);
- b += 3;
- }
- }
- break;
-
-
- case '.':
- laststart = b;
- BUF_PUSH (anychar);
- break;
-
-
- case '[':
- {
- boolean had_char_class = false;
-
- if (p == pend) return REG_EBRACK;
-
- /* Ensure that we have enough space to push a charset: the
- opcode, the length count, and the bitset; 34 bytes in all. */
- GET_BUFFER_SPACE (34);
-
- laststart = b;
-
- /* We test `*p == '^' twice, instead of using an if
- statement, so we only need one BUF_PUSH. */
- BUF_PUSH (*p == '^' ? charset_not : charset);
- if (*p == '^')
- p++;
-
- /* Remember the first position in the bracket expression. */
- p1 = p;
-
- /* Push the number of bytes in the bitmap. */
- BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
-
- /* Clear the whole map. */
- bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
-
- /* charset_not matches newline according to a syntax bit. */
- if ((re_opcode_t) b[-2] == charset_not
- && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
- SET_LIST_BIT ('\n');
-
- /* Read in characters and ranges, setting map bits. */
- for (;;)
- {
- if (p == pend) return REG_EBRACK;
-
- PATFETCH (c);
-
- /* \ might escape characters inside [...] and [^...]. */
- if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
- {
- if (p == pend) return REG_EESCAPE;
-
- PATFETCH (c1);
- SET_LIST_BIT (c1);
- continue;
- }
-
- /* Could be the end of the bracket expression. If it's
- not (i.e., when the bracket expression is `[]' so
- far), the ']' character bit gets set way below. */
- if (c == ']' && p != p1 + 1)
- break;
-
- /* Look ahead to see if it's a range when the last thing
- was a character class. */
- if (had_char_class && c == '-' && *p != ']')
- return REG_ERANGE;
-
- /* Look ahead to see if it's a range when the last thing
- was a character: if this is a hyphen not at the
- beginning or the end of a list, then it's the range
- operator. */
- if (c == '-'
- && !(p - 2 >= pattern && p[-2] == '[')
- && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
- && *p != ']')
- {
- reg_errcode_t ret
- = compile_range (&p, pend, translate, syntax, b);
- if (ret != REG_NOERROR) return ret;
- }
-
- else if (p[0] == '-' && p[1] != ']')
- { /* This handles ranges made up of characters only. */
- reg_errcode_t ret;
-
- /* Move past the `-'. */
- PATFETCH (c1);
-
- ret = compile_range (&p, pend, translate, syntax, b);
- if (ret != REG_NOERROR) return ret;
- }
-
- /* See if we're at the beginning of a possible character
- class. */
-
- else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
- { /* Leave room for the null. */
- char str[CHAR_CLASS_MAX_LENGTH + 1];
-
- PATFETCH (c);
- c1 = 0;
-
- /* If pattern is `[[:'. */
- if (p == pend) return REG_EBRACK;
-
- for (;;)
- {
- PATFETCH (c);
- if (c == ':' || c == ']' || p == pend
- || c1 == CHAR_CLASS_MAX_LENGTH)
- break;
- str[c1++] = c;
- }
- str[c1] = '\0';
-
- /* If isn't a word bracketed by `[:' and:`]':
- undo the ending character, the letters, and leave
- the leading `:' and `[' (but set bits for them). */
- if (c == ':' && *p == ']')
- {
- int ch;
- boolean is_alnum = STREQ (str, "alnum");
- boolean is_alpha = STREQ (str, "alpha");
- boolean is_blank = STREQ (str, "blank");
- boolean is_cntrl = STREQ (str, "cntrl");
- boolean is_digit = STREQ (str, "digit");
- boolean is_graph = STREQ (str, "graph");
- boolean is_lower = STREQ (str, "lower");
- boolean is_print = STREQ (str, "print");
- boolean is_punct = STREQ (str, "punct");
- boolean is_space = STREQ (str, "space");
- boolean is_upper = STREQ (str, "upper");
- boolean is_xdigit = STREQ (str, "xdigit");
-
- if (!IS_CHAR_CLASS (str)) return REG_ECTYPE;
-
- /* Throw away the ] at the end of the character
- class. */
- PATFETCH (c);
-
- if (p == pend) return REG_EBRACK;
-
- for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
- {
- if ( (is_alnum && ISALNUM (ch))
- || (is_alpha && ISALPHA (ch))
- || (is_blank && ISBLANK (ch))
- || (is_cntrl && ISCNTRL (ch))
- || (is_digit && ISDIGIT (ch))
- || (is_graph && ISGRAPH (ch))
- || (is_lower && ISLOWER (ch))
- || (is_print && ISPRINT (ch))
- || (is_punct && ISPUNCT (ch))
- || (is_space && ISSPACE (ch))
- || (is_upper && ISUPPER (ch))
- || (is_xdigit && ISXDIGIT (ch)))
- SET_LIST_BIT (ch);
- }
- had_char_class = true;
- }
- else
- {
- c1++;
- while (c1--)
- PATUNFETCH;
- SET_LIST_BIT ('[');
- SET_LIST_BIT (':');
- had_char_class = false;
- }
- }
- else
- {
- had_char_class = false;
- SET_LIST_BIT (c);
- }
- }
-
- /* Discard any (non)matching list bytes that are all 0 at the
- end of the map. Decrease the map-length byte too. */
- while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
- b[-1]--;
- b += b[-1];
- }
- break;
-
-
- case '(':
- if (syntax & RE_NO_BK_PARENS)
- goto handle_open;
- else
- goto normal_char;
-
-
- case ')':
- if (syntax & RE_NO_BK_PARENS)
- goto handle_close;
- else
- goto normal_char;
-
-
- case '\n':
- if (syntax & RE_NEWLINE_ALT)
- goto handle_alt;
- else
- goto normal_char;
-
-
- case '|':
- if (syntax & RE_NO_BK_VBAR)
- goto handle_alt;
- else
- goto normal_char;
-
-
- case '{':
- if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
- goto handle_interval;
- else
- goto normal_char;
-
-
- case '\\':
- if (p == pend) return REG_EESCAPE;
-
- /* Do not translate the character after the \, so that we can
- distinguish, e.g., \B from \b, even if we normally would
- translate, e.g., B to b. */
- PATFETCH_RAW (c);
-
- switch (c)
- {
- case '(':
- if (syntax & RE_NO_BK_PARENS)
- goto normal_backslash;
-
- handle_open:
- bufp->re_nsub++;
- regnum++;
-
- if (COMPILE_STACK_FULL)
- {
- RETALLOC (compile_stack.stack, compile_stack.size << 1,
- compile_stack_elt_t);
- if (compile_stack.stack == NULL) return REG_ESPACE;
-
- compile_stack.size <<= 1;
- }
-
- /* These are the values to restore when we hit end of this
- group. They are all relative offsets, so that if the
- whole pattern moves because of realloc, they will still
- be valid. */
- COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
- COMPILE_STACK_TOP.fixup_alt_jump
- = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
- COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
- COMPILE_STACK_TOP.regnum = regnum;
-
- /* We will eventually replace the 0 with the number of
- groups inner to this one. But do not push a
- start_memory for groups beyond the last one we can
- represent in the compiled pattern. */
- if (regnum <= MAX_REGNUM)
- {
- COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2;
- BUF_PUSH_3 (start_memory, regnum, 0);
- }
-
- compile_stack.avail++;
-
- fixup_alt_jump = 0;
- laststart = 0;
- begalt = b;
- /* If we've reached MAX_REGNUM groups, then this open
- won't actually generate any code, so we'll have to
- clear pending_exact explicitly. */
- pending_exact = 0;
- break;
-
-
- case ')':
- if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
-
- if (COMPILE_STACK_EMPTY)
- if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- goto normal_backslash;
- else
- return REG_ERPAREN;
-
- handle_close:
- if (fixup_alt_jump)
- { /* Push a dummy failure point at the end of the
- alternative for a possible future
- `pop_failure_jump' to pop. See comments at
- `push_dummy_failure' in `re_match_2'. */
- BUF_PUSH (push_dummy_failure);
-
- /* We allocated space for this jump when we assigned
- to `fixup_alt_jump', in the `handle_alt' case below. */
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
- }
-
- /* See similar code for backslashed left paren above. */
- if (COMPILE_STACK_EMPTY)
- if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- goto normal_char;
- else
- return REG_ERPAREN;
-
- /* Since we just checked for an empty stack above, this
- ``can't happen''. */
- assert (compile_stack.avail != 0);
- {
- /* We don't just want to restore into `regnum', because
- later groups should continue to be numbered higher,
- as in `(ab)c(de)' -- the second group is #2. */
- regnum_t this_group_regnum;
-
- compile_stack.avail--;
- begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
- fixup_alt_jump
- = COMPILE_STACK_TOP.fixup_alt_jump
- ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
- : 0;
- laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
- this_group_regnum = COMPILE_STACK_TOP.regnum;
- /* If we've reached MAX_REGNUM groups, then this open
- won't actually generate any code, so we'll have to
- clear pending_exact explicitly. */
- pending_exact = 0;
-
- /* We're at the end of the group, so now we know how many
- groups were inside this one. */
- if (this_group_regnum <= MAX_REGNUM)
- {
- unsigned char *inner_group_loc
- = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset;
-
- *inner_group_loc = regnum - this_group_regnum;
- BUF_PUSH_3 (stop_memory, this_group_regnum,
- regnum - this_group_regnum);
- }
- }
- break;
-
-
- case '|': /* `\|'. */
- if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
- goto normal_backslash;
- handle_alt:
- if (syntax & RE_LIMITED_OPS)
- goto normal_char;
-
- /* Insert before the previous alternative a jump which
- jumps to this alternative if the former fails. */
- GET_BUFFER_SPACE (3);
- INSERT_JUMP (on_failure_jump, begalt, b + 6);
- pending_exact = 0;
- b += 3;
-
- /* The alternative before this one has a jump after it
- which gets executed if it gets matched. Adjust that
- jump so it will jump to this alternative's analogous
- jump (put in below, which in turn will jump to the next
- (if any) alternative's such jump, etc.). The last such
- jump jumps to the correct final destination. A picture:
- _____ _____
- | | | |
- | v | v
- a | b | c
-
- If we are at `b', then fixup_alt_jump right now points to a
- three-byte space after `a'. We'll put in the jump, set
- fixup_alt_jump to right after `b', and leave behind three
- bytes which we'll fill in when we get to after `c'. */
-
- if (fixup_alt_jump)
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
-
- /* Mark and leave space for a jump after this alternative,
- to be filled in later either by next alternative or
- when know we're at the end of a series of alternatives. */
- fixup_alt_jump = b;
- GET_BUFFER_SPACE (3);
- b += 3;
-
- laststart = 0;
- begalt = b;
- break;
-
-
- case '{':
- /* If \{ is a literal. */
- if (!(syntax & RE_INTERVALS)
- /* If we're at `\{' and it's not the open-interval
- operator. */
- || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
- || (p - 2 == pattern && p == pend))
- goto normal_backslash;
-
- handle_interval:
- {
- /* If got here, then the syntax allows intervals. */
-
- /* At least (most) this many matches must be made. */
- int lower_bound = -1, upper_bound = -1;
-
- beg_interval = p - 1;
-
- if (p == pend)
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- return REG_EBRACE;
- }
-
- GET_UNSIGNED_NUMBER (lower_bound);
-
- if (c == ',')
- {
- GET_UNSIGNED_NUMBER (upper_bound);
- if (upper_bound < 0) upper_bound = RE_DUP_MAX;
- }
- else
- /* Interval such as `{1}' => match exactly once. */
- upper_bound = lower_bound;
-
- if (lower_bound < 0 || upper_bound > RE_DUP_MAX
- || lower_bound > upper_bound)
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- return REG_BADBR;
- }
-
- if (!(syntax & RE_NO_BK_BRACES))
- {
- if (c != '\\') return REG_EBRACE;
-
- PATFETCH (c);
- }
-
- if (c != '}')
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- return REG_BADBR;
- }
-
- /* We just parsed a valid interval. */
-
- /* If it's invalid to have no preceding re. */
- if (!laststart)
- {
- if (syntax & RE_CONTEXT_INVALID_OPS)
- return REG_BADRPT;
- else if (syntax & RE_CONTEXT_INDEP_OPS)
- laststart = b;
- else
- goto unfetch_interval;
- }
-
- /* If the upper bound is zero, don't want to succeed at
- all; jump from `laststart' to `b + 3', which will be
- the end of the buffer after we insert the jump. */
- if (upper_bound == 0)
- {
- GET_BUFFER_SPACE (3);
- INSERT_JUMP (jump, laststart, b + 3);
- b += 3;
- }
-
- /* Otherwise, we have a nontrivial interval. When
- we're all done, the pattern will look like:
- set_number_at <jump count> <upper bound>
- set_number_at <succeed_n count> <lower bound>
- succeed_n <after jump addr> <succed_n count>
- <body of loop>
- jump_n <succeed_n addr> <jump count>
- (The upper bound and `jump_n' are omitted if
- `upper_bound' is 1, though.) */
- else
- { /* If the upper bound is > 1, we need to insert
- more at the end of the loop. */
- unsigned nbytes = 10 + (upper_bound > 1) * 10;
-
- GET_BUFFER_SPACE (nbytes);
-
- /* Initialize lower bound of the `succeed_n', even
- though it will be set during matching by its
- attendant `set_number_at' (inserted next),
- because `re_compile_fastmap' needs to know.
- Jump to the `jump_n' we might insert below. */
- INSERT_JUMP2 (succeed_n, laststart,
- b + 5 + (upper_bound > 1) * 5,
- lower_bound);
- b += 5;
-
- /* Code to initialize the lower bound. Insert
- before the `succeed_n'. The `5' is the last two
- bytes of this `set_number_at', plus 3 bytes of
- the following `succeed_n'. */
- insert_op2 (set_number_at, laststart, 5, lower_bound, b);
- b += 5;
-
- if (upper_bound > 1)
- { /* More than one repetition is allowed, so
- append a backward jump to the `succeed_n'
- that starts this interval.
-
- When we've reached this during matching,
- we'll have matched the interval once, so
- jump back only `upper_bound - 1' times. */
- STORE_JUMP2 (jump_n, b, laststart + 5,
- upper_bound - 1);
- b += 5;
-
- /* The location we want to set is the second
- parameter of the `jump_n'; that is `b-2' as
- an absolute address. `laststart' will be
- the `set_number_at' we're about to insert;
- `laststart+3' the number to set, the source
- for the relative address. But we are
- inserting into the middle of the pattern --
- so everything is getting moved up by 5.
- Conclusion: (b - 2) - (laststart + 3) + 5,
- i.e., b - laststart.
-
- We insert this at the beginning of the loop
- so that if we fail during matching, we'll
- reinitialize the bounds. */
- insert_op2 (set_number_at, laststart, b - laststart,
- upper_bound - 1, b);
- b += 5;
- }
- }
- pending_exact = 0;
- beg_interval = NULL;
- }
- break;
-
- unfetch_interval:
- /* If an invalid interval, match the characters as literals. */
- assert (beg_interval);
- p = beg_interval;
- beg_interval = NULL;
-
- /* normal_char and normal_backslash need `c'. */
- PATFETCH (c);
-
- if (!(syntax & RE_NO_BK_BRACES))
- {
- if (p > pattern && p[-1] == '\\')
- goto normal_backslash;
- }
- goto normal_char;
-
-#ifdef emacs
- /* There is no way to specify the before_dot and after_dot
- operators. rms says this is ok. --karl */
- case '=':
- BUF_PUSH (at_dot);
- break;
-
- case 's':
- laststart = b;
- PATFETCH (c);
- BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
- break;
-
- case 'S':
- laststart = b;
- PATFETCH (c);
- BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
- break;
-#endif /* emacs */
-
-
- case 'w':
- laststart = b;
- BUF_PUSH (wordchar);
- break;
-
-
- case 'W':
- laststart = b;
- BUF_PUSH (notwordchar);
- break;
-
-
- case '<':
- BUF_PUSH (wordbeg);
- break;
-
- case '>':
- BUF_PUSH (wordend);
- break;
-
- case 'b':
- BUF_PUSH (wordbound);
- break;
-
- case 'B':
- BUF_PUSH (notwordbound);
- break;
-
- case '`':
- BUF_PUSH (begbuf);
- break;
-
- case '\'':
- BUF_PUSH (endbuf);
- break;
-
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
- if (syntax & RE_NO_BK_REFS)
- goto normal_char;
-
- c1 = c - '0';
-
- if (c1 > regnum)
- return REG_ESUBREG;
-
- /* Can't back reference to a subexpression if inside of it. */
- if (group_in_compile_stack (compile_stack, c1))
- goto normal_char;
-
- laststart = b;
- BUF_PUSH_2 (duplicate, c1);
- break;
-
-
- case '+':
- case '?':
- if (syntax & RE_BK_PLUS_QM)
- goto handle_plus;
- else
- goto normal_backslash;
-
- default:
- normal_backslash:
- /* You might think it would be useful for \ to mean
- not to translate; but if we don't translate it
- it will never match anything. */
- c = TRANSLATE (c);
- goto normal_char;
- }
- break;
-
-
- default:
- /* Expects the character in `c'. */
- normal_char:
- /* If no exactn currently being built. */
- if (!pending_exact
-
- /* If last exactn not at current position. */
- || pending_exact + *pending_exact + 1 != b
-
- /* We have only one byte following the exactn for the count. */
- || *pending_exact == (1 << BYTEWIDTH) - 1
-
- /* If followed by a repetition operator. */
- || *p == '*' || *p == '^'
- || ((syntax & RE_BK_PLUS_QM)
- ? *p == '\\' && (p[1] == '+' || p[1] == '?')
- : (*p == '+' || *p == '?'))
- || ((syntax & RE_INTERVALS)
- && ((syntax & RE_NO_BK_BRACES)
- ? *p == '{'
- : (p[0] == '\\' && p[1] == '{'))))
- {
- /* Start building a new exactn. */
-
- laststart = b;
-
- BUF_PUSH_2 (exactn, 0);
- pending_exact = b - 1;
- }
-
- BUF_PUSH (c);
- (*pending_exact)++;
- break;
- } /* switch (c) */
- } /* while p != pend */
-
-
- /* Through the pattern now. */
-
- if (fixup_alt_jump)
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
-
- if (!COMPILE_STACK_EMPTY)
- return REG_EPAREN;
-
- free (compile_stack.stack);
-
- /* We have succeeded; set the length of the buffer. */
- bufp->used = b - bufp->buffer;
-
-#ifdef DEBUG
- if (debug)
- {
- DEBUG_PRINT1 ("\nCompiled pattern: ");
- print_compiled_pattern (bufp);
- }
-#endif /* DEBUG */
-
- return REG_NOERROR;
-} /* regex_compile */
-
-/* Subroutines for `regex_compile'. */
-
-/* Store OP at LOC followed by two-byte integer parameter ARG. */
-
-static void
-store_op1 (op, loc, arg)
- re_opcode_t op;
- unsigned char *loc;
- int arg;
-{
- *loc = (unsigned char) op;
- STORE_NUMBER (loc + 1, arg);
-}
-
-
-/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */
-
-static void
-store_op2 (op, loc, arg1, arg2)
- re_opcode_t op;
- unsigned char *loc;
- int arg1, arg2;
-{
- *loc = (unsigned char) op;
- STORE_NUMBER (loc + 1, arg1);
- STORE_NUMBER (loc + 3, arg2);
-}
-
-
-/* Copy the bytes from LOC to END to open up three bytes of space at LOC
- for OP followed by two-byte integer parameter ARG. */
-
-static void
-insert_op1 (op, loc, arg, end)
- re_opcode_t op;
- unsigned char *loc;
- int arg;
- unsigned char *end;
-{
- register unsigned char *pfrom = end;
- register unsigned char *pto = end + 3;
-
- while (pfrom != loc)
- *--pto = *--pfrom;
-
- store_op1 (op, loc, arg);
-}
-
-
-/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */
-
-static void
-insert_op2 (op, loc, arg1, arg2, end)
- re_opcode_t op;
- unsigned char *loc;
- int arg1, arg2;
- unsigned char *end;
-{
- register unsigned char *pfrom = end;
- register unsigned char *pto = end + 5;
-
- while (pfrom != loc)
- *--pto = *--pfrom;
-
- store_op2 (op, loc, arg1, arg2);
-}
-
-
-/* P points to just after a ^ in PATTERN. Return true if that ^ comes
- after an alternative or a begin-subexpression. We assume there is at
- least one character before the ^. */
-
-static boolean
-at_begline_loc_p (pattern, p, syntax)
- const char *pattern, *p;
- reg_syntax_t syntax;
-{
- const char *prev = p - 2;
- boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
-
- return
- /* After a subexpression? */
- (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
- /* After an alternative? */
- || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
-}
-
-
-/* The dual of at_begline_loc_p. This one is for $. We assume there is
- at least one character after the $, i.e., `P < PEND'. */
-
-static boolean
-at_endline_loc_p (p, pend, syntax)
- const char *p, *pend;
- int syntax;
-{
- const char *next = p;
- boolean next_backslash = *next == '\\';
- const char *next_next = p + 1 < pend ? p + 1 : NULL;
-
- return
- /* Before a subexpression? */
- (syntax & RE_NO_BK_PARENS ? *next == ')'
- : next_backslash && next_next && *next_next == ')')
- /* Before an alternative? */
- || (syntax & RE_NO_BK_VBAR ? *next == '|'
- : next_backslash && next_next && *next_next == '|');
-}
-
-
-/* Returns true if REGNUM is in one of COMPILE_STACK's elements and
- false if it's not. */
-
-static boolean
-group_in_compile_stack (compile_stack, regnum)
- compile_stack_type compile_stack;
- regnum_t regnum;
-{
- int this_element;
-
- for (this_element = compile_stack.avail - 1;
- this_element >= 0;
- this_element--)
- if (compile_stack.stack[this_element].regnum == regnum)
- return true;
-
- return false;
-}
-
-
-/* Read the ending character of a range (in a bracket expression) from the
- uncompiled pattern *P_PTR (which ends at PEND). We assume the
- starting character is in `P[-2]'. (`P[-1]' is the character `-'.)
- Then we set the translation of all bits between the starting and
- ending characters (inclusive) in the compiled pattern B.
-
- Return an error code.
-
- We use these short variable names so we can use the same macros as
- `regex_compile' itself. */
-
-static reg_errcode_t
-compile_range (p_ptr, pend, translate, syntax, b)
- const char **p_ptr, *pend;
- char *translate;
- reg_syntax_t syntax;
- unsigned char *b;
-{
- unsigned this_char;
-
- const char *p = *p_ptr;
- int range_start, range_end;
-
- if (p == pend)
- return REG_ERANGE;
-
- /* Even though the pattern is a signed `char *', we need to fetch
- with unsigned char *'s; if the high bit of the pattern character
- is set, the range endpoints will be negative if we fetch using a
- signed char *.
-
- We also want to fetch the endpoints without translating them; the
- appropriate translation is done in the bit-setting loop below. */
- range_start = ((unsigned char *) p)[-2];
- range_end = ((unsigned char *) p)[0];
-
- /* Have to increment the pointer into the pattern string, so the
- caller isn't still at the ending character. */
- (*p_ptr)++;
-
- /* If the start is after the end, the range is empty. */
- if (range_start > range_end)
- return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
-
- /* Here we see why `this_char' has to be larger than an `unsigned
- char' -- the range is inclusive, so if `range_end' == 0xff
- (assuming 8-bit characters), we would otherwise go into an infinite
- loop, since all characters <= 0xff. */
- for (this_char = range_start; this_char <= range_end; this_char++)
- {
- SET_LIST_BIT (TRANSLATE (this_char));
- }
-
- return REG_NOERROR;
-}
-
-/* Failure stack declarations and macros; both re_compile_fastmap and
- re_match_2 use a failure stack. These have to be macros because of
- REGEX_ALLOCATE. */
-
-
-/* Number of failure points for which to initially allocate space
- when matching. If this number is exceeded, we allocate more
- space, so it is not a hard limit. */
-#ifndef INIT_FAILURE_ALLOC
-#define INIT_FAILURE_ALLOC 5
-#endif
-
-/* Roughly the maximum number of failure points on the stack. Would be
- exactly that if always used MAX_FAILURE_SPACE each time we failed.
- This is a variable only so users of regex can assign to it; we never
- change it ourselves. */
-int re_max_failures = 2000;
-
-typedef const unsigned char *fail_stack_elt_t;
-
-typedef struct
-{
- fail_stack_elt_t *stack;
- unsigned size;
- unsigned avail; /* Offset of next open position. */
-} fail_stack_type;
-
-#define FAIL_STACK_EMPTY() (fail_stack.avail == 0)
-#define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
-#define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size)
-#define FAIL_STACK_TOP() (fail_stack.stack[fail_stack.avail])
-
-
-/* Initialize `fail_stack'. Do `return -2' if the alloc fails. */
-
-#define INIT_FAIL_STACK() \
- do { \
- fail_stack.stack = (fail_stack_elt_t *) \
- REGEX_ALLOCATE (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t)); \
- \
- if (fail_stack.stack == NULL) \
- return -2; \
- \
- fail_stack.size = INIT_FAILURE_ALLOC; \
- fail_stack.avail = 0; \
- } while (0)
-
-
-/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
-
- Return 1 if succeeds, and 0 if either ran out of memory
- allocating space for it or it was already too large.
-
- REGEX_REALLOCATE requires `destination' be declared. */
-
-#define DOUBLE_FAIL_STACK(fail_stack) \
- ((fail_stack).size > re_max_failures * MAX_FAILURE_ITEMS \
- ? 0 \
- : ((fail_stack).stack = (fail_stack_elt_t *) \
- REGEX_REALLOCATE ((fail_stack).stack, \
- (fail_stack).size * sizeof (fail_stack_elt_t), \
- ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)), \
- \
- (fail_stack).stack == NULL \
- ? 0 \
- : ((fail_stack).size <<= 1, \
- 1)))
-
-
-/* Push PATTERN_OP on FAIL_STACK.
-
- Return 1 if was able to do so and 0 if ran out of memory allocating
- space to do so. */
-#define PUSH_PATTERN_OP(pattern_op, fail_stack) \
- ((FAIL_STACK_FULL () \
- && !DOUBLE_FAIL_STACK (fail_stack)) \
- ? 0 \
- : ((fail_stack).stack[(fail_stack).avail++] = pattern_op, \
- 1))
-
-/* This pushes an item onto the failure stack. Must be a four-byte
- value. Assumes the variable `fail_stack'. Probably should only
- be called from within `PUSH_FAILURE_POINT'. */
-#define PUSH_FAILURE_ITEM(item) \
- fail_stack.stack[fail_stack.avail++] = (fail_stack_elt_t) item
-
-/* The complement operation. Assumes `fail_stack' is nonempty. */
-#define POP_FAILURE_ITEM() fail_stack.stack[--fail_stack.avail]
-
-/* Used to omit pushing failure point id's when we're not debugging. */
-#ifdef DEBUG
-#define DEBUG_PUSH PUSH_FAILURE_ITEM
-#define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_ITEM ()
-#else
-#define DEBUG_PUSH(item)
-#define DEBUG_POP(item_addr)
-#endif
-
-
-/* Push the information about the state we will need
- if we ever fail back to it.
-
- Requires variables fail_stack, regstart, regend, reg_info, and
- num_regs be declared. DOUBLE_FAIL_STACK requires `destination' be
- declared.
-
- Does `return FAILURE_CODE' if runs out of memory. */
-
-#define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \
- do { \
- char *destination; \
- /* Must be int, so when we don't save any registers, the arithmetic \
- of 0 + -1 isn't done as unsigned. */ \
- int this_reg; \
- \
- DEBUG_STATEMENT (failure_id++); \
- DEBUG_STATEMENT (nfailure_points_pushed++); \
- DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \
- DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\
- DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\
- \
- DEBUG_PRINT2 (" slots needed: %d\n", NUM_FAILURE_ITEMS); \
- DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \
- \
- /* Ensure we have enough space allocated for what we will push. */ \
- while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \
- { \
- if (!DOUBLE_FAIL_STACK (fail_stack)) \
- return failure_code; \
- \
- DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \
- (fail_stack).size); \
- DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\
- } \
- \
- /* Push the info, starting with the registers. */ \
- DEBUG_PRINT1 ("\n"); \
- \
- for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
- this_reg++) \
- { \
- DEBUG_PRINT2 (" Pushing reg: %d\n", this_reg); \
- DEBUG_STATEMENT (num_regs_pushed++); \
- \
- DEBUG_PRINT2 (" start: 0x%x\n", regstart[this_reg]); \
- PUSH_FAILURE_ITEM (regstart[this_reg]); \
- \
- DEBUG_PRINT2 (" end: 0x%x\n", regend[this_reg]); \
- PUSH_FAILURE_ITEM (regend[this_reg]); \
- \
- DEBUG_PRINT2 (" info: 0x%x\n ", reg_info[this_reg]); \
- DEBUG_PRINT2 (" match_null=%d", \
- REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \
- DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \
- DEBUG_PRINT2 (" matched_something=%d", \
- MATCHED_SOMETHING (reg_info[this_reg])); \
- DEBUG_PRINT2 (" ever_matched=%d", \
- EVER_MATCHED_SOMETHING (reg_info[this_reg])); \
- DEBUG_PRINT1 ("\n"); \
- PUSH_FAILURE_ITEM (reg_info[this_reg].word); \
- } \
- \
- DEBUG_PRINT2 (" Pushing low active reg: %d\n", lowest_active_reg);\
- PUSH_FAILURE_ITEM (lowest_active_reg); \
- \
- DEBUG_PRINT2 (" Pushing high active reg: %d\n", highest_active_reg);\
- PUSH_FAILURE_ITEM (highest_active_reg); \
- \
- DEBUG_PRINT2 (" Pushing pattern 0x%x: ", pattern_place); \
- DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \
- PUSH_FAILURE_ITEM (pattern_place); \
- \
- DEBUG_PRINT2 (" Pushing string 0x%x: `", string_place); \
- DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \
- size2); \
- DEBUG_PRINT1 ("'\n"); \
- PUSH_FAILURE_ITEM (string_place); \
- \
- DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \
- DEBUG_PUSH (failure_id); \
- } while (0)
-
-/* This is the number of items that are pushed and popped on the stack
- for each register. */
-#define NUM_REG_ITEMS 3
-
-/* Individual items aside from the registers. */
-#ifdef DEBUG
-#define NUM_NONREG_ITEMS 5 /* Includes failure point id. */
-#else
-#define NUM_NONREG_ITEMS 4
-#endif
-
-/* We push at most this many items on the stack. */
-#define MAX_FAILURE_ITEMS ((num_regs - 1) * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
-
-/* We actually push this many items. */
-#define NUM_FAILURE_ITEMS \
- ((highest_active_reg - lowest_active_reg + 1) * NUM_REG_ITEMS \
- + NUM_NONREG_ITEMS)
-
-/* How many items can still be added to the stack without overflowing it. */
-#define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
-
-
-/* Pops what PUSH_FAIL_STACK pushes.
-
- We restore into the parameters, all of which should be lvalues:
- STR -- the saved data position.
- PAT -- the saved pattern position.
- LOW_REG, HIGH_REG -- the highest and lowest active registers.
- REGSTART, REGEND -- arrays of string positions.
- REG_INFO -- array of information about each subexpression.
-
- Also assumes the variables `fail_stack' and (if debugging), `bufp',
- `pend', `string1', `size1', `string2', and `size2'. */
-
-#define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
-{ \
- DEBUG_STATEMENT (fail_stack_elt_t failure_id;) \
- int this_reg; \
- const unsigned char *string_temp; \
- \
- assert (!FAIL_STACK_EMPTY ()); \
- \
- /* Remove failure points and point to how many regs pushed. */ \
- DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \
- DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \
- DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \
- \
- assert (fail_stack.avail >= NUM_NONREG_ITEMS); \
- \
- DEBUG_POP (&failure_id); \
- DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \
- \
- /* If the saved string location is NULL, it came from an \
- on_failure_keep_string_jump opcode, and we want to throw away the \
- saved NULL, thus retaining our current position in the string. */ \
- string_temp = POP_FAILURE_ITEM (); \
- if (string_temp != NULL) \
- str = (const char *) string_temp; \
- \
- DEBUG_PRINT2 (" Popping string 0x%x: `", str); \
- DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \
- DEBUG_PRINT1 ("'\n"); \
- \
- pat = (unsigned char *) POP_FAILURE_ITEM (); \
- DEBUG_PRINT2 (" Popping pattern 0x%x: ", pat); \
- DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \
- \
- /* Restore register info. */ \
- high_reg = (unsigned) POP_FAILURE_ITEM (); \
- DEBUG_PRINT2 (" Popping high active reg: %d\n", high_reg); \
- \
- low_reg = (unsigned) POP_FAILURE_ITEM (); \
- DEBUG_PRINT2 (" Popping low active reg: %d\n", low_reg); \
- \
- for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \
- { \
- DEBUG_PRINT2 (" Popping reg: %d\n", this_reg); \
- \
- reg_info[this_reg].word = POP_FAILURE_ITEM (); \
- DEBUG_PRINT2 (" info: 0x%x\n", reg_info[this_reg]); \
- \
- regend[this_reg] = (const char *) POP_FAILURE_ITEM (); \
- DEBUG_PRINT2 (" end: 0x%x\n", regend[this_reg]); \
- \
- regstart[this_reg] = (const char *) POP_FAILURE_ITEM (); \
- DEBUG_PRINT2 (" start: 0x%x\n", regstart[this_reg]); \
- } \
- \
- DEBUG_STATEMENT (nfailure_points_popped++); \
-} /* POP_FAILURE_POINT */
-
-/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
- BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible
- characters can start a string that matches the pattern. This fastmap
- is used by re_search to skip quickly over impossible starting points.
-
- The caller must supply the address of a (1 << BYTEWIDTH)-byte data
- area as BUFP->fastmap.
-
- We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
- the pattern buffer.
-
- Returns 0 if we succeed, -2 if an internal error. */
-
-int
-re_compile_fastmap (bufp)
- struct re_pattern_buffer *bufp;
-{
- int j, k;
- fail_stack_type fail_stack;
-#ifndef REGEX_MALLOC
- char *destination;
-#endif
- /* We don't push any register information onto the failure stack. */
- unsigned num_regs = 0;
-
- register char *fastmap = bufp->fastmap;
- unsigned char *pattern = bufp->buffer;
- unsigned long size = bufp->used;
- const unsigned char *p = pattern;
- register unsigned char *pend = pattern + size;
-
- /* Assume that each path through the pattern can be null until
- proven otherwise. We set this false at the bottom of switch
- statement, to which we get only if a particular path doesn't
- match the empty string. */
- boolean path_can_be_null = true;
-
- /* We aren't doing a `succeed_n' to begin with. */
- boolean succeed_n_p = false;
-
- assert (fastmap != NULL && p != NULL);
-
- INIT_FAIL_STACK ();
- bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */
- bufp->fastmap_accurate = 1; /* It will be when we're done. */
- bufp->can_be_null = 0;
-
- while (p != pend || !FAIL_STACK_EMPTY ())
- {
- if (p == pend)
- {
- bufp->can_be_null |= path_can_be_null;
-
- /* Reset for next path. */
- path_can_be_null = true;
-
- p = fail_stack.stack[--fail_stack.avail];
- }
-
- /* We should never be about to go beyond the end of the pattern. */
- assert (p < pend);
-
-#ifdef SWITCH_ENUM_BUG
- switch ((int) ((re_opcode_t) *p++))
-#else
- switch ((re_opcode_t) *p++)
-#endif
- {
-
- /* I guess the idea here is to simply not bother with a fastmap
- if a backreference is used, since it's too hard to figure out
- the fastmap for the corresponding group. Setting
- `can_be_null' stops `re_search_2' from using the fastmap, so
- that is all we do. */
- case duplicate:
- bufp->can_be_null = 1;
- return 0;
-
-
- /* Following are the cases which match a character. These end
- with `break'. */
-
- case exactn:
- fastmap[p[1]] = 1;
- break;
-
-
- case charset:
- for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
- if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
- fastmap[j] = 1;
- break;
-
-
- case charset_not:
- /* Chars beyond end of map must be allowed. */
- for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
- fastmap[j] = 1;
-
- for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
- if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
- fastmap[j] = 1;
- break;
-
-
- case wordchar:
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) == Sword)
- fastmap[j] = 1;
- break;
-
-
- case notwordchar:
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) != Sword)
- fastmap[j] = 1;
- break;
-
-
- case anychar:
- /* `.' matches anything ... */
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- fastmap[j] = 1;
-
- /* ... except perhaps newline. */
- if (!(bufp->syntax & RE_DOT_NEWLINE))
- fastmap['\n'] = 0;
-
- /* Return if we have already set `can_be_null'; if we have,
- then the fastmap is irrelevant. Something's wrong here. */
- else if (bufp->can_be_null)
- return 0;
-
- /* Otherwise, have to check alternative paths. */
- break;
-
-
-#ifdef emacs
- case syntaxspec:
- k = *p++;
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) == (enum syntaxcode) k)
- fastmap[j] = 1;
- break;
-
-
- case notsyntaxspec:
- k = *p++;
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) != (enum syntaxcode) k)
- fastmap[j] = 1;
- break;
-
-
- /* All cases after this match the empty string. These end with
- `continue'. */
-
-
- case before_dot:
- case at_dot:
- case after_dot:
- continue;
-#endif /* not emacs */
-
-
- case no_op:
- case begline:
- case endline:
- case begbuf:
- case endbuf:
- case wordbound:
- case notwordbound:
- case wordbeg:
- case wordend:
- case push_dummy_failure:
- continue;
-
-
- case jump_n:
- case pop_failure_jump:
- case maybe_pop_jump:
- case jump:
- case jump_past_alt:
- case dummy_failure_jump:
- EXTRACT_NUMBER_AND_INCR (j, p);
- p += j;
- if (j > 0)
- continue;
-
- /* Jump backward implies we just went through the body of a
- loop and matched nothing. Opcode jumped to should be
- `on_failure_jump' or `succeed_n'. Just treat it like an
- ordinary jump. For a * loop, it has pushed its failure
- point already; if so, discard that as redundant. */
- if ((re_opcode_t) *p != on_failure_jump
- && (re_opcode_t) *p != succeed_n)
- continue;
-
- p++;
- EXTRACT_NUMBER_AND_INCR (j, p);
- p += j;
-
- /* If what's on the stack is where we are now, pop it. */
- if (!FAIL_STACK_EMPTY ()
- && fail_stack.stack[fail_stack.avail - 1] == p)
- fail_stack.avail--;
-
- continue;
-
-
- case on_failure_jump:
- case on_failure_keep_string_jump:
- handle_on_failure_jump:
- EXTRACT_NUMBER_AND_INCR (j, p);
-
- /* For some patterns, e.g., `(a?)?', `p+j' here points to the
- end of the pattern. We don't want to push such a point,
- since when we restore it above, entering the switch will
- increment `p' past the end of the pattern. We don't need
- to push such a point since we obviously won't find any more
- fastmap entries beyond `pend'. Such a pattern can match
- the null string, though. */
- if (p + j < pend)
- {
- if (!PUSH_PATTERN_OP (p + j, fail_stack))
- return -2;
- }
- else
- bufp->can_be_null = 1;
-
- if (succeed_n_p)
- {
- EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */
- succeed_n_p = false;
- }
-
- continue;
-
-
- case succeed_n:
- /* Get to the number of times to succeed. */
- p += 2;
-
- /* Increment p past the n for when k != 0. */
- EXTRACT_NUMBER_AND_INCR (k, p);
- if (k == 0)
- {
- p -= 4;
- succeed_n_p = true; /* Spaghetti code alert. */
- goto handle_on_failure_jump;
- }
- continue;
-
-
- case set_number_at:
- p += 4;
- continue;
-
-
- case start_memory:
- case stop_memory:
- p += 2;
- continue;
-
-
- default:
- abort (); /* We have listed all the cases. */
- } /* switch *p++ */
-
- /* Getting here means we have found the possible starting
- characters for one path of the pattern -- and that the empty
- string does not match. We need not follow this path further.
- Instead, look at the next alternative (remembered on the
- stack), or quit if no more. The test at the top of the loop
- does these things. */
- path_can_be_null = false;
- p = pend;
- } /* while p */
-
- /* Set `can_be_null' for the last path (also the first path, if the
- pattern is empty). */
- bufp->can_be_null |= path_can_be_null;
- return 0;
-} /* re_compile_fastmap */
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
- ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use
- this memory for recording register information. STARTS and ENDS
- must be allocated using the malloc library routine, and must each
- be at least NUM_REGS * sizeof (regoff_t) bytes long.
-
- If NUM_REGS == 0, then subsequent matches should allocate their own
- register data.
-
- Unless this function is called, the first search or match using
- PATTERN_BUFFER will allocate its own register data, without
- freeing the old data. */
-
-void
-re_set_registers (bufp, regs, num_regs, starts, ends)
- struct re_pattern_buffer *bufp;
- struct re_registers *regs;
- unsigned num_regs;
- regoff_t *starts, *ends;
-{
- if (num_regs)
- {
- bufp->regs_allocated = REGS_REALLOCATE;
- regs->num_regs = num_regs;
- regs->start = starts;
- regs->end = ends;
- }
- else
- {
- bufp->regs_allocated = REGS_UNALLOCATED;
- regs->num_regs = 0;
- regs->start = regs->end = (regoff_t) 0;
- }
-}
-
-/* Searching routines. */
-
-/* Like re_search_2, below, but only one string is specified, and
- doesn't let you say where to stop matching. */
-
-int
-re_search (bufp, string, size, startpos, range, regs)
- struct re_pattern_buffer *bufp;
- const char *string;
- int size, startpos, range;
- struct re_registers *regs;
-{
- return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
- regs, size);
-}
-
-
-/* Using the compiled pattern in BUFP->buffer, first tries to match the
- virtual concatenation of STRING1 and STRING2, starting first at index
- STARTPOS, then at STARTPOS + 1, and so on.
-
- STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
-
- RANGE is how far to scan while trying to match. RANGE = 0 means try
- only at STARTPOS; in general, the last start tried is STARTPOS +
- RANGE.
-
- In REGS, return the indices of the virtual concatenation of STRING1
- and STRING2 that matched the entire BUFP->buffer and its contained
- subexpressions.
-
- Do not consider matching one past the index STOP in the virtual
- concatenation of STRING1 and STRING2.
-
- We return either the position in the strings at which the match was
- found, -1 if no match, or -2 if error (such as failure
- stack overflow). */
-
-int
-re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
- struct re_pattern_buffer *bufp;
- const char *string1, *string2;
- int size1, size2;
- int startpos;
- int range;
- struct re_registers *regs;
- int stop;
-{
- int val;
- register char *fastmap = bufp->fastmap;
- register char *translate = bufp->translate;
- int total_size = size1 + size2;
- int endpos = startpos + range;
-
- /* Check for out-of-range STARTPOS. */
- if (startpos < 0 || startpos > total_size)
- return -1;
-
- /* Fix up RANGE if it might eventually take us outside
- the virtual concatenation of STRING1 and STRING2. */
- if (endpos < -1)
- range = -1 - startpos;
- else if (endpos > total_size)
- range = total_size - startpos;
-
- /* If the search isn't to be a backwards one, don't waste time in a
- search for a pattern that must be anchored. */
- if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0)
- {
- if (startpos > 0)
- return -1;
- else
- range = 1;
- }
-
- /* Update the fastmap now if not correct already. */
- if (fastmap && !bufp->fastmap_accurate)
- if (re_compile_fastmap (bufp) == -2)
- return -2;
-
- /* Loop through the string, looking for a place to start matching. */
- for (;;)
- {
- /* If a fastmap is supplied, skip quickly over characters that
- cannot be the start of a match. If the pattern can match the
- null string, however, we don't need to skip characters; we want
- the first null string. */
- if (fastmap && startpos < total_size && !bufp->can_be_null)
- {
- if (range > 0) /* Searching forwards. */
- {
- register const char *d;
- register int lim = 0;
- int irange = range;
-
- if (startpos < size1 && startpos + range >= size1)
- lim = range - (size1 - startpos);
-
- d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
-
- /* Written out as an if-else to avoid testing `translate'
- inside the loop. */
- if (translate)
- while (range > lim
- && !fastmap[(unsigned char)
- translate[(unsigned char) *d++]])
- range--;
- else
- while (range > lim && !fastmap[(unsigned char) *d++])
- range--;
-
- startpos += irange - range;
- }
- else /* Searching backwards. */
- {
- register char c = (size1 == 0 || startpos >= size1
- ? string2[startpos - size1]
- : string1[startpos]);
-
- if (!fastmap[(unsigned char) TRANSLATE (c)])
- goto advance;
- }
- }
-
- /* If can't match the null string, and that's all we have left, fail. */
- if (range >= 0 && startpos == total_size && fastmap
- && !bufp->can_be_null)
- return -1;
-
- val = re_match_2 (bufp, string1, size1, string2, size2,
- startpos, regs, stop);
- if (val >= 0)
- return startpos;
-
- if (val == -2)
- return -2;
-
- advance:
- if (!range)
- break;
- else if (range > 0)
- {
- range--;
- startpos++;
- }
- else
- {
- range++;
- startpos--;
- }
- }
- return -1;
-} /* re_search_2 */
-
-/* Declarations and macros for re_match_2. */
-
-static int bcmp_translate ();
-static boolean alt_match_null_string_p (),
- common_op_match_null_string_p (),
- group_match_null_string_p ();
-
-/* Structure for per-register (a.k.a. per-group) information.
- This must not be longer than one word, because we push this value
- onto the failure stack. Other register information, such as the
- starting and ending positions (which are addresses), and the list of
- inner groups (which is a bits list) are maintained in separate
- variables.
-
- We are making a (strictly speaking) nonportable assumption here: that
- the compiler will pack our bit fields into something that fits into
- the type of `word', i.e., is something that fits into one item on the
- failure stack. */
-typedef union
-{
- fail_stack_elt_t word;
- struct
- {
- /* This field is one if this group can match the empty string,
- zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */
-#define MATCH_NULL_UNSET_VALUE 3
- unsigned match_null_string_p : 2;
- unsigned is_active : 1;
- unsigned matched_something : 1;
- unsigned ever_matched_something : 1;
- } bits;
-} register_info_type;
-
-#define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p)
-#define IS_ACTIVE(R) ((R).bits.is_active)
-#define MATCHED_SOMETHING(R) ((R).bits.matched_something)
-#define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something)
-
-
-/* Call this when have matched a real character; it sets `matched' flags
- for the subexpressions which we are currently inside. Also records
- that those subexprs have matched. */
-#define SET_REGS_MATCHED() \
- do \
- { \
- unsigned r; \
- for (r = lowest_active_reg; r <= highest_active_reg; r++) \
- { \
- MATCHED_SOMETHING (reg_info[r]) \
- = EVER_MATCHED_SOMETHING (reg_info[r]) \
- = 1; \
- } \
- } \
- while (0)
-
-
-/* This converts PTR, a pointer into one of the search strings `string1'
- and `string2' into an offset from the beginning of that string. */
-#define POINTER_TO_OFFSET(ptr) \
- (FIRST_STRING_P (ptr) ? (ptr) - string1 : (ptr) - string2 + size1)
-
-/* Registers are set to a sentinel when they haven't yet matched. */
-#define REG_UNSET_VALUE ((char *) -1)
-#define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
-
-
-/* Macros for dealing with the split strings in re_match_2. */
-
-#define MATCHING_IN_FIRST_STRING (dend == end_match_1)
-
-/* Call before fetching a character with *d. This switches over to
- string2 if necessary. */
-#define PREFETCH() \
- while (d == dend) \
- { \
- /* End of string2 => fail. */ \
- if (dend == end_match_2) \
- goto fail; \
- /* End of string1 => advance to string2. */ \
- d = string2; \
- dend = end_match_2; \
- }
-
-
-/* Test if at very beginning or at very end of the virtual concatenation
- of `string1' and `string2'. If only one string, it's `string2'. */
-#define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
-#define AT_STRINGS_END(d) ((d) == end2)
-
-
-/* Test if D points to a character which is word-constituent. We have
- two special cases to check for: if past the end of string1, look at
- the first character in string2; and if before the beginning of
- string2, look at the last character in string1. */
-#define WORDCHAR_P(d) \
- (SYNTAX ((d) == end1 ? *string2 \
- : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \
- == Sword)
-
-/* Test if the character before D and the one at D differ with respect
- to being word-constituent. */
-#define AT_WORD_BOUNDARY(d) \
- (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \
- || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
-
-
-/* Free everything we malloc. */
-#ifdef REGEX_MALLOC
-#define FREE_VAR(var) if (var) free (var); var = NULL
-#define FREE_VARIABLES() \
- do { \
- FREE_VAR (fail_stack.stack); \
- FREE_VAR (regstart); \
- FREE_VAR (regend); \
- FREE_VAR (old_regstart); \
- FREE_VAR (old_regend); \
- FREE_VAR (best_regstart); \
- FREE_VAR (best_regend); \
- FREE_VAR (reg_info); \
- FREE_VAR (reg_dummy); \
- FREE_VAR (reg_info_dummy); \
- } while (0)
-#else /* not REGEX_MALLOC */
-/* Some MIPS systems (at least) want this to free alloca'd storage. */
-#define FREE_VARIABLES() alloca (0)
-#endif /* not REGEX_MALLOC */
-
-
-/* These values must meet several constraints. They must not be valid
- register values; since we have a limit of 255 registers (because
- we use only one byte in the pattern for the register number), we can
- use numbers larger than 255. They must differ by 1, because of
- NUM_FAILURE_ITEMS above. And the value for the lowest register must
- be larger than the value for the highest register, so we do not try
- to actually save any registers when none are active. */
-#define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
-#define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
-
-/* Matching routines. */
-
-#ifndef emacs /* Emacs never uses this. */
-/* re_match is like re_match_2 except it takes only a single string. */
-
-int
-re_match (bufp, string, size, pos, regs)
- struct re_pattern_buffer *bufp;
- const char *string;
- int size, pos;
- struct re_registers *regs;
- {
- return re_match_2 (bufp, NULL, 0, string, size, pos, regs, size);
-}
-#endif /* not emacs */
-
-
-/* re_match_2 matches the compiled pattern in BUFP against the
- the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
- and SIZE2, respectively). We start matching at POS, and stop
- matching at STOP.
-
- If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
- store offsets for the substring each group matched in REGS. See the
- documentation for exactly how many groups we fill.
-
- We return -1 if no match, -2 if an internal error (such as the
- failure stack overflowing). Otherwise, we return the length of the
- matched substring. */
-
-int
-re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
- struct re_pattern_buffer *bufp;
- const char *string1, *string2;
- int size1, size2;
- int pos;
- struct re_registers *regs;
- int stop;
-{
- /* General temporaries. */
- int mcnt;
- unsigned char *p1;
-
- /* Just past the end of the corresponding string. */
- const char *end1, *end2;
-
- /* Pointers into string1 and string2, just past the last characters in
- each to consider matching. */
- const char *end_match_1, *end_match_2;
-
- /* Where we are in the data, and the end of the current string. */
- const char *d, *dend;
-
- /* Where we are in the pattern, and the end of the pattern. */
- unsigned char *p = bufp->buffer;
- register unsigned char *pend = p + bufp->used;
-
- /* We use this to map every character in the string. */
- char *translate = bufp->translate;
-
- /* Failure point stack. Each place that can handle a failure further
- down the line pushes a failure point on this stack. It consists of
- restart, regend, and reg_info for all registers corresponding to
- the subexpressions we're currently inside, plus the number of such
- registers, and, finally, two char *'s. The first char * is where
- to resume scanning the pattern; the second one is where to resume
- scanning the strings. If the latter is zero, the failure point is
- a ``dummy''; if a failure happens and the failure point is a dummy,
- it gets discarded and the next next one is tried. */
- fail_stack_type fail_stack;
-#ifdef DEBUG
- static unsigned failure_id = 0;
- unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
-#endif
-
- /* We fill all the registers internally, independent of what we
- return, for use in backreferences. The number here includes
- an element for register zero. */
- unsigned num_regs = bufp->re_nsub + 1;
-
- /* The currently active registers. */
- unsigned lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- unsigned highest_active_reg = NO_HIGHEST_ACTIVE_REG;
-
- /* Information on the contents of registers. These are pointers into
- the input strings; they record just what was matched (on this
- attempt) by a subexpression part of the pattern, that is, the
- regnum-th regstart pointer points to where in the pattern we began
- matching and the regnum-th regend points to right after where we
- stopped matching the regnum-th subexpression. (The zeroth register
- keeps track of what the whole pattern matches.) */
- const char **regstart, **regend;
-
- /* If a group that's operated upon by a repetition operator fails to
- match anything, then the register for its start will need to be
- restored because it will have been set to wherever in the string we
- are when we last see its open-group operator. Similarly for a
- register's end. */
- const char **old_regstart, **old_regend;
-
- /* The is_active field of reg_info helps us keep track of which (possibly
- nested) subexpressions we are currently in. The matched_something
- field of reg_info[reg_num] helps us tell whether or not we have
- matched any of the pattern so far this time through the reg_num-th
- subexpression. These two fields get reset each time through any
- loop their register is in. */
- register_info_type *reg_info;
-
- /* The following record the register info as found in the above
- variables when we find a match better than any we've seen before.
- This happens as we backtrack through the failure points, which in
- turn happens only if we have not yet matched the entire string. */
- unsigned best_regs_set = false;
- const char **best_regstart, **best_regend;
-
- /* Logically, this is `best_regend[0]'. But we don't want to have to
- allocate space for that if we're not allocating space for anything
- else (see below). Also, we never need info about register 0 for
- any of the other register vectors, and it seems rather a kludge to
- treat `best_regend' differently than the rest. So we keep track of
- the end of the best match so far in a separate variable. We
- initialize this to NULL so that when we backtrack the first time
- and need to test it, it's not garbage. */
- const char *match_end = NULL;
-
- /* Used when we pop values we don't care about. */
- const char **reg_dummy;
- register_info_type *reg_info_dummy;
-
-#ifdef DEBUG
- /* Counts the total number of registers pushed. */
- unsigned num_regs_pushed = 0;
-#endif
-
- DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
-
- INIT_FAIL_STACK ();
-
- /* Do not bother to initialize all the register variables if there are
- no groups in the pattern, as it takes a fair amount of time. If
- there are groups, we include space for register 0 (the whole
- pattern), even though we never use it, since it simplifies the
- array indexing. We should fix this. */
- if (bufp->re_nsub)
- {
- regstart = REGEX_TALLOC (num_regs, const char *);
- regend = REGEX_TALLOC (num_regs, const char *);
- old_regstart = REGEX_TALLOC (num_regs, const char *);
- old_regend = REGEX_TALLOC (num_regs, const char *);
- best_regstart = REGEX_TALLOC (num_regs, const char *);
- best_regend = REGEX_TALLOC (num_regs, const char *);
- reg_info = REGEX_TALLOC (num_regs, register_info_type);
- reg_dummy = REGEX_TALLOC (num_regs, const char *);
- reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
-
- if (!(regstart && regend && old_regstart && old_regend && reg_info
- && best_regstart && best_regend && reg_dummy && reg_info_dummy))
- {
- FREE_VARIABLES ();
- return -2;
- }
- }
-#ifdef REGEX_MALLOC
- else
- {
- /* We must initialize all our variables to NULL, so that
- `FREE_VARIABLES' doesn't try to free them. */
- regstart = regend = old_regstart = old_regend = best_regstart
- = best_regend = reg_dummy = NULL;
- reg_info = reg_info_dummy = (register_info_type *) NULL;
- }
-#endif /* REGEX_MALLOC */
-
- /* The starting position is bogus. */
- if (pos < 0 || pos > size1 + size2)
- {
- FREE_VARIABLES ();
- return -1;
- }
-
- /* Initialize subexpression text positions to -1 to mark ones that no
- start_memory/stop_memory has been seen for. Also initialize the
- register information struct. */
- for (mcnt = 1; mcnt < num_regs; mcnt++)
- {
- regstart[mcnt] = regend[mcnt]
- = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
-
- REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
- IS_ACTIVE (reg_info[mcnt]) = 0;
- MATCHED_SOMETHING (reg_info[mcnt]) = 0;
- EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
- }
-
- /* We move `string1' into `string2' if the latter's empty -- but not if
- `string1' is null. */
- if (size2 == 0 && string1 != NULL)
- {
- string2 = string1;
- size2 = size1;
- string1 = 0;
- size1 = 0;
- }
- end1 = string1 + size1;
- end2 = string2 + size2;
-
- /* Compute where to stop matching, within the two strings. */
- if (stop <= size1)
- {
- end_match_1 = string1 + stop;
- end_match_2 = string2;
- }
- else
- {
- end_match_1 = end1;
- end_match_2 = string2 + stop - size1;
- }
-
- /* `p' scans through the pattern as `d' scans through the data.
- `dend' is the end of the input string that `d' points within. `d'
- is advanced into the following input string whenever necessary, but
- this happens before fetching; therefore, at the beginning of the
- loop, `d' can be pointing at the end of a string, but it cannot
- equal `string2'. */
- if (size1 > 0 && pos <= size1)
- {
- d = string1 + pos;
- dend = end_match_1;
- }
- else
- {
- d = string2 + pos - size1;
- dend = end_match_2;
- }
-
- DEBUG_PRINT1 ("The compiled pattern is: ");
- DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
- DEBUG_PRINT1 ("The string to match is: `");
- DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
- DEBUG_PRINT1 ("'\n");
-
- /* This loops over pattern commands. It exits by returning from the
- function if the match is complete, or it drops through if the match
- fails at this starting point in the input data. */
- for (;;)
- {
- DEBUG_PRINT2 ("\n0x%x: ", p);
-
- if (p == pend)
- { /* End of pattern means we might have succeeded. */
- DEBUG_PRINT1 ("end of pattern ... ");
-
- /* If we haven't matched the entire string, and we want the
- longest match, try backtracking. */
- if (d != end_match_2)
- {
- DEBUG_PRINT1 ("backtracking.\n");
-
- if (!FAIL_STACK_EMPTY ())
- { /* More failure points to try. */
- boolean same_str_p = (FIRST_STRING_P (match_end)
- == MATCHING_IN_FIRST_STRING);
-
- /* If exceeds best match so far, save it. */
- if (!best_regs_set
- || (same_str_p && d > match_end)
- || (!same_str_p && !MATCHING_IN_FIRST_STRING))
- {
- best_regs_set = true;
- match_end = d;
-
- DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
-
- for (mcnt = 1; mcnt < num_regs; mcnt++)
- {
- best_regstart[mcnt] = regstart[mcnt];
- best_regend[mcnt] = regend[mcnt];
- }
- }
- goto fail;
- }
-
- /* If no failure points, don't restore garbage. */
- else if (best_regs_set)
- {
- restore_best_regs:
- /* Restore best match. It may happen that `dend ==
- end_match_1' while the restored d is in string2.
- For example, the pattern `x.*y.*z' against the
- strings `x-' and `y-z-', if the two strings are
- not consecutive in memory. */
- DEBUG_PRINT1 ("Restoring best registers.\n");
-
- d = match_end;
- dend = ((d >= string1 && d <= end1)
- ? end_match_1 : end_match_2);
-
- for (mcnt = 1; mcnt < num_regs; mcnt++)
- {
- regstart[mcnt] = best_regstart[mcnt];
- regend[mcnt] = best_regend[mcnt];
- }
- }
- } /* d != end_match_2 */
-
- DEBUG_PRINT1 ("Accepting match.\n");
-
- /* If caller wants register contents data back, do it. */
- if (regs && !bufp->no_sub)
- {
- /* Have the register data arrays been allocated? */
- if (bufp->regs_allocated == REGS_UNALLOCATED)
- { /* No. So allocate them with malloc. We need one
- extra element beyond `num_regs' for the `-1' marker
- GNU code uses. */
- regs->num_regs = MAX (RE_NREGS, num_regs + 1);
- regs->start = TALLOC (regs->num_regs, regoff_t);
- regs->end = TALLOC (regs->num_regs, regoff_t);
- if (regs->start == NULL || regs->end == NULL)
- return -2;
- bufp->regs_allocated = REGS_REALLOCATE;
- }
- else if (bufp->regs_allocated == REGS_REALLOCATE)
- { /* Yes. If we need more elements than were already
- allocated, reallocate them. If we need fewer, just
- leave it alone. */
- if (regs->num_regs < num_regs + 1)
- {
- regs->num_regs = num_regs + 1;
- RETALLOC (regs->start, regs->num_regs, regoff_t);
- RETALLOC (regs->end, regs->num_regs, regoff_t);
- if (regs->start == NULL || regs->end == NULL)
- return -2;
- }
- }
- else
- assert (bufp->regs_allocated == REGS_FIXED);
-
- /* Convert the pointer data in `regstart' and `regend' to
- indices. Register zero has to be set differently,
- since we haven't kept track of any info for it. */
- if (regs->num_regs > 0)
- {
- regs->start[0] = pos;
- regs->end[0] = (MATCHING_IN_FIRST_STRING ? d - string1
- : d - string2 + size1);
- }
-
- /* Go through the first `min (num_regs, regs->num_regs)'
- registers, since that is all we initialized. */
- for (mcnt = 1; mcnt < MIN (num_regs, regs->num_regs); mcnt++)
- {
- if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
- regs->start[mcnt] = regs->end[mcnt] = -1;
- else
- {
- regs->start[mcnt] = POINTER_TO_OFFSET (regstart[mcnt]);
- regs->end[mcnt] = POINTER_TO_OFFSET (regend[mcnt]);
- }
- }
-
- /* If the regs structure we return has more elements than
- were in the pattern, set the extra elements to -1. If
- we (re)allocated the registers, this is the case,
- because we always allocate enough to have at least one
- -1 at the end. */
- for (mcnt = num_regs; mcnt < regs->num_regs; mcnt++)
- regs->start[mcnt] = regs->end[mcnt] = -1;
- } /* regs && !bufp->no_sub */
-
- FREE_VARIABLES ();
- DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
- nfailure_points_pushed, nfailure_points_popped,
- nfailure_points_pushed - nfailure_points_popped);
- DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
-
- mcnt = d - pos - (MATCHING_IN_FIRST_STRING
- ? string1
- : string2 - size1);
-
- DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
-
- return mcnt;
- }
-
- /* Otherwise match next pattern command. */
-#ifdef SWITCH_ENUM_BUG
- switch ((int) ((re_opcode_t) *p++))
-#else
- switch ((re_opcode_t) *p++)
-#endif
- {
- /* Ignore these. Used to ignore the n of succeed_n's which
- currently have n == 0. */
- case no_op:
- DEBUG_PRINT1 ("EXECUTING no_op.\n");
- break;
-
-
- /* Match the next n pattern characters exactly. The following
- byte in the pattern defines n, and the n bytes after that
- are the characters to match. */
- case exactn:
- mcnt = *p++;
- DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
-
- /* This is written out as an if-else so we don't waste time
- testing `translate' inside the loop. */
- if (translate)
- {
- do
- {
- PREFETCH ();
- if (translate[(unsigned char) *d++] != (char) *p++)
- goto fail;
- }
- while (--mcnt);
- }
- else
- {
- do
- {
- PREFETCH ();
- if (*d++ != (char) *p++) goto fail;
- }
- while (--mcnt);
- }
- SET_REGS_MATCHED ();
- break;
-
-
- /* Match any character except possibly a newline or a null. */
- case anychar:
- DEBUG_PRINT1 ("EXECUTING anychar.\n");
-
- PREFETCH ();
-
- if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
- || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
- goto fail;
-
- SET_REGS_MATCHED ();
- DEBUG_PRINT2 (" Matched `%d'.\n", *d);
- d++;
- break;
-
-
- case charset:
- case charset_not:
- {
- register unsigned char c;
- boolean not = (re_opcode_t) *(p - 1) == charset_not;
-
- DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
-
- PREFETCH ();
- c = TRANSLATE (*d); /* The character to match. */
-
- /* Cast to `unsigned' instead of `unsigned char' in case the
- bit list is a full 32 bytes long. */
- if (c < (unsigned) (*p * BYTEWIDTH)
- && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
- not = !not;
-
- p += 1 + *p;
-
- if (!not) goto fail;
-
- SET_REGS_MATCHED ();
- d++;
- break;
- }
-
-
- /* The beginning of a group is represented by start_memory.
- The arguments are the register number in the next byte, and the
- number of groups inner to this one in the next. The text
- matched within the group is recorded (in the internal
- registers data structure) under the register number. */
- case start_memory:
- DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]);
-
- /* Find out if this group can match the empty string. */
- p1 = p; /* To send to group_match_null_string_p. */
-
- if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
- REG_MATCH_NULL_STRING_P (reg_info[*p])
- = group_match_null_string_p (&p1, pend, reg_info);
-
- /* Save the position in the string where we were the last time
- we were at this open-group operator in case the group is
- operated upon by a repetition operator, e.g., with `(a*)*b'
- against `ab'; then we want to ignore where we are now in
- the string in case this attempt to match fails. */
- old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
- ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
- : regstart[*p];
- DEBUG_PRINT2 (" old_regstart: %d\n",
- POINTER_TO_OFFSET (old_regstart[*p]));
-
- regstart[*p] = d;
- DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
-
- IS_ACTIVE (reg_info[*p]) = 1;
- MATCHED_SOMETHING (reg_info[*p]) = 0;
-
- /* This is the new highest active register. */
- highest_active_reg = *p;
-
- /* If nothing was active before, this is the new lowest active
- register. */
- if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
- lowest_active_reg = *p;
-
- /* Move past the register number and inner group count. */
- p += 2;
- break;
-
-
- /* The stop_memory opcode represents the end of a group. Its
- arguments are the same as start_memory's: the register
- number, and the number of inner groups. */
- case stop_memory:
- DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]);
-
- /* We need to save the string position the last time we were at
- this close-group operator in case the group is operated
- upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
- against `aba'; then we want to ignore where we are now in
- the string in case this attempt to match fails. */
- old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
- ? REG_UNSET (regend[*p]) ? d : regend[*p]
- : regend[*p];
- DEBUG_PRINT2 (" old_regend: %d\n",
- POINTER_TO_OFFSET (old_regend[*p]));
-
- regend[*p] = d;
- DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
-
- /* This register isn't active anymore. */
- IS_ACTIVE (reg_info[*p]) = 0;
-
- /* If this was the only register active, nothing is active
- anymore. */
- if (lowest_active_reg == highest_active_reg)
- {
- lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- highest_active_reg = NO_HIGHEST_ACTIVE_REG;
- }
- else
- { /* We must scan for the new highest active register, since
- it isn't necessarily one less than now: consider
- (a(b)c(d(e)f)g). When group 3 ends, after the f), the
- new highest active register is 1. */
- unsigned char r = *p - 1;
- while (r > 0 && !IS_ACTIVE (reg_info[r]))
- r--;
-
- /* If we end up at register zero, that means that we saved
- the registers as the result of an `on_failure_jump', not
- a `start_memory', and we jumped to past the innermost
- `stop_memory'. For example, in ((.)*) we save
- registers 1 and 2 as a result of the *, but when we pop
- back to the second ), we are at the stop_memory 1.
- Thus, nothing is active. */
- if (r == 0)
- {
- lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- highest_active_reg = NO_HIGHEST_ACTIVE_REG;
- }
- else
- highest_active_reg = r;
- }
-
- /* If just failed to match something this time around with a
- group that's operated on by a repetition operator, try to
- force exit from the ``loop'', and restore the register
- information for this group that we had before trying this
- last match. */
- if ((!MATCHED_SOMETHING (reg_info[*p])
- || (re_opcode_t) p[-3] == start_memory)
- && (p + 2) < pend)
- {
- boolean is_a_jump_n = false;
-
- p1 = p + 2;
- mcnt = 0;
- switch ((re_opcode_t) *p1++)
- {
- case jump_n:
- is_a_jump_n = true;
- case pop_failure_jump:
- case maybe_pop_jump:
- case jump:
- case dummy_failure_jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if (is_a_jump_n)
- p1 += 2;
- break;
-
- default:
- /* do nothing */ ;
- }
- p1 += mcnt;
-
- /* If the next operation is a jump backwards in the pattern
- to an on_failure_jump right before the start_memory
- corresponding to this stop_memory, exit from the loop
- by forcing a failure after pushing on the stack the
- on_failure_jump's jump in the pattern, and d. */
- if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
- && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
- {
- /* If this group ever matched anything, then restore
- what its registers were before trying this last
- failed match, e.g., with `(a*)*b' against `ab' for
- regstart[1], and, e.g., with `((a*)*(b*)*)*'
- against `aba' for regend[3].
-
- Also restore the registers for inner groups for,
- e.g., `((a*)(b*))*' against `aba' (register 3 would
- otherwise get trashed). */
-
- if (EVER_MATCHED_SOMETHING (reg_info[*p]))
- {
- unsigned r;
-
- EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
-
- /* Restore this and inner groups' (if any) registers. */
- for (r = *p; r < *p + *(p + 1); r++)
- {
- regstart[r] = old_regstart[r];
-
- /* xx why this test? */
- if ((int) old_regend[r] >= (int) regstart[r])
- regend[r] = old_regend[r];
- }
- }
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
-
- goto fail;
- }
- }
-
- /* Move past the register number and the inner group count. */
- p += 2;
- break;
-
-
- /* \<digit> has been turned into a `duplicate' command which is
- followed by the numeric value of <digit> as the register number. */
- case duplicate:
- {
- register const char *d2, *dend2;
- int regno = *p++; /* Get which register to match against. */
- DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
-
- /* Can't back reference a group which we've never matched. */
- if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
- goto fail;
-
- /* Where in input to try to start matching. */
- d2 = regstart[regno];
-
- /* Where to stop matching; if both the place to start and
- the place to stop matching are in the same string, then
- set to the place to stop, otherwise, for now have to use
- the end of the first string. */
-
- dend2 = ((FIRST_STRING_P (regstart[regno])
- == FIRST_STRING_P (regend[regno]))
- ? regend[regno] : end_match_1);
- for (;;)
- {
- /* If necessary, advance to next segment in register
- contents. */
- while (d2 == dend2)
- {
- if (dend2 == end_match_2) break;
- if (dend2 == regend[regno]) break;
-
- /* End of string1 => advance to string2. */
- d2 = string2;
- dend2 = regend[regno];
- }
- /* At end of register contents => success */
- if (d2 == dend2) break;
-
- /* If necessary, advance to next segment in data. */
- PREFETCH ();
-
- /* How many characters left in this segment to match. */
- mcnt = dend - d;
-
- /* Want how many consecutive characters we can match in
- one shot, so, if necessary, adjust the count. */
- if (mcnt > dend2 - d2)
- mcnt = dend2 - d2;
-
- /* Compare that many; failure if mismatch, else move
- past them. */
- if (translate
- ? bcmp_translate (d, d2, mcnt, translate)
- : bcmp (d, d2, mcnt))
- goto fail;
- d += mcnt, d2 += mcnt;
- }
- }
- break;
-
-
- /* begline matches the empty string at the beginning of the string
- (unless `not_bol' is set in `bufp'), and, if
- `newline_anchor' is set, after newlines. */
- case begline:
- DEBUG_PRINT1 ("EXECUTING begline.\n");
-
- if (AT_STRINGS_BEG (d))
- {
- if (!bufp->not_bol) break;
- }
- else if (d[-1] == '\n' && bufp->newline_anchor)
- {
- break;
- }
- /* In all other cases, we fail. */
- goto fail;
-
-
- /* endline is the dual of begline. */
- case endline:
- DEBUG_PRINT1 ("EXECUTING endline.\n");
-
- if (AT_STRINGS_END (d))
- {
- if (!bufp->not_eol) break;
- }
-
- /* We have to ``prefetch'' the next character. */
- else if ((d == end1 ? *string2 : *d) == '\n'
- && bufp->newline_anchor)
- {
- break;
- }
- goto fail;
-
-
- /* Match at the very beginning of the data. */
- case begbuf:
- DEBUG_PRINT1 ("EXECUTING begbuf.\n");
- if (AT_STRINGS_BEG (d))
- break;
- goto fail;
-
-
- /* Match at the very end of the data. */
- case endbuf:
- DEBUG_PRINT1 ("EXECUTING endbuf.\n");
- if (AT_STRINGS_END (d))
- break;
- goto fail;
-
-
- /* on_failure_keep_string_jump is used to optimize `.*\n'. It
- pushes NULL as the value for the string on the stack. Then
- `pop_failure_point' will keep the current value for the
- string, instead of restoring it. To see why, consider
- matching `foo\nbar' against `.*\n'. The .* matches the foo;
- then the . fails against the \n. But the next thing we want
- to do is match the \n against the \n; if we restored the
- string value, we would be back at the foo.
-
- Because this is used only in specific cases, we don't need to
- check all the things that `on_failure_jump' does, to make
- sure the right things get saved on the stack. Hence we don't
- share its code. The only reason to push anything on the
- stack at all is that otherwise we would have to change
- `anychar's code to do something besides goto fail in this
- case; that seems worse than this. */
- case on_failure_keep_string_jump:
- DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
-
- PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
- break;
-
-
- /* Uses of on_failure_jump:
-
- Each alternative starts with an on_failure_jump that points
- to the beginning of the next alternative. Each alternative
- except the last ends with a jump that in effect jumps past
- the rest of the alternatives. (They really jump to the
- ending jump of the following alternative, because tensioning
- these jumps is a hassle.)
-
- Repeats start with an on_failure_jump that points past both
- the repetition text and either the following jump or
- pop_failure_jump back to this on_failure_jump. */
- case on_failure_jump:
- on_failure:
- DEBUG_PRINT1 ("EXECUTING on_failure_jump");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
-
- /* If this on_failure_jump comes right before a group (i.e.,
- the original * applied to a group), save the information
- for that group and all inner ones, so that if we fail back
- to this point, the group's information will be correct.
- For example, in \(a*\)*\1, we need the preceding group,
- and in \(\(a*\)b*\)\2, we need the inner group. */
-
- /* We can't use `p' to check ahead because we push
- a failure point to `p + mcnt' after we do this. */
- p1 = p;
-
- /* We need to skip no_op's before we look for the
- start_memory in case this on_failure_jump is happening as
- the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
- against aba. */
- while (p1 < pend && (re_opcode_t) *p1 == no_op)
- p1++;
-
- if (p1 < pend && (re_opcode_t) *p1 == start_memory)
- {
- /* We have a new highest active register now. This will
- get reset at the start_memory we are about to get to,
- but we will have saved all the registers relevant to
- this repetition op, as described above. */
- highest_active_reg = *(p1 + 1) + *(p1 + 2);
- if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
- lowest_active_reg = *(p1 + 1);
- }
-
- DEBUG_PRINT1 (":\n");
- PUSH_FAILURE_POINT (p + mcnt, d, -2);
- break;
-
-
- /* A smart repeat ends with `maybe_pop_jump'.
- We change it to either `pop_failure_jump' or `jump'. */
- case maybe_pop_jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
- {
- register unsigned char *p2 = p;
-
- /* Compare the beginning of the repeat with what in the
- pattern follows its end. If we can establish that there
- is nothing that they would both match, i.e., that we
- would have to backtrack because of (as in, e.g., `a*a')
- then we can change to pop_failure_jump, because we'll
- never have to backtrack.
-
- This is not true in the case of alternatives: in
- `(a|ab)*' we do need to backtrack to the `ab' alternative
- (e.g., if the string was `ab'). But instead of trying to
- detect that here, the alternative has put on a dummy
- failure point which is what we will end up popping. */
-
- /* Skip over open/close-group commands. */
- while (p2 + 2 < pend
- && ((re_opcode_t) *p2 == stop_memory
- || (re_opcode_t) *p2 == start_memory))
- p2 += 3; /* Skip over args, too. */
-
- /* If we're at the end of the pattern, we can change. */
- if (p2 == pend)
- {
- /* Consider what happens when matching ":\(.*\)"
- against ":/". I don't really understand this code
- yet. */
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1
- (" End of pattern: change to `pop_failure_jump'.\n");
- }
-
- else if ((re_opcode_t) *p2 == exactn
- || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
- {
- register unsigned char c
- = *p2 == (unsigned char) endline ? '\n' : p2[2];
- p1 = p + mcnt;
-
- /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
- to the `maybe_finalize_jump' of this case. Examine what
- follows. */
- if ((re_opcode_t) p1[3] == exactn && p1[5] != c)
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n",
- c, p1[5]);
- }
-
- else if ((re_opcode_t) p1[3] == charset
- || (re_opcode_t) p1[3] == charset_not)
- {
- int not = (re_opcode_t) p1[3] == charset_not;
-
- if (c < (unsigned char) (p1[4] * BYTEWIDTH)
- && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
- not = !not;
-
- /* `not' is equal to 1 if c would match, which means
- that we can't change to pop_failure_jump. */
- if (!not)
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
- }
- }
- }
- }
- p -= 2; /* Point at relative address again. */
- if ((re_opcode_t) p[-1] != pop_failure_jump)
- {
- p[-1] = (unsigned char) jump;
- DEBUG_PRINT1 (" Match => jump.\n");
- goto unconditional_jump;
- }
- /* Note fall through. */
-
-
- /* The end of a simple repeat has a pop_failure_jump back to
- its matching on_failure_jump, where the latter will push a
- failure point. The pop_failure_jump takes off failure
- points put on by this pop_failure_jump's matching
- on_failure_jump; we got through the pattern to here from the
- matching on_failure_jump, so didn't fail. */
- case pop_failure_jump:
- {
- /* We need to pass separate storage for the lowest and
- highest registers, even though we don't care about the
- actual values. Otherwise, we will restore only one
- register from the stack, since lowest will == highest in
- `pop_failure_point'. */
- unsigned dummy_low_reg, dummy_high_reg;
- unsigned char *pdummy;
- const char *sdummy;
-
- DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
- POP_FAILURE_POINT (sdummy, pdummy,
- dummy_low_reg, dummy_high_reg,
- reg_dummy, reg_dummy, reg_info_dummy);
- }
- /* Note fall through. */
-
-
- /* Unconditionally jump (without popping any failure points). */
- case jump:
- unconditional_jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */
- DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
- p += mcnt; /* Do the jump. */
- DEBUG_PRINT2 ("(to 0x%x).\n", p);
- break;
-
-
- /* We need this opcode so we can detect where alternatives end
- in `group_match_null_string_p' et al. */
- case jump_past_alt:
- DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
- goto unconditional_jump;
-
-
- /* Normally, the on_failure_jump pushes a failure point, which
- then gets popped at pop_failure_jump. We will end up at
- pop_failure_jump, also, and with a pattern of, say, `a+', we
- are skipping over the on_failure_jump, so we have to push
- something meaningless for pop_failure_jump to pop. */
- case dummy_failure_jump:
- DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
- /* It doesn't matter what we push for the string here. What
- the code at `fail' tests is the value for the pattern. */
- PUSH_FAILURE_POINT (0, 0, -2);
- goto unconditional_jump;
-
-
- /* At the end of an alternative, we need to push a dummy failure
- point in case we are followed by a `pop_failure_jump', because
- we don't want the failure point for the alternative to be
- popped. For example, matching `(a|ab)*' against `aab'
- requires that we match the `ab' alternative. */
- case push_dummy_failure:
- DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
- /* See comments just above at `dummy_failure_jump' about the
- two zeroes. */
- PUSH_FAILURE_POINT (0, 0, -2);
- break;
-
- /* Have to succeed matching what follows at least n times.
- After that, handle like `on_failure_jump'. */
- case succeed_n:
- EXTRACT_NUMBER (mcnt, p + 2);
- DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
-
- assert (mcnt >= 0);
- /* Originally, this is how many times we HAVE to succeed. */
- if (mcnt > 0)
- {
- mcnt--;
- p += 2;
- STORE_NUMBER_AND_INCR (p, mcnt);
- DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p, mcnt);
- }
- else if (mcnt == 0)
- {
- DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", p+2);
- p[2] = (unsigned char) no_op;
- p[3] = (unsigned char) no_op;
- goto on_failure;
- }
- break;
-
- case jump_n:
- EXTRACT_NUMBER (mcnt, p + 2);
- DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
-
- /* Originally, this is how many times we CAN jump. */
- if (mcnt)
- {
- mcnt--;
- STORE_NUMBER (p + 2, mcnt);
- goto unconditional_jump;
- }
- /* If don't have to jump any more, skip over the rest of command. */
- else
- p += 4;
- break;
-
- case set_number_at:
- {
- DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- p1 = p + mcnt;
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt);
- STORE_NUMBER (p1, mcnt);
- break;
- }
-
- case wordbound:
- DEBUG_PRINT1 ("EXECUTING wordbound.\n");
- if (AT_WORD_BOUNDARY (d))
- break;
- goto fail;
-
- case notwordbound:
- DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
- if (AT_WORD_BOUNDARY (d))
- goto fail;
- break;
-
- case wordbeg:
- DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
- if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
- break;
- goto fail;
-
- case wordend:
- DEBUG_PRINT1 ("EXECUTING wordend.\n");
- if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
- && (!WORDCHAR_P (d) || AT_STRINGS_END (d)))
- break;
- goto fail;
-
-#ifdef emacs
-#ifdef emacs19
- case before_dot:
- DEBUG_PRINT1 ("EXECUTING before_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) >= point)
- goto fail;
- break;
-
- case at_dot:
- DEBUG_PRINT1 ("EXECUTING at_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) != point)
- goto fail;
- break;
-
- case after_dot:
- DEBUG_PRINT1 ("EXECUTING after_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) <= point)
- goto fail;
- break;
-#else /* not emacs19 */
- case at_dot:
- DEBUG_PRINT1 ("EXECUTING at_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) + 1 != point)
- goto fail;
- break;
-#endif /* not emacs19 */
-
- case syntaxspec:
- DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
- mcnt = *p++;
- goto matchsyntax;
-
- case wordchar:
- DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
- mcnt = (int) Sword;
- matchsyntax:
- PREFETCH ();
- if (SYNTAX (*d++) != (enum syntaxcode) mcnt)
- goto fail;
- SET_REGS_MATCHED ();
- break;
-
- case notsyntaxspec:
- DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
- mcnt = *p++;
- goto matchnotsyntax;
-
- case notwordchar:
- DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
- mcnt = (int) Sword;
- matchnotsyntax:
- PREFETCH ();
- if (SYNTAX (*d++) == (enum syntaxcode) mcnt)
- goto fail;
- SET_REGS_MATCHED ();
- break;
-
-#else /* not emacs */
- case wordchar:
- DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
- PREFETCH ();
- if (!WORDCHAR_P (d))
- goto fail;
- SET_REGS_MATCHED ();
- d++;
- break;
-
- case notwordchar:
- DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
- PREFETCH ();
- if (WORDCHAR_P (d))
- goto fail;
- SET_REGS_MATCHED ();
- d++;
- break;
-#endif /* not emacs */
-
- default:
- abort ();
- }
- continue; /* Successfully executed one pattern command; keep going. */
-
-
- /* We goto here if a matching operation fails. */
- fail:
- if (!FAIL_STACK_EMPTY ())
- { /* A restart point is known. Restore to that state. */
- DEBUG_PRINT1 ("\nFAIL:\n");
- POP_FAILURE_POINT (d, p,
- lowest_active_reg, highest_active_reg,
- regstart, regend, reg_info);
-
- /* If this failure point is a dummy, try the next one. */
- if (!p)
- goto fail;
-
- /* If we failed to the end of the pattern, don't examine *p. */
- assert (p <= pend);
- if (p < pend)
- {
- boolean is_a_jump_n = false;
-
- /* If failed to a backwards jump that's part of a repetition
- loop, need to pop this failure point and use the next one. */
- switch ((re_opcode_t) *p)
- {
- case jump_n:
- is_a_jump_n = true;
- case maybe_pop_jump:
- case pop_failure_jump:
- case jump:
- p1 = p + 1;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
-
- if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
- || (!is_a_jump_n
- && (re_opcode_t) *p1 == on_failure_jump))
- goto fail;
- break;
- default:
- /* do nothing */ ;
- }
- }
-
- if (d >= string1 && d <= end1)
- dend = end_match_1;
- }
- else
- break; /* Matching at this starting point really fails. */
- } /* for (;;) */
-
- if (best_regs_set)
- goto restore_best_regs;
-
- FREE_VARIABLES ();
-
- return -1; /* Failure to match. */
-} /* re_match_2 */
-
-/* Subroutine definitions for re_match_2. */
-
-
-/* We are passed P pointing to a register number after a start_memory.
-
- Return true if the pattern up to the corresponding stop_memory can
- match the empty string, and false otherwise.
-
- If we find the matching stop_memory, sets P to point to one past its number.
- Otherwise, sets P to an undefined byte less than or equal to END.
-
- We don't handle duplicates properly (yet). */
-
-static boolean
-group_match_null_string_p (p, end, reg_info)
- unsigned char **p, *end;
- register_info_type *reg_info;
-{
- int mcnt;
- /* Point to after the args to the start_memory. */
- unsigned char *p1 = *p + 2;
-
- while (p1 < end)
- {
- /* Skip over opcodes that can match nothing, and return true or
- false, as appropriate, when we get to one that can't, or to the
- matching stop_memory. */
-
- switch ((re_opcode_t) *p1)
- {
- /* Could be either a loop or a series of alternatives. */
- case on_failure_jump:
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
-
- /* If the next operation is not a jump backwards in the
- pattern. */
-
- if (mcnt >= 0)
- {
- /* Go through the on_failure_jumps of the alternatives,
- seeing if any of the alternatives cannot match nothing.
- The last alternative starts with only a jump,
- whereas the rest start with on_failure_jump and end
- with a jump, e.g., here is the pattern for `a|b|c':
-
- /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
- /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
- /exactn/1/c
-
- So, we have to first go through the first (n-1)
- alternatives and then deal with the last one separately. */
-
-
- /* Deal with the first (n-1) alternatives, which start
- with an on_failure_jump (see above) that jumps to right
- past a jump_past_alt. */
-
- while ((re_opcode_t) p1[mcnt-3] == jump_past_alt)
- {
- /* `mcnt' holds how many bytes long the alternative
- is, including the ending `jump_past_alt' and
- its number. */
-
- if (!alt_match_null_string_p (p1, p1 + mcnt - 3,
- reg_info))
- return false;
-
- /* Move to right after this alternative, including the
- jump_past_alt. */
- p1 += mcnt;
-
- /* Break if it's the beginning of an n-th alternative
- that doesn't begin with an on_failure_jump. */
- if ((re_opcode_t) *p1 != on_failure_jump)
- break;
-
- /* Still have to check that it's not an n-th
- alternative that starts with an on_failure_jump. */
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if ((re_opcode_t) p1[mcnt-3] != jump_past_alt)
- {
- /* Get to the beginning of the n-th alternative. */
- p1 -= 3;
- break;
- }
- }
-
- /* Deal with the last alternative: go back and get number
- of the `jump_past_alt' just before it. `mcnt' contains
- the length of the alternative. */
- EXTRACT_NUMBER (mcnt, p1 - 2);
-
- if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info))
- return false;
-
- p1 += mcnt; /* Get past the n-th alternative. */
- } /* if mcnt > 0 */
- break;
-
-
- case stop_memory:
- assert (p1[1] == **p);
- *p = p1 + 2;
- return true;
-
-
- default:
- if (!common_op_match_null_string_p (&p1, end, reg_info))
- return false;
- }
- } /* while p1 < end */
-
- return false;
-} /* group_match_null_string_p */
-
-
-/* Similar to group_match_null_string_p, but doesn't deal with alternatives:
- It expects P to be the first byte of a single alternative and END one
- byte past the last. The alternative can contain groups. */
-
-static boolean
-alt_match_null_string_p (p, end, reg_info)
- unsigned char *p, *end;
- register_info_type *reg_info;
-{
- int mcnt;
- unsigned char *p1 = p;
-
- while (p1 < end)
- {
- /* Skip over opcodes that can match nothing, and break when we get
- to one that can't. */
-
- switch ((re_opcode_t) *p1)
- {
- /* It's a loop. */
- case on_failure_jump:
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
- break;
-
- default:
- if (!common_op_match_null_string_p (&p1, end, reg_info))
- return false;
- }
- } /* while p1 < end */
-
- return true;
-} /* alt_match_null_string_p */
-
-
-/* Deals with the ops common to group_match_null_string_p and
- alt_match_null_string_p.
-
- Sets P to one after the op and its arguments, if any. */
-
-static boolean
-common_op_match_null_string_p (p, end, reg_info)
- unsigned char **p, *end;
- register_info_type *reg_info;
-{
- int mcnt;
- boolean ret;
- int reg_no;
- unsigned char *p1 = *p;
-
- switch ((re_opcode_t) *p1++)
- {
- case no_op:
- case begline:
- case endline:
- case begbuf:
- case endbuf:
- case wordbeg:
- case wordend:
- case wordbound:
- case notwordbound:
-#ifdef emacs
- case before_dot:
- case at_dot:
- case after_dot:
-#endif
- break;
-
- case start_memory:
- reg_no = *p1;
- assert (reg_no > 0 && reg_no <= MAX_REGNUM);
- ret = group_match_null_string_p (&p1, end, reg_info);
-
- /* Have to set this here in case we're checking a group which
- contains a group and a back reference to it. */
-
- if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
- REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
-
- if (!ret)
- return false;
- break;
-
- /* If this is an optimized succeed_n for zero times, make the jump. */
- case jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if (mcnt >= 0)
- p1 += mcnt;
- else
- return false;
- break;
-
- case succeed_n:
- /* Get to the number of times to succeed. */
- p1 += 2;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
-
- if (mcnt == 0)
- {
- p1 -= 4;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
- }
- else
- return false;
- break;
-
- case duplicate:
- if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
- return false;
- break;
-
- case set_number_at:
- p1 += 4;
-
- default:
- /* All other opcodes mean we cannot match the empty string. */
- return false;
- }
-
- *p = p1;
- return true;
-} /* common_op_match_null_string_p */
-
-
-/* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
- bytes; nonzero otherwise. */
-
-static int
-bcmp_translate (s1, s2, len, translate)
- unsigned char *s1, *s2;
- register int len;
- char *translate;
-{
- register unsigned char *p1 = s1, *p2 = s2;
- while (len)
- {
- if (translate[*p1++] != translate[*p2++]) return 1;
- len--;
- }
- return 0;
-}
-
-/* Entry points for GNU code. */
-
-/* re_compile_pattern is the GNU regular expression compiler: it
- compiles PATTERN (of length SIZE) and puts the result in BUFP.
- Returns 0 if the pattern was valid, otherwise an error string.
-
- Assumes the `allocated' (and perhaps `buffer') and `translate' fields
- are set in BUFP on entry.
-
- We call regex_compile to do the actual compilation. */
-
-const char *
-re_compile_pattern (pattern, length, bufp)
- const char *pattern;
- int length;
- struct re_pattern_buffer *bufp;
-{
- reg_errcode_t ret;
-
- /* GNU code is written to assume at least RE_NREGS registers will be set
- (and at least one extra will be -1). */
- bufp->regs_allocated = REGS_UNALLOCATED;
-
- /* And GNU code determines whether or not to get register information
- by passing null for the REGS argument to re_match, etc., not by
- setting no_sub. */
- bufp->no_sub = 0;
-
- /* Match anchors at newline. */
- bufp->newline_anchor = 1;
-
- ret = regex_compile (pattern, length, re_syntax_options, bufp);
-
- return re_error_msg[(int) ret];
-}
-
-/* Entry points compatible with 4.2 BSD regex library. We don't define
- them if this is an Emacs or POSIX compilation. */
-
-#if !defined (emacs) && !defined (_POSIX_SOURCE)
-
-/* BSD has one and only one pattern buffer. */
-static struct re_pattern_buffer re_comp_buf;
-
-char *
-re_comp (s)
- const char *s;
-{
- reg_errcode_t ret;
-
- if (!s)
- {
- if (!re_comp_buf.buffer)
- return "No previous regular expression";
- return 0;
- }
-
- if (!re_comp_buf.buffer)
- {
- re_comp_buf.buffer = (unsigned char *) malloc (200);
- if (re_comp_buf.buffer == NULL)
- return "Memory exhausted";
- re_comp_buf.allocated = 200;
-
- re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
- if (re_comp_buf.fastmap == NULL)
- return "Memory exhausted";
- }
-
- /* Since `re_exec' always passes NULL for the `regs' argument, we
- don't need to initialize the pattern buffer fields which affect it. */
-
- /* Match anchors at newlines. */
- re_comp_buf.newline_anchor = 1;
-
- ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
-
- /* Yes, we're discarding `const' here. */
- return (char *) re_error_msg[(int) ret];
-}
-
-
-int
-re_exec (s)
- const char *s;
-{
- const int len = strlen (s);
- return
- 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
-}
-#endif /* not emacs and not _POSIX_SOURCE */
-
-/* POSIX.2 functions. Don't define these for Emacs. */
-
-#ifndef emacs
-
-/* regcomp takes a regular expression as a string and compiles it.
-
- PREG is a regex_t *. We do not expect any fields to be initialized,
- since POSIX says we shouldn't. Thus, we set
-
- `buffer' to the compiled pattern;
- `used' to the length of the compiled pattern;
- `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
- REG_EXTENDED bit in CFLAGS is set; otherwise, to
- RE_SYNTAX_POSIX_BASIC;
- `newline_anchor' to REG_NEWLINE being set in CFLAGS;
- `fastmap' and `fastmap_accurate' to zero;
- `re_nsub' to the number of subexpressions in PATTERN.
-
- PATTERN is the address of the pattern string.
-
- CFLAGS is a series of bits which affect compilation.
-
- If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
- use POSIX basic syntax.
-
- If REG_NEWLINE is set, then . and [^...] don't match newline.
- Also, regexec will try a match beginning after every newline.
-
- If REG_ICASE is set, then we considers upper- and lowercase
- versions of letters to be equivalent when matching.
-
- If REG_NOSUB is set, then when PREG is passed to regexec, that
- routine will report only success or failure, and nothing about the
- registers.
-
- It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for
- the return codes and their meanings.) */
-
-int
-regcomp (preg, pattern, cflags)
- regex_t *preg;
- const char *pattern;
- int cflags;
-{
- reg_errcode_t ret;
- unsigned syntax
- = (cflags & REG_EXTENDED) ?
- RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
-
- /* regex_compile will allocate the space for the compiled pattern. */
- preg->buffer = 0;
- preg->allocated = 0;
-
- /* Don't bother to use a fastmap when searching. This simplifies the
- REG_NEWLINE case: if we used a fastmap, we'd have to put all the
- characters after newlines into the fastmap. This way, we just try
- every character. */
- preg->fastmap = 0;
-
- if (cflags & REG_ICASE)
- {
- unsigned i;
-
- preg->translate = (char *) malloc (CHAR_SET_SIZE);
- if (preg->translate == NULL)
- return (int) REG_ESPACE;
-
- /* Map uppercase characters to corresponding lowercase ones. */
- for (i = 0; i < CHAR_SET_SIZE; i++)
- preg->translate[i] = ISUPPER (i) ? tolower (i) : i;
- }
- else
- preg->translate = NULL;
-
- /* If REG_NEWLINE is set, newlines are treated differently. */
- if (cflags & REG_NEWLINE)
- { /* REG_NEWLINE implies neither . nor [^...] match newline. */
- syntax &= ~RE_DOT_NEWLINE;
- syntax |= RE_HAT_LISTS_NOT_NEWLINE;
- /* It also changes the matching behavior. */
- preg->newline_anchor = 1;
- }
- else
- preg->newline_anchor = 0;
-
- preg->no_sub = !!(cflags & REG_NOSUB);
-
- /* POSIX says a null character in the pattern terminates it, so we
- can use strlen here in compiling the pattern. */
- ret = regex_compile (pattern, strlen (pattern), syntax, preg);
-
- /* POSIX doesn't distinguish between an unmatched open-group and an
- unmatched close-group: both are REG_EPAREN. */
- if (ret == REG_ERPAREN) ret = REG_EPAREN;
-
- return (int) ret;
-}
-
-
-/* regexec searches for a given pattern, specified by PREG, in the
- string STRING.
-
- If NMATCH is zero or REG_NOSUB was set in the cflags argument to
- `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at
- least NMATCH elements, and we set them to the offsets of the
- corresponding matched substrings.
-
- EFLAGS specifies `execution flags' which affect matching: if
- REG_NOTBOL is set, then ^ does not match at the beginning of the
- string; if REG_NOTEOL is set, then $ does not match at the end.
-
- We return 0 if we find a match and REG_NOMATCH if not. */
-
-int
-regexec (preg, string, nmatch, pmatch, eflags)
- const regex_t *preg;
- const char *string;
- size_t nmatch;
- regmatch_t pmatch[];
- int eflags;
-{
- int ret;
- struct re_registers regs;
- regex_t private_preg;
- int len = strlen (string);
- boolean want_reg_info = !preg->no_sub && nmatch > 0;
-
- private_preg = *preg;
-
- private_preg.not_bol = !!(eflags & REG_NOTBOL);
- private_preg.not_eol = !!(eflags & REG_NOTEOL);
-
- /* The user has told us exactly how many registers to return
- information about, via `nmatch'. We have to pass that on to the
- matching routines. */
- private_preg.regs_allocated = REGS_FIXED;
-
- if (want_reg_info)
- {
- regs.num_regs = nmatch;
- regs.start = TALLOC (nmatch, regoff_t);
- regs.end = TALLOC (nmatch, regoff_t);
- if (regs.start == NULL || regs.end == NULL)
- return (int) REG_NOMATCH;
- }
-
- /* Perform the searching operation. */
- ret = re_search (&private_preg, string, len,
- /* start: */ 0, /* range: */ len,
- want_reg_info ? &regs : (struct re_registers *) 0);
-
- /* Copy the register information to the POSIX structure. */
- if (want_reg_info)
- {
- if (ret >= 0)
- {
- unsigned r;
-
- for (r = 0; r < nmatch; r++)
- {
- pmatch[r].rm_so = regs.start[r];
- pmatch[r].rm_eo = regs.end[r];
- }
- }
-
- /* If we needed the temporary register info, free the space now. */
- free (regs.start);
- free (regs.end);
- }
-
- /* We want zero return to mean success, unlike `re_search'. */
- return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
-}
-
-
-/* Returns a message corresponding to an error code, ERRCODE, returned
- from either regcomp or regexec. We don't use PREG here. */
-
-size_t
-regerror (errcode, preg, errbuf, errbuf_size)
- int errcode;
- const regex_t *preg;
- char *errbuf;
- size_t errbuf_size;
-{
- const char *msg;
- size_t msg_size;
-
- if (errcode < 0
- || errcode >= (sizeof (re_error_msg) / sizeof (re_error_msg[0])))
- /* Only error codes returned by the rest of the code should be passed
- to this routine. If we are given anything else, or if other regex
- code generates an invalid error code, then the program has a bug.
- Dump core so we can fix it. */
- abort ();
-
- msg = re_error_msg[errcode];
-
- /* POSIX doesn't require that we do anything in this case, but why
- not be nice. */
- if (! msg)
- msg = "Success";
-
- msg_size = strlen (msg) + 1; /* Includes the null. */
-
- if (errbuf_size != 0)
- {
- if (msg_size > errbuf_size)
- {
- strncpy (errbuf, msg, errbuf_size - 1);
- errbuf[errbuf_size - 1] = 0;
- }
- else
- strcpy (errbuf, msg);
- }
-
- return msg_size;
-}
-
-
-/* Free dynamically allocated space used by PREG. */
-
-void
-regfree (preg)
- regex_t *preg;
-{
- if (preg->buffer != NULL)
- free (preg->buffer);
- preg->buffer = NULL;
-
- preg->allocated = 0;
- preg->used = 0;
-
- if (preg->fastmap != NULL)
- free (preg->fastmap);
- preg->fastmap = NULL;
- preg->fastmap_accurate = 0;
-
- if (preg->translate != NULL)
- free (preg->translate);
- preg->translate = NULL;
-}
-
-#endif /* not emacs */
-
-/*
-Local variables:
-make-backup-files: t
-version-control: t
-trim-versions-without-asking: nil
-End:
-*/
diff --git a/gnu/usr.bin/cvs/lib/y.tab.h b/gnu/usr.bin/cvs/lib/y.tab.h
deleted file mode 100644
index 4a541d2..0000000
--- a/gnu/usr.bin/cvs/lib/y.tab.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#define tAGO 257
-#define tDAY 258
-#define tDAYZONE 259
-#define tID 260
-#define tMERIDIAN 261
-#define tMINUTE_UNIT 262
-#define tMONTH 263
-#define tMONTH_UNIT 264
-#define tSEC_UNIT 265
-#define tSNUMBER 266
-#define tUNUMBER 267
-#define tZONE 268
-#define tDST 269
-typedef union {
- time_t Number;
- enum _MERIDIAN Meridian;
-} YYSTYPE;
-extern YYSTYPE yylval;
diff --git a/gnu/usr.bin/cvs/mkmodules/xxx b/gnu/usr.bin/cvs/mkmodules/xxx
deleted file mode 100644
index f0dd87d..0000000
--- a/gnu/usr.bin/cvs/mkmodules/xxx
+++ /dev/null
@@ -1,5320 +0,0 @@
-# 1 "/usr/src/gnu/cvs/mkmodules/mkmodules.c"
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/syslimits.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 14 "/usr/src/gnu/cvs/mkmodules/mkmodules.c" 2
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 1
-
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/types.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-typedef unsigned char u_char;
-typedef unsigned short u_short;
-typedef unsigned int u_int;
-typedef unsigned long u_long;
-typedef unsigned short ushort;
-
-typedef char * caddr_t;
-typedef long daddr_t;
-typedef short dev_t;
-typedef u_long ino_t;
-typedef long off_t;
-typedef u_short nlink_t;
-typedef long swblk_t;
-typedef long segsz_t;
-typedef u_short uid_t;
-typedef u_short gid_t;
-typedef short pid_t;
-typedef u_short mode_t;
-typedef u_long fixpt_t;
-
-
-typedef struct _uquad { u_long val[2]; } u_quad;
-typedef struct _quad { long val[2]; } quad;
-typedef long * qaddr_t;
-
-
-
-
-
-
-# 1 "/usr/include/machine/ansi.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 69 "/usr/include/sys/types.h" 2
-
-
-# 1 "/usr/include/machine/types.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-typedef struct _physadr {
- int r[1];
-} *physadr;
-
-typedef struct label_t {
- int val[6];
-} label_t;
-
-typedef u_long vm_offset_t;
-typedef u_long vm_size_t;
-
-
-# 71 "/usr/include/sys/types.h" 2
-
-
-
-
-typedef unsigned long clock_t;
-
-
-
-
-typedef unsigned int size_t;
-
-
-
-
-typedef long time_t;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-typedef long fd_mask;
-
-
-
-
-
-
-typedef struct fd_set {
- fd_mask fds_bits[(((256 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ];
-} fd_set;
-
-
-
-
-
-
-# 132 "/usr/include/sys/types.h"
-
-
-
-
-# 20 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-# 1 "/usr/include/sys/stat.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct stat
-{
- dev_t st_dev;
- ino_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- off_t st_size;
- time_t st_atime;
- long st_spare1;
- time_t st_mtime;
- long st_spare2;
- time_t st_ctime;
- long st_spare3;
- long st_blksize;
- long st_blocks;
- u_long st_flags;
- u_long st_gen;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 76 "/usr/include/sys/cdefs.h"
-
-
-
-# 114 "/usr/include/sys/stat.h" 2
-
-
-
-mode_t umask (mode_t) ;
-int chmod (const char *, mode_t) ;
-int fstat (int, struct stat *) ;
-int mkdir (const char *, mode_t) ;
-int mkfifo (const char *, mode_t) ;
-int stat (const char *, struct stat *) ;
-
-int fchmod (int, mode_t) ;
-int lstat (const char *, struct stat *) ;
-
-
-
-# 21 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-off_t lseek ();
-
-
-
-
-
-# 1 "/usr/include/time.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/machine/ansi.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 57 "/usr/include/machine/ansi.h"
-
-# 39 "/usr/include/time.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct tm {
- int tm_sec;
- int tm_min;
- int tm_hour;
- int tm_mday;
- int tm_mon;
- int tm_year;
- int tm_wday;
- int tm_yday;
- int tm_isdst;
- long tm_gmtoff;
- char *tm_zone;
-};
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 78 "/usr/include/sys/cdefs.h"
-
-# 74 "/usr/include/time.h" 2
-
-
-
-char *asctime (const struct tm *) ;
-clock_t clock (void) ;
-char *ctime (const time_t *) ;
-double difftime (time_t, time_t) ;
-struct tm *gmtime (const time_t *) ;
-struct tm *localtime (const time_t *) ;
-time_t mktime (struct tm *) ;
-size_t strftime (char *, size_t, const char *, const struct tm *) ;
-time_t time (time_t *) ;
-
-
-void tzset (void) ;
-
-
-
-char *timezone (int, int) ;
-void tzsetwall (void) ;
-
-
-
-
-# 72 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-
-
-# 86 "/usr/src/gnu/cvs/mkmodules/../lib/system.h"
-
-# 1 "/usr/include/sys/timeb.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct timeb {
- time_t time;
- unsigned short millitm;
- short timezone;
- short dstflag;
-};
-# 87 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/param.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/types.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 135 "/usr/include/sys/types.h"
-
-# 46 "/usr/include/sys/param.h" 2
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/syslimits.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 56 "/usr/include/sys/param.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/signal.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/machine/trap.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 42 "/usr/include/sys/signal.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 78 "/usr/include/sys/cdefs.h"
-
-# 90 "/usr/include/sys/signal.h" 2
-
-
-
-typedef void (*sig_t) (int) ;
-
-
-typedef void (*__sighandler_t) (int) ;
-typedef unsigned int sigset_t;
-
-
-int sigaddset (sigset_t *, int) ;
-int sigdelset (sigset_t *, int) ;
-int sigemptyset (sigset_t *) ;
-int sigfillset (sigset_t *) ;
-int sigismember (const sigset_t *, int) ;
-
-
-
-
-
-
-
-
-
-
-
-struct sigaction {
- __sighandler_t sa_handler;
- sigset_t sa_mask;
- int sa_flags;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct sigvec {
- void (*sv_handler)();
- int sv_mask;
- int sv_flags;
-};
-
-
-
-
-
-
-
-struct sigaltstack {
- char *ss_base;
- int ss_len;
- int ss_onstack;
-};
-
-
-
-
-struct sigstack {
- char *ss_sp;
- int ss_onstack;
-};
-
-
-
-
-
-
-
-
-struct sigcontext {
- int sc_onstack;
- int sc_mask;
- int sc_sp;
- int sc_fp;
- int sc_ap;
- int sc_pc;
- int sc_ps;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/types.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 135 "/usr/include/sys/types.h"
-
-# 195 "/usr/include/sys/signal.h" 2
-
-
-
-
-__sighandler_t signal (int, __sighandler_t) ;
-int raise (int) ;
-
-int kill (pid_t, int) ;
-int sigaction (int, const struct sigaction *, struct sigaction *) ;
-int sigpending (sigset_t *) ;
-int sigprocmask (int, const sigset_t *, sigset_t *) ;
-int sigsuspend (const sigset_t *) ;
-
-
-int killpg (pid_t, int) ;
-void psignal (unsigned, const char *) ;
-int sigblock (int) ;
-int siginterrupt (int, int) ;
-int sigpause (int) ;
-int sigreturn (struct sigcontext *) ;
-int sigsetmask (int) ;
-int sigstack (const struct sigstack *, struct sigstack *) ;
-int sigvec (int, struct sigvec *, struct sigvec *) ;
-
-
-
-
-
-# 79 "/usr/include/sys/param.h" 2
-
-
-
-# 1 "/usr/include/machine/param.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 82 "/usr/include/sys/param.h" 2
-
-# 1 "/usr/include/machine/endian.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 78 "/usr/include/sys/cdefs.h"
-
-# 55 "/usr/include/machine/endian.h" 2
-
-
-
-
-
-
-
-
-
-# 77 "/usr/include/machine/endian.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 106 "/usr/include/machine/endian.h"
-
-
-
-
-
-
-
-
-
-
-
-
-# 83 "/usr/include/sys/param.h" 2
-
-# 1 "/usr/include/machine/limits.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 84 "/usr/include/sys/param.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 97 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct utimbuf
-{
- long actime;
- long modtime;
-};
-
-int utime ();
-
-
-# 145 "/usr/src/gnu/cvs/mkmodules/../lib/system.h"
-
-# 1 "/usr/include/strings.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/string.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/machine/ansi.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 57 "/usr/include/machine/ansi.h"
-
-# 38 "/usr/include/string.h" 2
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 78 "/usr/include/sys/cdefs.h"
-
-# 49 "/usr/include/string.h" 2
-
-
-
-void *memchr (const void *, int, size_t) ;
-int memcmp (const void *, const void *, size_t) ;
-void *memcpy (void *, const void *, size_t) ;
-void *memmove (void *, const void *, size_t) ;
-void *memset (void *, int, size_t) ;
-char *strcat (char *, const char *) ;
-char *strchr (const char *, int) ;
-int strcmp (const char *, const char *) ;
-int strcoll (const char *, const char *) ;
-char *strcpy (char *, const char *) ;
-size_t strcspn (const char *, const char *) ;
-char *strerror (int) ;
-size_t strlen (const char *) ;
-char *strncat (char *, const char *, size_t) ;
-int strncmp (const char *, const char *, size_t) ;
-char *strncpy (char *, const char *, size_t) ;
-char *strpbrk (const char *, const char *) ;
-char *strrchr (const char *, int) ;
-size_t strspn (const char *, const char *) ;
-char *strstr (const char *, const char *) ;
-char *strtok (char *, const char *) ;
-size_t strxfrm (char *, const char *, size_t) ;
-
-
-
-int bcmp (const void *, const void *, size_t) ;
-void bcopy (const void *, void *, size_t) ;
-void bzero (void *, size_t) ;
-int ffs (int) ;
-char *index (const char *, int) ;
-void *memccpy (void *, const void *, int, size_t) ;
-char *rindex (const char *, int) ;
-int strcasecmp (const char *, const char *) ;
-char *strdup (const char *) ;
-void strmode (int, char *) ;
-int strncasecmp (const char *, const char *, size_t) ;
-char *strsep (char **, const char *) ;
-void swab (const void *, void *, size_t) ;
-
-
-
-
-# 36 "/usr/include/strings.h" 2
-
-# 146 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-
-
-# 1 "/usr/include/errno.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-extern int errno;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 149 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-
-
-
-char *getenv ();
-char *malloc ();
-char *realloc ();
-char *calloc ();
-extern int errno;
-
-
-
-
-
-
-# 173 "/usr/src/gnu/cvs/mkmodules/../lib/system.h"
-
-
-
-
-
-
-# 1 "/usr/include/sys/file.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/fcntl.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/types.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 135 "/usr/include/sys/types.h"
-
-# 46 "/usr/include/sys/fcntl.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 99 "/usr/include/sys/fcntl.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct flock {
- short l_type;
- short l_whence;
- off_t l_start;
- off_t l_len;
- pid_t l_pid;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 78 "/usr/include/sys/cdefs.h"
-
-# 169 "/usr/include/sys/fcntl.h" 2
-
-
-
-int open (const char *, int, ...) ;
-int creat (const char *, mode_t) ;
-int fcntl (int, int, ...) ;
-
-int flock (int, int) ;
-
-
-
-
-
-# 36 "/usr/include/sys/file.h" 2
-
-# 1 "/usr/include/sys/unistd.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 37 "/usr/include/sys/file.h" 2
-
-
-# 73 "/usr/include/sys/file.h"
-
-# 179 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-char *getwd ();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/dir.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/dirent.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct dirent {
- u_long d_fileno;
- u_short d_reclen;
- u_short d_namlen;
-
-
-
-
- char d_name[255 + 1];
-
-};
-
-
-
-
-
-
-
-
-
-
-
-typedef struct _dirdesc {
- int dd_fd;
- long dd_loc;
- long dd_size;
- char *dd_buf;
- int dd_len;
- long dd_seek;
-} DIR;
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 78 "/usr/include/sys/cdefs.h"
-
-# 88 "/usr/include/dirent.h" 2
-
-
-
-DIR *opendir (const char *) ;
-struct dirent *readdir (DIR *) ;
-void rewinddir (DIR *) ;
-int closedir (DIR *) ;
-
-long telldir (const DIR *) ;
-void seekdir (DIR *, long) ;
-int scandir (const char *, struct dirent ***,
- int (*)(struct dirent *), int (*)(const void *, const void *)) ;
-int alphasort (const void *, const void *) ;
-int getdirentries (int, char *, int, long *) ;
-
-
-
-
-
-
-# 44 "/usr/include/sys/dir.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 208 "/usr/src/gnu/cvs/mkmodules/../lib/system.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 3 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/include/stdio.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 78 "/usr/include/sys/cdefs.h"
-
-# 42 "/usr/include/stdio.h" 2
-
-
-# 1 "/usr/include/machine/ansi.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 57 "/usr/include/machine/ansi.h"
-
-# 44 "/usr/include/stdio.h" 2
-
-
-
-
-
-
-
-
-
-
-typedef long fpos_t;
-
-
-
-
-
-
-
-
-
-
-struct __sbuf {
- unsigned char *_base;
- int _size;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-typedef struct __sFILE {
- unsigned char *_p;
- int _r;
- int _w;
- short _flags;
- short _file;
- struct __sbuf _bf;
- int _lbfsize;
-
-
- void *_cookie;
- int (*_close) (void *) ;
- int (*_read) (void *, char *, int) ;
- fpos_t (*_seek) (void *, fpos_t, int) ;
- int (*_write) (void *, const char *, int) ;
-
-
- struct __sbuf _ub;
- unsigned char *_up;
- int _ur;
-
-
- unsigned char _ubuf[3];
- unsigned char _nbuf[1];
-
-
- struct __sbuf _lb;
-
-
- int _blksize;
- int _offset;
-} FILE;
-
-
-extern FILE __sF[];
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-void clearerr (FILE *) ;
-int fclose (FILE *) ;
-int feof (FILE *) ;
-int ferror (FILE *) ;
-int fflush (FILE *) ;
-int fgetc (FILE *) ;
-int fgetpos (FILE *, fpos_t *) ;
-char *fgets (char *, size_t, FILE *) ;
-FILE *fopen (const char *, const char *) ;
-int fprintf (FILE *, const char *, ...) ;
-int fputc (int, FILE *) ;
-int fputs (const char *, FILE *) ;
-int fread (void *, size_t, size_t, FILE *) ;
-FILE *freopen (const char *, const char *, FILE *) ;
-int fscanf (FILE *, const char *, ...) ;
-int fseek (FILE *, long, int) ;
-int fsetpos (FILE *, const fpos_t *) ;
-long ftell (const FILE *) ;
-int fwrite (const void *, size_t, size_t, FILE *) ;
-int getc (FILE *) ;
-int getchar (void) ;
-char *gets (char *) ;
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-void perror (const char *) ;
-int printf (const char *, ...) ;
-int putc (int, FILE *) ;
-int putchar (int) ;
-int puts (const char *) ;
-int remove (const char *) ;
-int rename (const char *, const char *) ;
-void rewind (FILE *) ;
-int scanf (const char *, ...) ;
-void setbuf (FILE *, char *) ;
-int setvbuf (FILE *, char *, int, size_t) ;
-int sprintf (char *, const char *, ...) ;
-int sscanf (char *, const char *, ...) ;
-FILE *tmpfile (void) ;
-char *tmpnam (char *) ;
-int ungetc (int, FILE *) ;
-int vfprintf (FILE *, const char *, char * ) ;
-int vprintf (const char *, char * ) ;
-int vsprintf (char *, const char *, char * ) ;
-
-
-
-
-
-
-
-
-
-
-char *ctermid (char *) ;
-FILE *fdopen (int, const char *) ;
-int fileno (FILE *) ;
-
-
-
-
-
-
-
-
-char *fgetline (FILE *, size_t *) ;
-int fpurge (FILE *) ;
-int getw (FILE *) ;
-int pclose (FILE *) ;
-FILE *popen (const char *, const char *) ;
-int putw (int, FILE *) ;
-void setbuffer (FILE *, char *, int) ;
-int setlinebuf (FILE *) ;
-char *tempnam (const char *, const char *) ;
-int snprintf (char *, size_t, const char *, ...) ;
-int vsnprintf (char *, size_t, const char *, char * ) ;
-int vscanf (const char *, char * ) ;
-int vsscanf (const char *, const char *, char * ) ;
-
-
-
-
-
-
-
-
-
-
-
-
-
-FILE *funopen (const void *,
- int (*)(void *, char *, int),
- int (*)(void *, const char *, int),
- fpos_t (*)(void *, fpos_t, int),
- int (*)(void *)) ;
-
-
-
-
-
-
-
-
-
-int __srget (FILE *) ;
-int __svfscanf (FILE *, const char *, char * ) ;
-int __swbuf (int, FILE *) ;
-
-
-
-
-
-
-
-
-static inline int __sputc(int _c, FILE *_p) {
- if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
- return (*_p->_p++ = _c);
- else
- return (__swbuf(_c, _p));
-}
-# 331 "/usr/include/stdio.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 4 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/include/ctype.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-extern char _ctype_[];
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 5 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/include/pwd.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/sys/types.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 135 "/usr/include/sys/types.h"
-
-# 39 "/usr/include/pwd.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct passwd {
- char *pw_name;
- char *pw_passwd;
- int pw_uid;
- int pw_gid;
- time_t pw_change;
- char *pw_class;
- char *pw_gecos;
- char *pw_dir;
- char *pw_shell;
- time_t pw_expire;
-};
-
-# 1 "/usr/include/sys/cdefs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 78 "/usr/include/sys/cdefs.h"
-
-# 72 "/usr/include/pwd.h" 2
-
-
-
-struct passwd *getpwuid (uid_t) ;
-struct passwd *getpwnam (const char *) ;
-
-struct passwd *getpwent (void) ;
-int setpassent (int) ;
-int setpwent (void) ;
-void endpwent (void) ;
-
-
-
-
-# 6 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/include/signal.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 222 "/usr/include/signal.h"
-
-# 7 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../cvs/hash.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-enum ntype
-{
- UNKNOWN, HEADER, ENTRIES, FILES, LIST, RCSNODE,
- RCSVERS, DIRS, UPDATE, LOCK, NDBMNODE
-};
-typedef enum ntype Ntype;
-
-struct node
-{
- Ntype type;
- struct node *next;
- struct node *prev;
- struct node *hashnext;
- struct node *hashprev;
- char *key;
- char *data;
- void (*delproc) ();
-};
-typedef struct node Node;
-
-struct list
-{
- Node *list;
- Node *hasharray[151 ];
- struct list *next;
-};
-typedef struct list List;
-
-struct entnode
-{
- char *version;
- char *timestamp;
- char *options;
- char *tag;
- char *date;
-};
-typedef struct entnode Entnode;
-
-
-List *getlist (void);
-Node *findnode (List * list, char *key);
-Node *getnode (void);
-int addnode (List * list, Node * p);
-int walklist (List * list, int (*proc) ());
-void dellist (List ** listp);
-void delnode (Node * p);
-void freenode (Node * p);
-void sortlist (List * list, int (*comp) ());
-# 77 "/usr/src/gnu/cvs/mkmodules/../cvs/hash.h"
-
-# 8 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../cvs/rcs.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct rcsnode
-{
- int refcount;
- int flags;
- char *path;
- char *head;
- char *branch;
- List *symbols;
- List *versions;
- List *dates;
-};
-typedef struct rcsnode RCSNode;
-
-struct rcsversnode
-{
- char *version;
- char *date;
- char *next;
- List *branches;
-};
-typedef struct rcsversnode RCSVers;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-List *RCS_parsefiles (List * files, char *xrepos);
-RCSNode *RCS_parse (char *file, char *repos);
-RCSNode *RCS_parsercsfile (char *rcsfile);
-char *RCS_check_kflag (char *arg);
-char *RCS_getdate (RCSNode * rcs, char *date, int force_tag_match);
-char *RCS_gettag (RCSNode * rcs, char *tag, int force_tag_match);
-char *RCS_getversion (RCSNode * rcs, char *tag, char *date,
- int force_tag_match);
-char *RCS_magicrev (RCSNode *rcs, char *rev);
-int RCS_isbranch (char *file, char *rev, List *srcfiles);
-char *RCS_whatbranch (char *file, char *tag, List *srcfiles);
-char *RCS_head (RCSNode * rcs);
-int RCS_datecmp (char *date1, char *date2);
-time_t RCS_getrevtime (RCSNode * rcs, char *rev, char *date, int fudge);
-void RCS_check_tag (char *tag);
-void freercsnode (RCSNode ** rnodep);
-# 102 "/usr/src/gnu/cvs/mkmodules/../cvs/rcs.h"
-
-# 9 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../lib/regex.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-typedef unsigned reg_syntax_t;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-extern reg_syntax_t obscure_syntax;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-typedef enum
-{
- REG_NOERROR = 0,
- REG_NOMATCH,
-
-
-
- REG_BADPAT,
- REG_ECOLLATE,
- REG_ECTYPE,
- REG_EESCAPE,
- REG_ESUBREG,
- REG_EBRACK,
- REG_EPAREN,
- REG_EBRACE,
- REG_BADBR,
- REG_ERANGE,
- REG_ESPACE,
- REG_BADRPT,
-
-
- REG_EEND,
- REG_ESIZE,
- REG_ERPAREN
-} reg_errcode_t;
-
-
-
-
-
-
-
-
-
-
-struct re_pattern_buffer
-{
-
-
-
-
- unsigned char *buffer;
-
-
- unsigned long allocated;
-
-
- unsigned long used;
-
-
- reg_syntax_t syntax;
-
-
-
-
- char *fastmap;
-
-
-
-
-
- char *translate;
-
-
- size_t re_nsub;
-
-
-
-
-
-
- unsigned can_be_null : 2;
-
-
-
- unsigned fastmap_accurate : 1;
-
-
-
- unsigned no_sub : 1;
-
-
-
- unsigned not_bol : 1;
-
-
- unsigned not_eol : 1;
-
-
- unsigned newline_anchor : 1;
-
-
-
-
- unsigned caller_allocated_regs : 1;
-
-};
-
-typedef struct re_pattern_buffer regex_t;
-
-
-
-
-
-
-
-
-
-
-
-typedef int regoff_t;
-
-
-
-
-struct re_registers
-{
- unsigned num_regs;
- regoff_t *start;
- regoff_t *end;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-typedef struct
-{
- regoff_t rm_so;
- regoff_t rm_eo;
-} regmatch_t;
-
-
-
-
-
-
-
-
-
-
-extern reg_syntax_t re_set_syntax (reg_syntax_t syntax);
-
-
-
-
-extern const char *re_compile_pattern (const char *pattern, int length,
- struct re_pattern_buffer *buffer);
-
-
-
-
-
-extern int re_compile_fastmap (struct re_pattern_buffer *buffer);
-
-
-
-
-
-
-
-extern int re_search (struct re_pattern_buffer *buffer,
- const char *string, int length,
- int start, int range,
- struct re_registers *regs);
-
-
-
-
-extern int re_search_2 (struct re_pattern_buffer *buffer,
- const char *string1, int length1,
- const char *string2, int length2,
- int start, int range,
- struct re_registers *regs,
- int stop);
-
-
-
-
-extern int re_match (const struct re_pattern_buffer *buffer,
- const char *string, int length,
- int start, struct re_registers *regs);
-
-
-
-extern int re_match_2 (const struct re_pattern_buffer *buffer,
- const char *string1, int length1,
- const char *string2, int length2,
- int start,
- struct re_registers *regs,
- int stop);
-
-
-
-
-
-
-
-
-
-
-
-extern int regcomp (regex_t *preg, const char *pattern, int cflags);
-extern int regexec (const regex_t *preg, const char *string, size_t nmatch,
- regmatch_t pmatch[], int eflags);
-extern size_t regerror (int errcode, const regex_t *preg, char *errbuf,
- size_t errbuf_size);
-extern void regfree (regex_t *preg);
-
-# 468 "/usr/src/gnu/cvs/mkmodules/../lib/regex.h"
-
-
-
-
-
-
-
-
-
-
-
-
-# 10 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../lib/fnmatch.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-extern int fnmatch (const char *pattern, const char *string, int flags);
-
-
-
-
-
-# 11 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../lib/getopt.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-extern char *optarg;
-
-
-
-
-
-
-
-
-
-
-
-
-
-extern int optind;
-
-
-
-
-extern int opterr;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-struct option
-{
- char *name;
- int has_arg;
- int *flag;
- int val;
-};
-
-
-extern const struct option *_getopt_long_options;
-
-
-
-
-
-
-
-extern int _getopt_long_only;
-
-
-
-
-
-extern int option_index;
-
-
-int gnu_getopt (int argc, char **argv, const char *shortopts);
-int gnu_getopt_long (int argc, char **argv, const char *shortopts,
- const struct option *longopts, int *longind);
-int gnu_getopt_long_only (int argc, char **argv, const char *shortopts,
- const struct option *longopts, int *longind);
-
-
-
-
-
-# 12 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../lib/wait.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 13 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../cvs/config.h" 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-extern void exit ();
-
-
-
-extern char *getwd ();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 14 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-
-# 1 "/usr/src/gnu/cvs/mkmodules/../cvs/myndbm.h" 1
-
-
-
-
-
-
-typedef struct
-{
- List *dbm_list;
- Node *dbm_next;
-} DBM;
-
-typedef struct
-{
- char *dptr;
- int dsize;
-} datum;
-
-
-
-
-
-
-
-
-
-
-
-
-
-DBM *mydbm_open (char *file, int flags, int mode);
-void mydbm_close (DBM * db);
-datum mydbm_fetch (DBM * db, datum key);
-datum mydbm_firstkey (DBM * db);
-datum mydbm_nextkey (DBM * db);
-
-
-
-
-
-
-
-
-
-# 16 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h" 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-enum mtype
-{
- CHECKOUT, TAG, PATCH
-};
-
-
-
-
-
-
-enum classify_type
-{
- T_UNKNOWN = 1,
- T_CONFLICT,
- T_NEEDS_MERGE,
- T_MODIFIED,
- T_CHECKOUT,
- T_ADDED,
- T_REMOVED,
- T_REMOVE_ENTRY,
- T_UPTODATE,
- T_TITLE
-};
-typedef enum classify_type Ctype;
-
-
-
-
-
-
-
-
-struct vers_ts
-{
- char *vn_user;
-
-
-
-
-
- char *vn_rcs;
-
- char *ts_user;
- char *ts_rcs;
- char *options;
-
- char *tag;
- char *date;
- Entnode *entdata;
- RCSNode *srcfile;
-};
-typedef struct vers_ts Vers_TS;
-
-
-
-
-
-struct stickydirtag
-{
- int aflag;
- char *tag;
- char *date;
- char *options;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-enum direnter_type
-{
- R_PROCESS = 1,
- R_SKIP_FILES,
- R_SKIP_DIRS,
- R_SKIP_ALL
-};
-typedef enum direnter_type Dtype;
-
-extern char *program_name, *command_name;
-extern char *Rcsbin, *Editor, *CVSroot;
-extern char *CurDir;
-extern int really_quiet, quiet;
-extern int use_editor;
-extern int cvswrite;
-
-extern int trace;
-extern int noexec;
-extern int logoff;
-
-
-
-int Reader_Lock (char *xrepository);
-DBM *open_module (void);
-FILE *Fopen (char *name, char *mode);
-FILE *open_file (char *name, char *mode);
-List *Find_Dirs (char *repository, int which);
-List *ParseEntries (int aflag);
-char *Make_Date (char *rawdate);
-char *Name_Repository (char *dir, char *update_dir);
-char *Short_Repository (char *repository);
-char *getcaller (void);
-char *time_stamp (char *file);
-char *xmalloc (int bytes);
-char *xrealloc (char *ptr, int bytes);
-char *xstrdup (char *str);
-int No_Difference (char *file, Vers_TS * vers, List * entries);
-int Parse_Info (char *infofile, char *repository, int (*callproc) (), int all);
-int Reader_Lock (char *xrepository);
-int SIG_register (int sig, void (*fn) ());
-int Writer_Lock (List * list);
-int gethostname (char *name, int namelen);
-int ign_name (char *name);
-int isdir (char *file);
-int isfile (char *file);
-int islink (char *file);
-int isreadable (char *file);
-int iswritable (char *file);
-int link_file (char *from, char *to);
-int numdots (char *s);
-int run_exec (char *stin, char *stout, char *sterr, int flags);
-int unlink_file (char *f);
-int update (int argc, char *argv[]);
-int xcmp (char *file1, char *file2);
-int yesno (void);
-time_t get_date (char *date, struct timeb *now);
-void Create_Admin (char *dir, char *repository, char *tag, char *date);
-void Lock_Cleanup (void);
-void ParseTag (char **tagp, char **datep);
-void Scratch_Entry (List * list, char *fname);
-void WriteTag (char *dir, char *tag, char *date);
-void cat_module (int status);
-void check_entries (char *dir);
-void close_module (DBM * db);
-void copy_file (char *from, char *to);
-void error (int status, int errnum, char *message,...);
-void fperror (FILE * fp, int status, int errnum, char *message,...);
-void free_names (int *pargc, char *argv[]);
-void freevers_ts (Vers_TS ** versp);
-void ign_add (char *ign, int hold);
-void ign_add_file (char *file, int hold);
-void ign_setup (void);
-void line2argv (int *pargc, char *argv[], char *line);
-void make_directories (char *name);
-void make_directory (char *name);
-void rename_file (char *from, char *to);
-void run_arg (char *s);
-void run_args (char *fmt,...);
-void run_print (FILE * fp);
-void run_setup (char *fmt,...);
-void strip_path (char *path);
-void update_delproc (Node * p);
-void usage (char **cpp);
-void xchmod (char *fname, int writable);
-int Checkin (int type, char *file, char *repository, char *rcs, char *rev,
- char *tag, char *message, List * entries);
-Ctype Classify_File (char *file, char *tag, char *date, char *options,
- int force_tag_match, int aflag, char *repository,
- List *entries, List *srcfiles, Vers_TS **versp);
-List *Find_Names (char *repository, int which, int aflag,
- List ** optentries);
-void Register (List * list, char *fname, char *vn, char *ts,
- char *options, char *tag, char *date);
-void Update_Logfile (char *repository, char *xmessage, char *xrevision,
- FILE * xlogfp, List * xchanges);
-Vers_TS *Version_TS (char *repository, char *options, char *tag,
- char *date, char *user, int force_tag_match,
- int set_time, List * entries, List * xfiles);
-void do_editor (char *dir, char *message, char *repository,
- List * changes);
-int do_module (DBM * db, char *mname, enum mtype m_type, char *msg,
- int (*callback_proc) (), char *where, int shorten,
- int local_specified, int run_module_prog, char *extra_arg);
-int do_recursion (int (*xfileproc) (), int (*xfilesdoneproc) (),
- Dtype (*xdirentproc) (), int (*xdirleaveproc) (),
- Dtype xflags, int xwhich, int xaflag, int xreadlock,
- int xdosrcs);
-int do_update (int argc, char *argv[], char *xoptions, char *xtag,
- char *xdate, int xforce, int local, int xbuild,
- int xaflag, int xprune, int xpipeout, int which,
- char *xjoin_rev1, char *xjoin_rev2, char *preload_update_dir);
-void history_write (int type, char *update_dir, char *revs, char *name,
- char *repository);
-int start_recursion (int (*fileproc) (), int (*filesdoneproc) (),
- Dtype (*direntproc) (), int (*dirleaveproc) (),
- int argc, char *argv[], int local, int which,
- int aflag, int readlock, char *update_preload,
- int dosrcs);
-void SIG_beginCrSect ();
-void SIG_endCrSect ();
-# 438 "/usr/src/gnu/cvs/mkmodules/../cvs/cvs.h"
-
-# 15 "/usr/src/gnu/cvs/mkmodules/mkmodules.c" 2
-
-
-
-
-
-
-PATH_MAX +2
-
-
-static char rcsid[] = "@(#)mkmodules.c 1.39 92/03/31";
-
-
-
-
-
-
-char *program_name, *command_name;
-
-char *Rcsbin = "" ;
-int noexec = 0;
-int trace = 0;
-
-
-static int checkout_file (char *file, char *temp);
-static void make_tempfile (char *temp);
-static void mkmodules_usage (void);
-static void rename_rcsfile (char *temp, char *real);
-
-
-
-
-
-
-# 60 "/usr/src/gnu/cvs/mkmodules/mkmodules.c"
-
-
-int
-main (argc, argv)
- int argc;
- char *argv[];
-{
- extern char *getenv ();
- char temp[PATH_MAX +2 ];
- char *cp;
-
- DBM *db;
-
-
-
-
-
- if ((program_name = rindex (argv[0], '/')) == 0 )
- program_name = argv[0];
- else
- program_name++;
-
- if (argc != 2)
- mkmodules_usage ();
-
- if ((cp = getenv ("RCSBIN" )) != 0 )
- Rcsbin = cp;
-
-
-
-
-
- if (Rcsbin[0] != '\0')
- {
- int len = strlen (Rcsbin);
- char *rcsbin;
-
- if (Rcsbin[len - 1] != '/')
- {
- rcsbin = Rcsbin;
- Rcsbin = xmalloc (len + 2);
- (void) strcpy (Rcsbin, rcsbin);
- (void) strcat (Rcsbin, "/");
- }
- }
-
- if (chdir (argv[1]) < 0)
- error (1, errno, "cannot chdir to %s", argv[1]);
-
-
-
-
- make_tempfile (temp);
- switch (checkout_file ("modules" , temp))
- {
-
- case 0:
-
-
- if ((db = mydbm_open (temp, 0x0000 , 0666)) != 0 )
- mydbm_close (db);
-
-
-
-
- rename_rcsfile (temp, "modules" );
- break;
-
- case -1:
- (void) unlink_file (temp);
- exit (1);
-
-
- default:
- error (0, 0,
- "'cvs checkout' is less functional without a %s file",
- "modules" );
- break;
- }
-
- (void) unlink_file (temp);
-
-
-
-
-
- make_tempfile (temp);
- if (checkout_file ("loginfo" , temp) == 0)
- rename_rcsfile (temp, "loginfo" );
- else
- error (0, 0,
- "no logging of 'cvs commit' messages is done without a %s file",
- "loginfo" );
- (void) unlink_file (temp);
-
-
-
-
-
- make_tempfile (temp);
- if (checkout_file ("rcsinfo" , temp) == 0)
- rename_rcsfile (temp, "rcsinfo" );
- else
- error (0, 0,
- "a %s file can be used to configure 'cvs commit' templates",
- "rcsinfo" );
- (void) unlink_file (temp);
-
-
-
-
-
- make_tempfile (temp);
- if (checkout_file ("editinfo" , temp) == 0)
- rename_rcsfile (temp, "editinfo" );
- else
- error (0, 0,
- "a %s file can be used to validate log messages",
- "editinfo" );
- (void) unlink_file (temp);
-
-
-
-
-
- make_tempfile (temp);
- if (checkout_file ("commitinfo" , temp) == 0)
- rename_rcsfile (temp, "commitinfo" );
- else
- error (0, 0,
- "a %s file can be used to configure 'cvs commit' checking",
- "commitinfo" );
- (void) unlink_file (temp);
- return (0);
-}
-
-
-
-
-static void
-make_tempfile (temp)
- char *temp;
-{
- static int seed = 0;
- int fd;
-
- if (seed == 0)
- seed = getpid ();
- while (1)
- {
- (void) sprintf (temp, "%s%d", ".#" , seed++);
- if ((fd = open (temp, 0x0200 | 0x0800 | 0x0002 , 0666)) != -1)
- break;
- if (errno != 17 )
- error (1, errno, "cannot create temporary file %s", temp);
- }
- if (close(fd) < 0)
- error(1, errno, "cannot close temporary file %s", temp);
-}
-
-static int
-checkout_file (file, temp)
- char *file;
- char *temp;
-{
- char rcs[PATH_MAX +2 ];
- int retcode = 0;
-
- (void) sprintf (rcs, "%s%s", file, ",v" );
- if (!isfile (rcs))
- return (1);
- run_setup ("%s%s -q -p", Rcsbin, "co" );
- run_arg (rcs);
- if ((retcode = run_exec ( (char *)0 , temp, (char *)0 , 0x0000 )) != 0)
- {
- error (0, retcode == -1 ? errno : 0, "failed to check out %s file", file);
- }
- return (retcode);
-}
-
-# 369 "/usr/src/gnu/cvs/mkmodules/mkmodules.c"
-
-
-static void
-rename_rcsfile (temp, real)
- char *temp;
- char *real;
-{
- char bak[50];
-
- if (chmod (temp, 0444) < 0)
- error (0, errno, "warning: cannot chmod %s", temp);
- (void) sprintf (bak, "%s%s", ".#" , real);
- (void) unlink_file (bak);
- (void) rename (real, bak);
- (void) rename (temp, real);
-}
-
-
-
-
-void
-Lock_Cleanup ()
-{
-}
-
-static void
-mkmodules_usage ()
-{
- (void) fprintf ((&__sF[2]) , "Usage: %s modules-directory\n", program_name);
- exit (1);
-}
diff --git a/gnu/usr.bin/dc/dc.info b/gnu/usr.bin/dc/dc.info
deleted file mode 100644
index a30fea9..0000000
--- a/gnu/usr.bin/dc/dc.info
+++ /dev/null
@@ -1,330 +0,0 @@
-This is Info file dc.info, produced by Makeinfo-1.52 from the input
-file dc.texinfo.
-
- This file documents DC, an arbitrary precision calculator.
-
- Published by the Free Software Foundation, 675 Massachusetts Avenue,
-Cambridge, MA 02139 USA
-
- Copyright (C) 1984 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 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: dc.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
-
-* Menu:
-
-* Introduction:: Introduction
-* Printing Commands:: Printing Commands
-* Arithmetic:: Arithmetic
-* Stack Control:: Stack Control
-* Registers:: Registers
-* Parameters:: Parameters
-* Strings:: Strings
-* Status Inquiry:: Status Inquiry
-* Notes:: Notes
-
-
-File: dc.info, Node: Introduction, Next: Printing Commands, Prev: Top, Up: Top
-
-Introduction
-************
-
- DC is a reverse-polish desk calculator which supports unlimited
-precision arithmetic. It also allows you to define and call macros.
-Normally DC reads from the standard input; if any command arguments are
-given to it, they are filenames, and DC reads and executes the contents
-of the files before reading from standard input. All output is to
-standard output.
-
- To exit, use `q'. `C-c' does not exit; it is used to abort macros
-that are looping, etc. (Currently this is not true; `C-c' does exit.)
-
- A reverse-polish calculator stores numbers on a stack. Entering a
-number pushes it on the stack. Arithmetic operations pop arguments off
-the stack and push the results.
-
- To enter a number in DC, type the digits, with an optional decimal
-point. Exponential notation is not supported. To enter a negative
-number, begin the number with `_'. `-' cannot be used for this, as it
-is a binary operator for subtraction instead. To enter two numbers in
-succession, separate them with spaces or newlines. These have no
-meaning as commands.
-
-
-File: dc.info, Node: Printing Commands, Next: Arithmetic, Prev: Introduction, Up: Top
-
-Printing Commands
-*****************
-
-`p'
- Prints the value on the top of the stack, without altering the
- stack. A newline is printed after the value.
-
-`P'
- Prints the value on the top of the stack, popping it off, and does
- not print a newline after.
-
-`f'
- Prints the entire contents of the stack and the contents of all of
- the registers, without altering anything. This is a good command
- to use if you are lost or want to figure out what the effect of
- some command has been.
-
-
-File: dc.info, Node: Arithmetic, Next: Stack Control, Prev: Printing Commands, Up: Top
-
-Arithmetic
-**********
-
-`+'
- Pops two values off the stack, adds them, and pushes the result.
- The precision of the result is determined only by the values of
- the arguments, and is enough to be exact.
-
-`-'
- Pops two values, subtracts the first one popped from the second
- one popped, and pushes the result.
-
-`*'
- Pops two values, multiplies them, and pushes the result. The
- number of fraction digits in the result is controlled by the
- current precision flag (see below) and does not depend on the
- values being multiplied.
-
-`/'
- Pops two values, divides the second one popped from the first one
- popped, and pushes the result. The number of fraction digits is
- specified by the precision flag.
-
-`%'
- Pops two values, computes the remainder of the division that the
- `/' command would do, and pushes that. The division is done with
- as many fraction digits as the precision flag specifies, and the
- remainder is also computed with that many fraction digits.
-
-`^'
- Pops two values and exponentiates, using the first value popped as
- the exponent and the second popped as the base. The fraction part
- of the exponent is ignored. The precision flag specifies the
- number of fraction digits in the result.
-
-`v'
- Pops one value, computes its square root, and pushes that. The
- precision flag specifies the number of fraction digits in the
- result.
-
- Most arithmetic operations are affected by the "precision flag",
-which you can set with the `k' command. The default precision value is
-zero, which means that all arithmetic except for addition and
-subtraction produces integer results.
-
- The remainder operation (`%') requires some explanation: applied to
-arguments `a' and `b' it produces `a - (b * (a / b))', where `a / b' is
-computed in the current precision.
-
-
-File: dc.info, Node: Stack Control, Next: Registers, Prev: Arithmetic, Up: Top
-
-Stack Control
-*************
-
-`c'
- Clears the stack, rendering it empty.
-
-`d'
- Duplicates the value on the top of the stack, pushing another copy
- of it. Thus, `4d*p' computes 4 squared and prints it.
-
-
-File: dc.info, Node: Registers, Next: Parameters, Prev: Stack Control, Up: Top
-
-Registers
-*********
-
- DC provides 128 memory registers, each named by a single ASCII
-character. You can store a number in a register and retrieve it later.
-
-`sR'
- Pop the value off the top of the stack and store it into register
- R.
-
-`lR'
- Copy the value in register R, and push it onto the stack. This
- does not alter the contents of R.
-
- Each register also contains its own stack. The current register
- value is the top of the register's stack.
-
-`SR'
- Pop the value off the top of the (main) stack and push it onto the
- stack of register R. The previous value of the register becomes
- inaccessible.
-
-`LR'
- Pop the value off the top of register R's stack and push it onto
- the main stack. The previous value in register R's stack, if any,
- is now accessible via the `lR' command.
-
- The `f' command prints a list of all registers that have contents
-stored in them, together with their contents. Only the current
-contents of each register (the top of its stack) is printed.
-
-
-File: dc.info, Node: Parameters, Next: Strings, Prev: Registers, Up: Top
-
-Parameters
-**********
-
- DC has three parameters that control its operation: the precision,
-the input radix, and the output radix. The precision specifies the
-number of fraction digits to keep in the result of most arithmetic
-operations. The input radix controls the interpretation of numbers
-typed in; *all* numbers typed in use this radix. The output radix is
-used for printing numbers.
-
- The input and output radices are separate parameters; you can make
-them unequal, which can be useful or confusing. Each radix must be
-between 2 and 36 inclusive. The precision must be zero or greater.
-The precision is always measured in decimal digits, regardless of the
-current input or output radix.
-
-`i'
- Pops the value off the top of the stack and uses it to set the
- input radix.
-
-`o'
-`k'
- Similarly set the output radix and the precision.
-
-`I'
- Pushes the current input radix on the stack.
-
-`O'
-`K'
- Similarly push the current output radix and the current precision.
-
-
-File: dc.info, Node: Strings, Next: Status Inquiry, Prev: Parameters, Up: Top
-
-Strings
-*******
-
- DC can operate on strings as well as on numbers. The only things you
-can do with strings are print them and execute them as macros (which
-means that the contents of the string are processed as DC commands).
-Both registers and the stack can hold strings, and DC always knows
-whether any given object is a string or a number. Some commands such as
-arithmetic operations demand numbers as arguments and print errors if
-given strings. Other commands can accept either a number or a string;
-for example, the `p' command can accept either and prints the object
-according to its type.
-
-`[CHARACTERS]'
- Makes a string containing CHARACTERS and pushes it on the stack.
- For example, `[foo]P' prints the characters `foo' (with no
- newline).
-
-`x'
- Pops a value off the stack and executes it as a macro. Normally
- it should be a string; if it is a number, it is simply pushed back
- onto the stack. For example, `[1p]x' executes the macro `1p',
- which pushes 1 on the stack and prints `1' on a separate line.
-
- Macros are most often stored in registers; `[1p]sa' stores a macro
- to print `1' into register `a', and `lax' invokes the macro.
-
-`>R'
- Pops two values off the stack and compares them assuming they are
- numbers, executing the contents of register R as a macro if the
- original top-of-stack is greater. Thus, `1 2>a' will invoke
- register `a''s contents and `2 1>a' will not.
-
-`<R'
- Similar but invokes the macro if the original top-of-stack is less.
-
-`=R'
- Similar but invokes the macro if the two numbers popped are equal.
- This can also be validly used to compare two strings for equality.
-
-`?'
- Reads a line from the terminal and executes it. This command
- allows a macro to request input from the user.
-
-`q'
- During the execution of a macro, this comand does not exit DC.
- Instead, it exits from that macro and also from the macro which
- invoked it (if any).
-
-`Q'
- Pops a value off the stack and uses it as a count of levels of
- macro execution to be exited. Thus, `3Q' exits three levels.
-
-
-File: dc.info, Node: Status Inquiry, Next: Notes, Prev: Strings, Up: Top
-
-Status Inquiry
-**************
-
-`Z'
- Pops a value off the stack, calculates the number of digits it has
- (or number of characters, if it is a string) and pushes that
- number.
-
-`X'
- Pops a value off the stack, calculates the number of fraction
- digits it has, and pushes that number. For a string, the value
- pushed is -1.
-
-`z'
- Pushes the current stack depth; the number of objects on the stack
- before the execution of the `z' command.
-
-`I'
- Pushes the current value of the input radix.
-
-`O'
- Pushes the current value of the output radix.
-
-`K'
- Pushes the current value of the precision.
-
-
-File: dc.info, Node: Notes, Prev: Status Inquiry, Up: Top
-
-Notes
-*****
-
- The `:' and `;' commands of the Unix DC program are not supported,
-as the documentation does not say what they do. The `!' command is not
-supported, but will be supported as soon as a library for executing a
-line as a command exists.
-
-
-
-Tag Table:
-Node: Top960
-Node: Introduction1440
-Node: Printing Commands2603
-Node: Arithmetic3211
-Node: Stack Control5168
-Node: Registers5468
-Node: Parameters6586
-Node: Strings7659
-Node: Status Inquiry9857
-Node: Notes10571
-
-End Tag Table
diff --git a/gnu/usr.bin/dc/dc.texinfo b/gnu/usr.bin/dc/dc.texinfo
deleted file mode 100644
index 15b285f..0000000
--- a/gnu/usr.bin/dc/dc.texinfo
+++ /dev/null
@@ -1,381 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header
-@setfilename dc.info
-@settitle DC, An Arbitrary Precision Calculator
-@c %**end of header
-
-@c This file has the new style title page commands.
-@c Run `makeinfo' rather than `texinfo-format-buffer'.
-
-@c smallbook
-
-@c tex
-@c \overfullrule=0pt
-@c end tex
-
-@c Combine indices.
-@synindex cp fn
-@syncodeindex vr fn
-@syncodeindex ky fn
-@syncodeindex pg fn
-@syncodeindex tp fn
-
-@ifinfo
-This file documents DC, an arbitrary precision calculator.
-
-Published by the Free Software Foundation,
-675 Massachusetts Avenue,
-Cambridge, MA 02139 USA
-
-Copyright (C) 1984 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.
-
-@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
-
-@setchapternewpage odd
-
-@titlepage
-@title DC, An Arbitrary Precision Calculator
-
-@author by Richard Stallman
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1984 Free Software Foundation, Inc.
-
-@sp 2
-Published by the Free Software Foundation, @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-
-@end titlepage
-@page
-
-@node Top, Introduction, (dir), (dir)
-
-@menu
-* Introduction:: Introduction
-* Printing Commands:: Printing Commands
-* Arithmetic:: Arithmetic
-* Stack Control:: Stack Control
-* Registers:: Registers
-* Parameters:: Parameters
-* Strings:: Strings
-* Status Inquiry:: Status Inquiry
-* Notes:: Notes
-@end menu
-
-@node Introduction, Printing Commands, Top, Top
-@comment node-name, next, previous, up
-@chapter Introduction
-
-DC is a reverse-polish desk calculator which supports unlimited
-precision arithmetic. It also allows you to define and call macros.
-Normally DC reads from the standard input; if any command arguments
-are given to it, they are filenames, and DC reads and executes the
-contents of the files before reading from standard input. All output
-is to standard output.
-
-To exit, use @samp{q}. @kbd{C-c} does not exit; it is used to abort
-macros that are looping, etc. (Currently this is not true; @kbd{C-c}
-does exit.)
-
-A reverse-polish calculator stores numbers on a stack. Entering a
-number pushes it on the stack. Arithmetic operations pop arguments off
-the stack and push the results.
-
-To enter a number in DC, type the digits, with an optional decimal
-point. Exponential notation is not supported. To enter a negative
-number, begin the number with @samp{_}. @samp{-} cannot be used for
-this, as it is a binary operator for subtraction instead.
-To enter two numbers in succession, separate them with spaces or
-newlines. These have no meaning as commands.
-
-@node Printing Commands, Arithmetic, Introduction, Top
-@chapter Printing Commands
-
-@table @samp
-@item p
-Prints the value on the top of the stack,
-without altering the stack. A newline is printed
-after the value.
-
-@item P
-Prints the value on the top of the stack,
-popping it off, and does not print a newline after.
-
-@item f
-Prints the entire contents of the stack
-and the contents of all of the registers,
-without altering anything. This is a good command
-to use if you are lost or want to figure out
-what the effect of some command has been.
-@end table
-
-@node Arithmetic, Stack Control, Printing Commands, Top
-@chapter Arithmetic
-
-@table @samp
-@item +
-Pops two values off the stack, adds them,
-and pushes the result. The precision of the result
-is determined only by the values of the arguments,
-and is enough to be exact.
-
-@item -
-Pops two values, subtracts the first one popped
-from the second one popped, and pushes the result.
-
-@item *
-Pops two values, multiplies them, and pushes the result.
-The number of fraction digits in the result is controlled
-by the current precision flag (see below) and does not
-depend on the values being multiplied.
-
-@item /
-Pops two values, divides the second one popped from
-the first one popped, and pushes the result.
-The number of fraction digits is specified by the precision flag.
-
-@item %
-Pops two values, computes the remainder of the division
-that the @samp{/} command would do, and pushes that.
-The division is done with as many fraction digits
-as the precision flag specifies, and the remainder
-is also computed with that many fraction digits.
-
-@item ^
-Pops two values and exponentiates, using the first
-value popped as the exponent and the second popped as the base.
-The fraction part of the exponent is ignored.
-The precision flag specifies the number of fraction
-digits in the result.
-
-@item v
-Pops one value, computes its square root, and pushes that.
-The precision flag specifies the number of fraction digits
-in the result.
-@end table
-
-Most arithmetic operations are affected by the "precision flag",
-which you can set with the @samp{k} command. The default precision
-value is zero, which means that all arithmetic except for
-addition and subtraction produces integer results.
-
-The remainder operation (@samp{%}) requires some explanation: applied to
-arguments @samp{a} and @samp{b} it produces @samp{a - (b * (a / b))},
-where @samp{a / b} is computed in the current precision.
-
-@node Stack Control, Registers, Arithmetic, Top
-@chapter Stack Control
-
-@table @samp
-@item c
-Clears the stack, rendering it empty.
-
-@item d
-Duplicates the value on the top of the stack,
-pushing another copy of it. Thus,
-`4d*p' computes 4 squared and prints it.
-@end table
-
-@node Registers, Parameters, Stack Control, Top
-@chapter Registers
-
-DC provides 128 memory registers, each named by a single
-ASCII character. You can store a number in a register
-and retrieve it later.
-
-@table @samp
-@item s@var{r}
-Pop the value off the top of the stack and store
-it into register @var{r}.
-
-@item l@var{r}
-Copy the value in register @var{r}, and push it onto
-the stack. This does not alter the contents of @var{r}.
-
-Each register also contains its own stack. The current
-register value is the top of the register's stack.
-
-@item S@var{r}
-Pop the value off the top of the (main) stack and
-push it onto the stack of register @var{r}.
-The previous value of the register becomes inaccessible.
-
-@item L@var{r}
-Pop the value off the top of register @var{r}'s stack
-and push it onto the main stack. The previous value
-in register @var{r}'s stack, if any, is now accessible
-via the `l@var{r}' command.
-@end table
-
-The @samp{f} command prints a list of all registers that have contents
-stored in them, together with their contents. Only the
-current contents of each register (the top of its stack)
-is printed.
-
-@node Parameters, Strings, Registers, Top
-@chapter Parameters
-
-DC has three parameters that control its operation: the precision, the
-input radix, and the output radix. The precision specifies the number
-of fraction digits to keep in the result of most arithmetic operations.
-The input radix controls the interpretation of numbers typed in;
-@emph{all} numbers typed in use this radix. The output radix is used
-for printing numbers.
-
-The input and output radices are separate parameters; you can make them
-unequal, which can be useful or confusing. Each radix must be between 2
-and 36 inclusive. The precision must be zero or greater. The precision
-is always measured in decimal digits, regardless of the current input or
-output radix.
-
-@table @samp
-@item i
-Pops the value off the top of the stack
-and uses it to set the input radix.
-
-@item o
-@itemx k
-Similarly set the output radix and the precision.
-
-@item I
-Pushes the current input radix on the stack.
-
-@item O
-@itemx K
-Similarly push the current output radix and the current precision.
-@end table
-
-@node Strings, Status Inquiry, Parameters, Top
-@chapter Strings
-
-DC can operate on strings as well as on numbers. The only things you
-can do with strings are print them and execute them as macros (which
-means that the contents of the string are processed as DC commands).
-Both registers and the stack can hold strings, and DC always knows
-whether any given object is a string or a number. Some commands such as
-arithmetic operations demand numbers as arguments and print errors if
-given strings. Other commands can accept either a number or a string;
-for example, the @samp{p} command can accept either and prints the object
-according to its type.
-
-@table @samp
-@item [@var{characters}]
-Makes a string containing @var{characters} and pushes it
-on the stack. For example, @samp{[foo]P} prints the
-characters @samp{foo} (with no newline).
-
-@item x
-Pops a value off the stack and executes it as a macro.
-Normally it should be a string; if it is a number,
-it is simply pushed back onto the stack.
-For example, @samp{[1p]x} executes the macro @samp{1p}, which
-pushes 1 on the stack and prints @samp{1} on a separate line.
-
-Macros are most often stored in registers;
-@samp{[1p]sa} stores a macro to print @samp{1} into register @samp{a},
-and @samp{lax} invokes the macro.
-
-@item >@var{r}
-Pops two values off the stack and compares them
-assuming they are numbers, executing the contents
-of register @var{r} as a macro if the original top-of-stack
-is greater. Thus, @samp{1 2>a} will invoke register @samp{a}'s contents
-and @samp{2 1>a} will not.
-
-@item <@var{r}
-Similar but invokes the macro if the original top-of-stack
-is less.
-
-@item =@var{r}
-Similar but invokes the macro if the two numbers popped
-are equal. This can also be validly used to compare two
-strings for equality.
-
-@item ?
-Reads a line from the terminal and executes it.
-This command allows a macro to request input from the user.
-
-@item q
-During the execution of a macro, this comand
-does not exit DC. Instead, it exits from that
-macro and also from the macro which invoked it (if any).
-
-@item Q
-Pops a value off the stack and uses it as a count
-of levels of macro execution to be exited. Thus,
-@samp{3Q} exits three levels.
-@end table
-
-@node Status Inquiry, Notes, Strings, Top
-@chapter Status Inquiry
-
-@table @samp
-@item Z
-Pops a value off the stack, calculates the number of
-digits it has (or number of characters, if it is a string)
-and pushes that number.
-
-@item X
-Pops a value off the stack, calculates the number of
-fraction digits it has, and pushes that number.
-For a string, the value pushed is -1.
-
-@item z
-Pushes the current stack depth; the number of
-objects on the stack before the execution of the @samp{z} command.
-
-@item I
-Pushes the current value of the input radix.
-
-@item O
-Pushes the current value of the output radix.
-
-@item K
-Pushes the current value of the precision.
-@end table
-
-@node Notes, , Status Inquiry, Top
-@chapter Notes
-
-The @samp{:} and @samp{;} commands of the Unix DC program are
-not supported, as the documentation does not say what they do.
-The @samp{!} command is not supported, but will be supported
-as soon as a library for executing a line as a command exists.
-
-@contents
-@bye
diff --git a/gnu/usr.bin/dialog/checklist.c b/gnu/usr.bin/dialog/checklist.c
deleted file mode 100644
index f522ae1..0000000
--- a/gnu/usr.bin/dialog/checklist.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * checklist.c -- implements the checklist box
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include "dialog.h"
-
-
-static void print_item(WINDOW *win, unsigned char *tag, unsigned char *item, int status, int choice, int selected);
-
-
-static int list_width, check_x, item_x;
-
-
-/*
- * Display a dialog box with a list of options that can be turned on or off
- */
-int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, int width, int list_height, int item_no, unsigned char **items)
-{
- int i, x, y, cur_x, cur_y, box_x, box_y, key = 0, button = 0, choice = 0,
- scroll = 0, max_choice, *status;
- WINDOW *dialog, *list;
-
- /* Allocate space for storing item on/off status */
- if ((status = malloc(sizeof(int)*item_no)) == NULL) {
- endwin();
- fprintf(stderr, "\nCan't allocate memory in dialog_checklist().\n");
- exit(-1);
- }
- /* Initializes status */
- for (i = 0; i < item_no; i++)
- status[i] = !strcasecmp(items[i*3 + 2], "on");
-
- max_choice = MIN(list_height, item_no);
-
- /* center dialog box on screen */
- x = (COLS - width)/2;
- y = (LINES - height)/2;
-
-#ifdef HAVE_NCURSES
- if (use_shadow)
- draw_shadow(stdscr, y, x, height, width);
-#endif
- dialog = newwin(height, width, y, x);
- keypad(dialog, TRUE);
-
- draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset(dialog, border_attr);
- wmove(dialog, height-3, 0);
- waddch(dialog, ACS_LTEE);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ACS_HLINE);
- wattrset(dialog, dialog_attr);
- waddch(dialog, ACS_RTEE);
- wmove(dialog, height-2, 1);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ' ');
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- wmove(dialog, 0, (width - strlen(title))/2 - 1);
- waddch(dialog, ' ');
- waddstr(dialog, title);
- waddch(dialog, ' ');
- }
- wattrset(dialog, dialog_attr);
- print_autowrap(dialog, prompt, width, 1, 3);
-
- list_width = width-6;
- getyx(dialog, cur_y, cur_x);
- box_y = cur_y + 1;
- box_x = (width - list_width)/2 - 1;
-
- /* create new window for the list */
- list = subwin(dialog, list_height, list_width, y + box_y + 1, x + box_x + 1);
- keypad(list, TRUE);
-
- /* draw a box around the list items */
- draw_box(dialog, box_y, box_x, list_height+2, list_width+2, menubox_border_attr, menubox_attr);
-
- check_x = 0;
- item_x = 0;
- /* Find length of longest item in order to center checklist */
- for (i = 0; i < item_no; i++) {
- check_x = MAX(check_x, strlen(items[i*3]) + strlen(items[i*3 + 1]) + 6);
- item_x = MAX(item_x, strlen(items[i*3]));
- }
- check_x = (list_width - check_x) / 2;
- item_x = check_x + item_x + 6;
-
- /* Print the list */
- for (i = 0; i < max_choice; i++)
- print_item(list, items[i*3], items[i*3 + 1], status[i], i, i == choice);
- wnoutrefresh(list);
-
- if (list_height < item_no) {
- wattrset(dialog, darrow_attr);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 5);
- waddch(dialog, ACS_DARROW);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 6);
- waddstr(dialog, "(+)");
- }
-
- x = width/2-11;
- y = height-2;
- print_button(dialog, "Cancel", y, x+14, FALSE);
- print_button(dialog, " OK ", y, x, TRUE);
- wrefresh(dialog);
-
- while (key != ESC) {
- key = wgetch(dialog);
- /* Check if key pressed matches first character of any item tag in list */
- for (i = 0; i < max_choice; i++)
- if (key < 0x100 && toupper(key) == toupper(items[(scroll+i)*3][0]))
- break;
-
- if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
- key == KEY_UP || key == KEY_DOWN || key == ' ' ||
- key == '+' || key == '-' ) {
- if (key >= '1' && key <= MIN('9', '0'+max_choice))
- i = key - '1';
- else if (key == KEY_UP || key == '-') {
- if (!choice) {
- if (scroll) {
-#ifdef BROKEN_WSCRL
- /* wscrl() in ncurses 1.8.1 seems to be broken, causing a segmentation
- violation when scrolling windows of height = 4, so scrolling is not
- used for now */
- scroll--;
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- /* Reprint list to scroll down */
- for (i = 0; i < max_choice; i++)
- print_item(list, items[(scroll+i)*3], items[(scroll+i)*3 + 1], status[scroll+i], i, i == choice);
-
-#else
-
- /* Scroll list down */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- if (list_height > 1) {
- /* De-highlight current first item before scrolling down */
- print_item(list, items[scroll*3], items[scroll*3 + 1], status[scroll], 0, FALSE);
- scrollok(list, TRUE);
- wscrl(list, -1);
- scrollok(list, FALSE);
- }
- scroll--;
- print_item(list, items[scroll*3], items[scroll*3 + 1], status[scroll], 0, TRUE);
-#endif
- wnoutrefresh(list);
-
- /* print the up/down arrows */
- wmove(dialog, box_y, box_x + check_x + 5);
- wattrset(dialog, scroll ? uarrow_attr : menubox_attr);
- waddch(dialog, scroll ? ACS_UARROW : ACS_HLINE);
- wmove(dialog, box_y, box_x + check_x + 6);
- waddch(dialog, scroll ? '(' : ACS_HLINE);
- wmove(dialog, box_y, box_x + check_x + 7);
- waddch(dialog, scroll ? '-' : ACS_HLINE);
- wmove(dialog, box_y, box_x + check_x + 8);
- waddch(dialog, scroll ? ')' : ACS_HLINE);
- wattrset(dialog, darrow_attr);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 5);
- waddch(dialog, ACS_DARROW);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 6);
- waddch(dialog, '(');
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 7);
- waddch(dialog, '+');
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 8);
- waddch(dialog, ')');
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
- else
- i = choice - 1;
- }
- else if (key == KEY_DOWN || key == '+') {
- if (choice == max_choice - 1) {
- if (scroll+choice < item_no-1) {
-#ifdef BROKEN_WSCRL
- /* wscrl() in ncurses 1.8.1 seems to be broken, causing a segmentation
- violation when scrolling windows of height = 4, so scrolling is not
- used for now */
- scroll++;
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- /* Reprint list to scroll up */
- for (i = 0; i < max_choice; i++)
- print_item(list, items[(scroll+i)*3], items[(scroll+i)*3 + 1], status[scroll+i], i, i == choice);
-
-#else
-
- /* Scroll list up */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- if (list_height > 1) {
- /* De-highlight current last item before scrolling up */
- print_item(list, items[(scroll+max_choice-1)*3], items[(scroll+max_choice-1)*3 + 1], status[scroll+max_choice-1], max_choice-1, FALSE);
- scrollok(list, TRUE);
- scroll(list);
- scrollok(list, FALSE);
- }
- scroll++;
- print_item(list, items[(scroll+max_choice-1)*3], items[(scroll+max_choice-1)*3 + 1], status[scroll+max_choice-1], max_choice-1, TRUE);
-#endif
- wnoutrefresh(list);
-
- /* print the up/down arrows */
- wattrset(dialog, uarrow_attr);
- wmove(dialog, box_y, box_x + check_x + 5);
- waddch(dialog, ACS_UARROW);
- wmove(dialog, box_y, box_x + check_x + 6);
- waddstr(dialog, "(-)");
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 5);
- wattrset(dialog, scroll+choice < item_no-1 ? darrow_attr : menubox_border_attr);
- waddch(dialog, scroll+choice < item_no-1 ? ACS_DARROW : ACS_HLINE);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 6);
- waddch(dialog, scroll+choice < item_no-1 ? '(' : ACS_HLINE);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 7);
- waddch(dialog, scroll+choice < item_no-1 ? '+' : ACS_HLINE);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 8);
- waddch(dialog, scroll+choice < item_no-1 ? ')' : ACS_HLINE);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
- else
- i = choice + 1;
- }
- else if (key == ' ') { /* Toggle item status */
- status[scroll+choice] = !status[scroll+choice];
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- wmove(list, choice, check_x);
- wattrset(list, check_selected_attr);
- wprintw(list, "[%c]", status[scroll+choice] ? 'X' : ' ');
- wnoutrefresh(list);
- wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */
- wrefresh(dialog);
- continue; /* wait for another key press */
- }
-
- if (i != choice) {
- /* De-highlight current item */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- print_item(list, items[(scroll+choice)*3], items[(scroll+choice)*3 + 1], status[scroll+choice], choice, FALSE);
-
- /* Highlight new item */
- choice = i;
- print_item(list, items[(scroll+choice)*3], items[(scroll+choice)*3 + 1], status[scroll+choice], choice, TRUE);
- wnoutrefresh(list);
- wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
-
- switch (key) {
- case 'O':
- case 'o':
- delwin(dialog);
- for (i = 0; i < item_no; i++)
- if (status[i])
- fprintf(stderr, "\"%s\" ", items[i*3]);
- free(status);
- return 0;
- case 'C':
- case 'c':
- delwin(dialog);
- free(status);
- return 1;
- case TAB:
- case KEY_BTAB:
- case KEY_LEFT:
- case KEY_RIGHT:
- if (!button) {
- button = 1; /* Indicates "Cancel" button is selected */
- print_button(dialog, " OK ", y, x, FALSE);
- print_button(dialog, "Cancel", y, x+14, TRUE);
- }
- else {
- button = 0; /* Indicates "OK" button is selected */
- print_button(dialog, "Cancel", y, x+14, FALSE);
- print_button(dialog, " OK ", y, x, TRUE);
- }
- wrefresh(dialog);
- break;
- case ' ':
- case '\n':
- delwin(dialog);
- if (!button)
- for (i = 0; i < item_no; i++)
- if (status[i])
- fprintf(stderr, "\"%s\" ", items[i*3]);
- free(status);
- return button;
- case ESC:
- break;
- }
- }
-
- delwin(dialog);
- free(status);
- return -1; /* ESC pressed */
-}
-/* End of dialog_checklist() */
-
-
-/*
- * Print list item
- */
-static void print_item(WINDOW *win, unsigned char *tag, unsigned char *item, int status, int choice, int selected)
-{
- int i;
-
- /* Clear 'residue' of last item */
- wattrset(win, menubox_attr);
- wmove(win, choice, 0);
- for (i = 0; i < list_width; i++)
- waddch(win, ' ');
- wmove(win, choice, check_x);
- wattrset(win, selected ? check_selected_attr : check_attr);
- wprintw(win, "[%c]", status ? 'X' : ' ');
- wattrset(win, menubox_attr);
- waddch(win, ' ');
- wattrset(win, selected ? tag_key_selected_attr : tag_key_attr);
- waddch(win, tag[0]);
- wattrset(win, selected ? tag_selected_attr : tag_attr);
- waddstr(win, tag + 1);
- wmove(win, choice, item_x);
- wattrset(win, selected ? item_selected_attr : item_attr);
- waddstr(win, item);
-}
-/* End of print_item() */
diff --git a/gnu/usr.bin/dialog/colors.h b/gnu/usr.bin/dialog/colors.h
deleted file mode 100644
index 7cea0a0..0000000
--- a/gnu/usr.bin/dialog/colors.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * colors.h -- color attribute definitions
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-/*
- * Default color definitions
- *
- * *_FG = foreground
- * *_BG = background
- * *_HL = highlight?
- */
-#define SCREEN_FG COLOR_CYAN
-#define SCREEN_BG COLOR_BLUE
-#define SCREEN_HL TRUE
-
-#define SHADOW_FG COLOR_BLACK
-#define SHADOW_BG COLOR_BLACK
-#define SHADOW_HL TRUE
-
-#define DIALOG_FG COLOR_BLACK
-#define DIALOG_BG COLOR_WHITE
-#define DIALOG_HL FALSE
-
-#define TITLE_FG COLOR_YELLOW
-#define TITLE_BG COLOR_WHITE
-#define TITLE_HL TRUE
-
-#define BORDER_FG COLOR_WHITE
-#define BORDER_BG COLOR_WHITE
-#define BORDER_HL TRUE
-
-#define BUTTON_ACTIVE_FG COLOR_WHITE
-#define BUTTON_ACTIVE_BG COLOR_BLUE
-#define BUTTON_ACTIVE_HL TRUE
-
-#define BUTTON_INACTIVE_FG COLOR_BLACK
-#define BUTTON_INACTIVE_BG COLOR_WHITE
-#define BUTTON_INACTIVE_HL FALSE
-
-#define BUTTON_KEY_ACTIVE_FG COLOR_WHITE
-#define BUTTON_KEY_ACTIVE_BG COLOR_BLUE
-#define BUTTON_KEY_ACTIVE_HL TRUE
-
-#define BUTTON_KEY_INACTIVE_FG COLOR_RED
-#define BUTTON_KEY_INACTIVE_BG COLOR_WHITE
-#define BUTTON_KEY_INACTIVE_HL FALSE
-
-#define BUTTON_LABEL_ACTIVE_FG COLOR_YELLOW
-#define BUTTON_LABEL_ACTIVE_BG COLOR_BLUE
-#define BUTTON_LABEL_ACTIVE_HL TRUE
-
-#define BUTTON_LABEL_INACTIVE_FG COLOR_BLACK
-#define BUTTON_LABEL_INACTIVE_BG COLOR_WHITE
-#define BUTTON_LABEL_INACTIVE_HL TRUE
-
-#define INPUTBOX_FG COLOR_BLACK
-#define INPUTBOX_BG COLOR_WHITE
-#define INPUTBOX_HL FALSE
-
-#define INPUTBOX_BORDER_FG COLOR_BLACK
-#define INPUTBOX_BORDER_BG COLOR_WHITE
-#define INPUTBOX_BORDER_HL FALSE
-
-#define SEARCHBOX_FG COLOR_BLACK
-#define SEARCHBOX_BG COLOR_WHITE
-#define SEARCHBOX_HL FALSE
-
-#define SEARCHBOX_TITLE_FG COLOR_YELLOW
-#define SEARCHBOX_TITLE_BG COLOR_WHITE
-#define SEARCHBOX_TITLE_HL TRUE
-
-#define SEARCHBOX_BORDER_FG COLOR_WHITE
-#define SEARCHBOX_BORDER_BG COLOR_WHITE
-#define SEARCHBOX_BORDER_HL TRUE
-
-#define POSITION_INDICATOR_FG COLOR_YELLOW
-#define POSITION_INDICATOR_BG COLOR_WHITE
-#define POSITION_INDICATOR_HL TRUE
-
-#define MENUBOX_FG COLOR_BLACK
-#define MENUBOX_BG COLOR_WHITE
-#define MENUBOX_HL FALSE
-
-#define MENUBOX_BORDER_FG COLOR_WHITE
-#define MENUBOX_BORDER_BG COLOR_WHITE
-#define MENUBOX_BORDER_HL TRUE
-
-#define ITEM_FG COLOR_BLACK
-#define ITEM_BG COLOR_WHITE
-#define ITEM_HL FALSE
-
-#define ITEM_SELECTED_FG COLOR_WHITE
-#define ITEM_SELECTED_BG COLOR_BLUE
-#define ITEM_SELECTED_HL TRUE
-
-#define TAG_FG COLOR_YELLOW
-#define TAG_BG COLOR_WHITE
-#define TAG_HL TRUE
-
-#define TAG_SELECTED_FG COLOR_YELLOW
-#define TAG_SELECTED_BG COLOR_BLUE
-#define TAG_SELECTED_HL TRUE
-
-#define TAG_KEY_FG COLOR_RED
-#define TAG_KEY_BG COLOR_WHITE
-#define TAG_KEY_HL TRUE
-
-#define TAG_KEY_SELECTED_FG COLOR_RED
-#define TAG_KEY_SELECTED_BG COLOR_BLUE
-#define TAG_KEY_SELECTED_HL TRUE
-
-#define CHECK_FG COLOR_BLACK
-#define CHECK_BG COLOR_WHITE
-#define CHECK_HL FALSE
-
-#define CHECK_SELECTED_FG COLOR_WHITE
-#define CHECK_SELECTED_BG COLOR_BLUE
-#define CHECK_SELECTED_HL TRUE
-
-#define UARROW_FG COLOR_GREEN
-#define UARROW_BG COLOR_WHITE
-#define UARROW_HL TRUE
-
-#define DARROW_FG COLOR_GREEN
-#define DARROW_BG COLOR_WHITE
-#define DARROW_HL TRUE
-
-/* End of default color definitions */
-
-#define C_ATTR(x,y) ((x ? A_BOLD : 0) | COLOR_PAIR((y)))
-#define COLOR_NAME_LEN 10
-#define COLOR_COUNT 8
-
-
-/*
- * Global variables
- */
-
-typedef struct {
- unsigned char name[COLOR_NAME_LEN];
- int value;
-} color_names_st;
-
-
-#ifdef __DIALOG_MAIN__
-
-/*
- * For matching color names with color values
- */
-color_names_st color_names[] = {
- {"BLACK", COLOR_BLACK},
- {"RED", COLOR_RED},
- {"GREEN", COLOR_GREEN},
- {"YELLOW", COLOR_YELLOW},
- {"BLUE", COLOR_BLUE},
- {"MAGENTA", COLOR_MAGENTA},
- {"CYAN", COLOR_CYAN},
- {"WHITE", COLOR_WHITE},
-}; /* color names */
-
-
-/*
- * Table of color values
- */
-int color_table[][3] = {
- {SCREEN_FG, SCREEN_BG, SCREEN_HL },
- {SHADOW_FG, SHADOW_BG, SHADOW_HL },
- {DIALOG_FG, DIALOG_BG, DIALOG_HL },
- {TITLE_FG, TITLE_BG, TITLE_HL },
- {BORDER_FG, BORDER_BG, BORDER_HL },
- {BUTTON_ACTIVE_FG, BUTTON_ACTIVE_BG, BUTTON_ACTIVE_HL },
- {BUTTON_INACTIVE_FG, BUTTON_INACTIVE_BG, BUTTON_INACTIVE_HL },
- {BUTTON_KEY_ACTIVE_FG, BUTTON_KEY_ACTIVE_BG, BUTTON_KEY_ACTIVE_HL },
- {BUTTON_KEY_INACTIVE_FG, BUTTON_KEY_INACTIVE_BG, BUTTON_KEY_INACTIVE_HL },
- {BUTTON_LABEL_ACTIVE_FG, BUTTON_LABEL_ACTIVE_BG, BUTTON_LABEL_ACTIVE_HL },
- {BUTTON_LABEL_INACTIVE_FG,BUTTON_LABEL_INACTIVE_BG,BUTTON_LABEL_INACTIVE_HL},
- {INPUTBOX_FG, INPUTBOX_BG, INPUTBOX_HL },
- {INPUTBOX_BORDER_FG, INPUTBOX_BORDER_BG, INPUTBOX_BORDER_HL },
- {SEARCHBOX_FG, SEARCHBOX_BG, SEARCHBOX_HL },
- {SEARCHBOX_TITLE_FG, SEARCHBOX_TITLE_BG, SEARCHBOX_TITLE_HL },
- {SEARCHBOX_BORDER_FG, SEARCHBOX_BORDER_BG, SEARCHBOX_BORDER_HL },
- {POSITION_INDICATOR_FG, POSITION_INDICATOR_BG, POSITION_INDICATOR_HL },
- {MENUBOX_FG, MENUBOX_BG, MENUBOX_HL },
- {MENUBOX_BORDER_FG, MENUBOX_BORDER_BG, MENUBOX_BORDER_HL },
- {ITEM_FG, ITEM_BG, ITEM_HL },
- {ITEM_SELECTED_FG, ITEM_SELECTED_BG, ITEM_SELECTED_HL },
- {TAG_FG, TAG_BG, TAG_HL },
- {TAG_SELECTED_FG, TAG_SELECTED_BG, TAG_SELECTED_HL },
- {TAG_KEY_FG, TAG_KEY_BG, TAG_KEY_HL },
- {TAG_KEY_SELECTED_FG, TAG_KEY_SELECTED_BG, TAG_KEY_SELECTED_HL },
- {CHECK_FG, CHECK_BG, CHECK_HL },
- {CHECK_SELECTED_FG, CHECK_SELECTED_BG, CHECK_SELECTED_HL },
- {UARROW_FG, UARROW_BG, UARROW_HL },
- {DARROW_FG, DARROW_BG, DARROW_HL },
-}; /* color_table */
-
-#else
-
-extern color_names_st color_names[];
-extern int color_table[][3];
-
-#endif /* __DIALOG_MAIN__ */
diff --git a/gnu/usr.bin/dialog/dialog.h b/gnu/usr.bin/dialog/dialog.h
deleted file mode 100644
index 849961f..0000000
--- a/gnu/usr.bin/dialog/dialog.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * dialog.h -- common declarations for all dialog modules
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef HAVE_NCURSES
-#include <ncurses.h>
-
-#else
-
-#ifdef ultrix
-#include <cursesX.h>
-#else
-#include <curses.h>
-#endif
-
-#endif
-
-#if defined(LOCALE)
-#include <locale.h>
-#endif
-
-/*
- * Change these if you want
- */
-#define USE_SHADOW TRUE
-#define USE_COLORS TRUE
-
-#define VERSION "0.4"
-#define ESC 27
-#define TAB 9
-#define MAX_LEN 2048
-#define BUF_SIZE (10*1024)
-#define MIN(x,y) (x < y ? x : y)
-#define MAX(x,y) (x > y ? x : y)
-
-#ifndef HAVE_NCURSES
-#ifndef ACS_ULCORNER
-#define ACS_ULCORNER '+'
-#endif
-#ifndef ACS_LLCORNER
-#define ACS_LLCORNER '+'
-#endif
-#ifndef ACS_URCORNER
-#define ACS_URCORNER '+'
-#endif
-#ifndef ACS_LRCORNER
-#define ACS_LRCORNER '+'
-#endif
-#ifndef ACS_HLINE
-#define ACS_HLINE '-'
-#endif
-#ifndef ACS_VLINE
-#define ACS_VLINE '|'
-#endif
-#ifndef ACS_LTEE
-#define ACS_LTEE '+'
-#endif
-#ifndef ACS_RTEE
-#define ACS_RTEE '+'
-#endif
-#ifndef ACS_UARROW
-#define ACS_UARROW '^'
-#endif
-#ifndef ACS_DARROW
-#define ACS_DARROW 'v'
-#endif
-#endif /* HAVE_NCURSES */
-
-
-/*
- * Attribute names
- */
-#define screen_attr attributes[0]
-#define shadow_attr attributes[1]
-#define dialog_attr attributes[2]
-#define title_attr attributes[3]
-#define border_attr attributes[4]
-#define button_active_attr attributes[5]
-#define button_inactive_attr attributes[6]
-#define button_key_active_attr attributes[7]
-#define button_key_inactive_attr attributes[8]
-#define button_label_active_attr attributes[9]
-#define button_label_inactive_attr attributes[10]
-#define inputbox_attr attributes[11]
-#define inputbox_border_attr attributes[12]
-#define searchbox_attr attributes[13]
-#define searchbox_title_attr attributes[14]
-#define searchbox_border_attr attributes[15]
-#define position_indicator_attr attributes[16]
-#define menubox_attr attributes[17]
-#define menubox_border_attr attributes[18]
-#define item_attr attributes[19]
-#define item_selected_attr attributes[20]
-#define tag_attr attributes[21]
-#define tag_selected_attr attributes[22]
-#define tag_key_attr attributes[23]
-#define tag_key_selected_attr attributes[24]
-#define check_attr attributes[25]
-#define check_selected_attr attributes[26]
-#define uarrow_attr attributes[27]
-#define darrow_attr attributes[28]
-
-/* number of attributes */
-#define ATTRIBUTE_COUNT 29
-
-
-/*
- * Global variables
- */
-#ifdef __DIALOG_MAIN__
-
-#ifdef HAVE_NCURSES
-
-/* use colors by default? */
-bool use_colors = USE_COLORS;
-
-/* shadow dialog boxes by default?
- Note that 'use_shadow' implies 'use_colors' */
-bool use_shadow = USE_SHADOW;
-
-#endif
-
-
-/*
- * Attribute values, default is for mono display
- */
-chtype attributes[] = {
- A_NORMAL, /* screen_attr */
- A_NORMAL, /* shadow_attr */
- A_REVERSE, /* dialog_attr */
- A_REVERSE, /* title_attr */
- A_REVERSE, /* border_attr */
- A_BOLD, /* button_active_attr */
- A_DIM, /* button_inactive_attr */
- A_UNDERLINE, /* button_key_active_attr */
- A_UNDERLINE, /* button_key_inactive_attr */
- A_NORMAL, /* button_label_active_attr */
- A_NORMAL, /* button_label_inactive_attr */
- A_REVERSE, /* inputbox_attr */
- A_REVERSE, /* inputbox_border_attr */
- A_REVERSE, /* searchbox_attr */
- A_REVERSE, /* searchbox_title_attr */
- A_REVERSE, /* searchbox_border_attr */
- A_REVERSE, /* position_indicator_attr */
- A_REVERSE, /* menubox_attr */
- A_REVERSE, /* menubox_border_attr */
- A_REVERSE, /* item_attr */
- A_NORMAL, /* item_selected_attr */
- A_REVERSE, /* tag_attr */
- A_REVERSE, /* tag_selected_attr */
- A_NORMAL, /* tag_key_attr */
- A_BOLD, /* tag_key_selected_attr */
- A_REVERSE, /* check_attr */
- A_REVERSE, /* check_selected_attr */
- A_REVERSE, /* uarrow_attr */
- A_REVERSE /* darrow_attr */
-};
-
-#else
-
-#ifdef HAVE_NCURSES
-extern bool use_colors;
-extern bool use_shadow;
-#endif
-
-extern chtype attributes[];
-
-#endif /* __DIALOG_MAIN__ */
-
-
-
-#ifdef HAVE_NCURSES
-
-/*
- * Function prototypes
- */
-#ifdef __DIALOG_MAIN__
-
-extern void create_rc(unsigned char *filename);
-extern int parse_rc(void);
-
-#endif /* __DIALOG_MAIN__ */
-
-#endif
-
-
-void Usage(unsigned char *name);
-void init_dialog(void);
-#ifdef HAVE_NCURSES
-void color_setup(void);
-#endif
-void attr_clear(WINDOW *win, int height, int width, chtype attr);
-void print_autowrap(WINDOW *win, unsigned char *prompt, int width, int y, int x);
-void print_button(WINDOW *win, unsigned char *label, int y, int x, int selected);
-void draw_box(WINDOW *win, int y, int x, int height, int width, chtype box, chtype border);
-#ifdef HAVE_NCURSES
-void draw_shadow(WINDOW *win, int y, int x, int height, int width);
-#endif
-
-int dialog_yesno(unsigned char *title, unsigned char *prompt, int height, int width);
-int dialog_msgbox(unsigned char *title, unsigned char *prompt, int height, int width, int pause);
-int dialog_textbox(unsigned char *title, unsigned char *file, int height, int width);
-int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int width, int menu_height, int item_no, unsigned char **items);
-int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, int width, int list_height, int item_no, unsigned char **items);
-int dialog_radiolist(char *title, char *prompt, int height, int width, int list_height, int item_no, unsigned char **items);
-int dialog_inputbox(unsigned char *title, unsigned char *prompt, int height, int width);
-
diff --git a/gnu/usr.bin/dialog/menubox.c b/gnu/usr.bin/dialog/menubox.c
deleted file mode 100644
index e393c6c..0000000
--- a/gnu/usr.bin/dialog/menubox.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * menubox.c -- implements the menu box
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include "dialog.h"
-
-
-static void print_item(WINDOW *win, unsigned char *tag, unsigned char *item, int choice, int selected);
-
-
-static int menu_width, tag_x, item_x;
-
-
-/*
- * Display a menu for choosing among a number of options
- */
-int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int width, int menu_height, int item_no, unsigned char **items)
-{
- int i, x, y, cur_x, cur_y, box_x, box_y, key = 0, button = 0, choice = 0,
- scroll = 0, max_choice;
- WINDOW *dialog, *menu;
-
- max_choice = MIN(menu_height, item_no);
-
- /* center dialog box on screen */
- x = (COLS - width)/2;
- y = (LINES - height)/2;
-
-#ifdef HAVE_NCURSES
- if (use_shadow)
- draw_shadow(stdscr, y, x, height, width);
-#endif
- dialog = newwin(height, width, y, x);
- keypad(dialog, TRUE);
-
- draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset(dialog, border_attr);
- wmove(dialog, height-3, 0);
- waddch(dialog, ACS_LTEE);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ACS_HLINE);
- wattrset(dialog, dialog_attr);
- waddch(dialog, ACS_RTEE);
- wmove(dialog, height-2, 1);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ' ');
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- wmove(dialog, 0, (width - strlen(title))/2 - 1);
- waddch(dialog, ' ');
- waddstr(dialog, title);
- waddch(dialog, ' ');
- }
- wattrset(dialog, dialog_attr);
- print_autowrap(dialog, prompt, width, 1, 3);
-
- menu_width = width-6;
- getyx(dialog, cur_y, cur_x);
- box_y = cur_y + 1;
- box_x = (width - menu_width)/2 - 1;
-
- /* create new window for the menu */
- menu = subwin(dialog, menu_height, menu_width, y + box_y + 1, x + box_x + 1);
- keypad(menu, TRUE);
-
- /* draw a box around the menu items */
- draw_box(dialog, box_y, box_x, menu_height+2, menu_width+2, menubox_border_attr, menubox_attr);
-
- tag_x = 0;
- item_x = 0;
- /* Find length of longest item in order to center menu */
- for (i = 0; i < item_no; i++) {
- tag_x = MAX(tag_x, strlen(items[i*2]) + strlen(items[i*2 + 1]) + 2);
- item_x = MAX(item_x, strlen(items[i*2]));
- }
- tag_x = (menu_width - tag_x) / 2;
- item_x = tag_x + item_x + 2;
-
- /* Print the menu */
- for (i = 0; i < max_choice; i++)
- print_item(menu, items[i*2], items[i*2 + 1], i, i == choice);
- wnoutrefresh(menu);
-
- if (menu_height < item_no) {
- wattrset(dialog, darrow_attr);
- wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 1);
- waddch(dialog, ACS_DARROW);
- wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 2);
- waddstr(dialog,"(+)");
- }
-
- x = width/2-11;
- y = height-2;
- print_button(dialog, "Cancel", y, x+14, FALSE);
- print_button(dialog, " OK ", y, x, TRUE);
- wrefresh(dialog);
-
- while (key != ESC) {
- key = wgetch(dialog);
- /* Check if key pressed matches first character of any item tag in menu */
- for (i = 0; i < max_choice; i++)
- if (key < 0x100 && toupper(key) == toupper(items[(scroll+i)*2][0]))
- break;
-
- if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
- key == KEY_UP || key == KEY_DOWN || key == '-' || key == '+') {
- if (key >= '1' && key <= MIN('9', '0'+max_choice))
- i = key - '1';
- else if (key == KEY_UP || key == '-') {
- if (!choice) {
- if (scroll) {
-#ifdef BROKEN_WSCRL
- /* wscrl() in ncurses 1.8.1 seems to be broken, causing a segmentation
- violation when scrolling windows of height = 4, so scrolling is not
- used for now */
- scroll--;
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- /* Reprint menu to scroll down */
- for (i = 0; i < max_choice; i++)
- print_item(menu, items[(scroll+i)*2], items[(scroll+i)*2 + 1], i, i == choice);
-
-#else
-
- /* Scroll menu down */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- if (menu_height > 1) {
- /* De-highlight current first item before scrolling down */
- print_item(menu, items[scroll*2], items[scroll*2 + 1], 0, FALSE);
- scrollok(menu, TRUE);
- wscrl(menu, -1);
- scrollok(menu, FALSE);
- }
- scroll--;
- print_item(menu, items[scroll*2], items[scroll*2 + 1], 0, TRUE);
-#endif
- wnoutrefresh(menu);
-
- /* print the up/down arrows */
- wmove(dialog, box_y, box_x + tag_x + 1);
- wattrset(dialog, scroll ? uarrow_attr : menubox_attr);
- waddch(dialog, scroll ? ACS_UARROW : ACS_HLINE);
- wmove(dialog, box_y, box_x + tag_x + 2);
- waddch(dialog, scroll ? '(' : ACS_HLINE);
- wmove(dialog, box_y, box_x + tag_x + 3);
- waddch(dialog, scroll ? '-' : ACS_HLINE);
- wmove(dialog, box_y, box_x + tag_x + 4);
- waddch(dialog, scroll ? ')' : ACS_HLINE);
- wattrset(dialog, darrow_attr);
- wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 1);
- waddch(dialog, ACS_DARROW);
- wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 2);
- waddstr(dialog,"(+)");
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
- else
- i = choice - 1;
- }
- else if (key == KEY_DOWN || key == '+')
- if (choice == max_choice - 1) {
- if (scroll+choice < item_no-1) {
-#ifdef BROKEN_WSCRL
- /* wscrl() in ncurses 1.8.1 seems to be broken, causing a segmentation
- violation when scrolling windows of height = 4, so scrolling is not
- used for now */
- scroll++;
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- /* Reprint menu to scroll up */
- for (i = 0; i < max_choice; i++)
- print_item(menu, items[(scroll+i)*2], items[(scroll+i)*2 + 1], i, i == choice);
-
-#else
-
- /* Scroll menu up */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- if (menu_height > 1) {
- /* De-highlight current last item before scrolling up */
- print_item(menu, items[(scroll+max_choice-1)*2], items[(scroll+max_choice-1)*2 + 1], max_choice-1, FALSE);
- scrollok(menu, TRUE);
- scroll(menu);
- scrollok(menu, FALSE);
- }
- scroll++;
- print_item(menu, items[(scroll+max_choice-1)*2], items[(scroll+max_choice-1)*2 + 1], max_choice-1, TRUE);
-#endif
- wnoutrefresh(menu);
-
- /* print the up/down arrows */
- wattrset(dialog, uarrow_attr);
- wmove(dialog, box_y, box_x + tag_x + 1);
- waddch(dialog, ACS_UARROW);
- wmove(dialog, box_y, box_x + tag_x + 2);
- waddstr(dialog,"(-)");
- wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 1);
- wattrset(dialog, scroll+choice < item_no-1 ? darrow_attr : menubox_border_attr);
- waddch(dialog, scroll+choice < item_no-1 ? ACS_DARROW : ACS_HLINE);
- wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 2);
- waddch(dialog, scroll+choice < item_no-1 ? '(' : ACS_HLINE);
- wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 3);
- waddch(dialog, scroll+choice < item_no-1 ? '+' : ACS_HLINE);
- wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 4);
- waddch(dialog, scroll+choice < item_no-1 ? ')' : ACS_HLINE);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
- else
- i = choice + 1;
-
- if (i != choice) {
- /* De-highlight current item */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- print_item(menu, items[(scroll+choice)*2], items[(scroll+choice)*2 + 1], choice, FALSE);
-
- /* Highlight new item */
- choice = i;
- print_item(menu, items[(scroll+choice)*2], items[(scroll+choice)*2 + 1], choice, TRUE);
- wnoutrefresh(menu);
- wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
-
- switch (key) {
- case 'O':
- case 'o':
- delwin(dialog);
- fprintf(stderr, items[(scroll+choice)*2]);
- return 0;
- case 'C':
- case 'c':
- delwin(dialog);
- return 1;
- case KEY_BTAB:
- case TAB:
- case KEY_LEFT:
- case KEY_RIGHT:
- if (!button) {
- button = 1; /* Indicates "Cancel" button is selected */
- print_button(dialog, " OK ", y, x, FALSE);
- print_button(dialog, "Cancel", y, x+14, TRUE);
- }
- else {
- button = 0; /* Indicates "OK" button is selected */
- print_button(dialog, "Cancel", y, x+14, FALSE);
- print_button(dialog, " OK ", y, x, TRUE);
- }
- wrefresh(dialog);
- break;
- case ' ':
- case '\n':
- delwin(dialog);
- if (!button)
- fprintf(stderr, items[(scroll+choice)*2]);
- return button;
- case ESC:
- break;
- }
- }
-
- delwin(dialog);
- return -1; /* ESC pressed */
-}
-/* End of dialog_menu() */
-
-
-/*
- * Print menu item
- */
-static void print_item(WINDOW *win, unsigned char *tag, unsigned char *item, int choice, int selected)
-{
- int i;
-
- /* Clear 'residue' of last item */
- wattrset(win, menubox_attr);
- wmove(win, choice, 0);
- for (i = 0; i < menu_width; i++)
- waddch(win, ' ');
- wmove(win, choice, tag_x);
- wattrset(win, selected ? tag_key_selected_attr : tag_key_attr);
- waddch(win, tag[0]);
- wattrset(win, selected ? tag_selected_attr : tag_attr);
- waddstr(win, tag + 1);
- wmove(win, choice, item_x);
- wattrset(win, selected ? item_selected_attr : item_attr);
- waddstr(win, item);
-}
-/* End of print_item() */
diff --git a/gnu/usr.bin/dialog/msgbox.c b/gnu/usr.bin/dialog/msgbox.c
deleted file mode 100644
index 7fe6ae2..0000000
--- a/gnu/usr.bin/dialog/msgbox.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * msgbox.c -- implements the message box and info box
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include "dialog.h"
-
-
-/*
- * Display a message box. Program will pause and display an "OK" button
- * if the parameter 'pause' is non-zero.
- */
-int dialog_msgbox(unsigned char *title, unsigned char *prompt, int height, int width, int pause)
-{
- int i, x, y, key = 0;
- WINDOW *dialog;
-
- /* center dialog box on screen */
- x = (COLS - width)/2;
- y = (LINES - height)/2;
-
-#ifdef HAVE_NCURSES
- if (use_shadow)
- draw_shadow(stdscr, y, x, height, width);
-#endif
- dialog = newwin(height, width, y, x);
- keypad(dialog, TRUE);
-
- draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- wmove(dialog, 0, (width - strlen(title))/2 - 1);
- waddch(dialog, ' ');
- waddstr(dialog, title);
- waddch(dialog, ' ');
- }
- wattrset(dialog, dialog_attr);
- print_autowrap(dialog, prompt, width-2, 1, 2);
-
- if (pause) {
- wattrset(dialog, border_attr);
- wmove(dialog, height-3, 0);
- waddch(dialog, ACS_LTEE);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ACS_HLINE);
- wattrset(dialog, dialog_attr);
- waddch(dialog, ACS_RTEE);
- wmove(dialog, height-2, 1);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ' ');
- print_button(dialog, " OK ", height-2, width/2-4, TRUE);
- wrefresh(dialog);
- while (key != ESC && key != '\n' && key != ' ')
- key = wgetch(dialog);
- }
- else {
- key = '\n';
- wrefresh(dialog);
- }
-
- delwin(dialog);
- return (key == ESC ? -1 : 0);
-}
-/* End of dialog_msgbox() */
diff --git a/gnu/usr.bin/dialog/radiolist.c b/gnu/usr.bin/dialog/radiolist.c
deleted file mode 100644
index 5125924..0000000
--- a/gnu/usr.bin/dialog/radiolist.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * radiolist.c -- implements the radiolist box
- *
- * AUTHOR: Stuart Herbert - S.Herbert@sheffield.ac.uk
- * (from checklist.c by Savio Lam (lam836@cs.cuhk.hk))
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include "dialog.h"
-
-
-static void print_item(WINDOW *win, char *tag, char *item, int status, int choice, int selected);
-
-
-static int list_width, check_x, item_x;
-
-
-/*
- * Display a dialog box with a list of options that can be turned on or off
- */
-int dialog_radiolist(char *title, char *prompt, int height, int width, int list_height, int item_no, unsigned char **items)
-{
- int i, x, y, cur_x, cur_y, box_x, box_y, key = 0, button = 0, choice = 0,
- scroll = 0, max_choice, *status;
- WINDOW *dialog, *list;
-
- /* Allocate space for storing item on/off status */
- if ((status = malloc(sizeof(int)*item_no)) == NULL) {
- endwin();
- fprintf(stderr, "\nCan't allocate memory in dialog_radiolist().\n");
- exit(-1);
- }
- /* Initializes status */
- for (i = 0; i < item_no; i++)
- status[i] = !strcasecmp(items[i*3 + 2], "on");
-
- max_choice = MIN(list_height, item_no);
-
- /* center dialog box on screen */
- x = (COLS - width)/2;
- y = (LINES - height)/2;
-
-#ifdef HAVE_NCURSES
- if (use_shadow)
- draw_shadow(stdscr, y, x, height, width);
-#endif
- dialog = newwin(height, width, y, x);
- keypad(dialog, TRUE);
-
- draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset(dialog, border_attr);
- wmove(dialog, height-3, 0);
- waddch(dialog, ACS_LTEE);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ACS_HLINE);
- wattrset(dialog, dialog_attr);
- waddch(dialog, ACS_RTEE);
- wmove(dialog, height-2, 1);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ' ');
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- wmove(dialog, 0, (width - strlen(title))/2 - 1);
- waddch(dialog, ' ');
- waddstr(dialog, title);
- waddch(dialog, ' ');
- }
- wattrset(dialog, dialog_attr);
- print_autowrap(dialog, prompt, width, 1, 3);
-
- list_width = width-6;
- getyx(dialog, cur_y, cur_x);
- box_y = cur_y + 1;
- box_x = (width - list_width)/2 - 1;
-
- /* create new window for the list */
- list = subwin(dialog, list_height, list_width, y + box_y + 1, x + box_x + 1);
- keypad(list, TRUE);
-
- /* draw a box around the list items */
- draw_box(dialog, box_y, box_x, list_height+2, list_width+2, menubox_border_attr, menubox_attr);
-
- check_x = 0;
- item_x = 0;
- /* Find length of longest item in order to center radiolist */
- for (i = 0; i < item_no; i++) {
- check_x = MAX(check_x, strlen(items[i*3]) + strlen(items[i*3 + 1]) + 6);
- item_x = MAX(item_x, strlen(items[i*3]));
- }
- check_x = (list_width - check_x) / 2;
- item_x = check_x + item_x + 6;
-
- /* Print the list */
- for (i = 0; i < max_choice; i++)
- print_item(list, items[i*3], items[i*3 + 1], status[i], i, i == choice);
- wnoutrefresh(list);
-
- if (list_height < item_no) {
- wattrset(dialog, darrow_attr);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 5);
- waddch(dialog, ACS_DARROW);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 6);
- waddstr(dialog, "(+)");
- }
-
- x = width/2-11;
- y = height-2;
- print_button(dialog, "Cancel", y, x+14, FALSE);
- print_button(dialog, " OK ", y, x, TRUE);
- wrefresh(dialog);
-
- while (key != ESC) {
- key = wgetch(dialog);
- /* Check if key pressed matches first character of any item tag in list */
- for (i = 0; i < max_choice; i++)
- if (toupper(key) == toupper(items[(scroll+i)*3][0]))
- break;
-
- if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
- key == KEY_UP || key == KEY_DOWN || key == ' ' ||
- key == '+' || key == '-' ) {
- if (key >= '1' && key <= MIN('9', '0'+max_choice))
- i = key - '1';
- else if (key == KEY_UP || key == '-') {
- if (!choice) {
- if (scroll) {
-#ifdef BROKEN_WSCRL
- /* wscrl() in ncurses 1.8.1 seems to be broken, causing a segmentation
- violation when scrolling windows of height = 4, so scrolling is not
- used for now */
- scroll--;
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- /* Reprint list to scroll down */
- for (i = 0; i < max_choice; i++)
- print_item(list, items[(scroll+i)*3], items[(scroll+i)*3 + 1], status[scroll+i], i, i == choice);
-
-#else
-
- /* Scroll list down */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- if (list_height > 1) {
- /* De-highlight current first item before scrolling down */
- print_item(list, items[scroll*3], items[scroll*3 + 1], status[scroll], 0, FALSE);
- scrollok(list, TRUE);
- wscrl(list, -1);
- scrollok(list, FALSE);
- }
- scroll--;
- print_item(list, items[scroll*3], items[scroll*3 + 1], status[scroll], 0, TRUE);
-#endif
- wnoutrefresh(list);
-
- /* print the up/down arrows */
- wmove(dialog, box_y, box_x + check_x + 5);
- wattrset(dialog, scroll ? uarrow_attr : menubox_attr);
- waddch(dialog, scroll ? ACS_UARROW : ACS_HLINE);
- wmove(dialog, box_y, box_x + check_x + 6);
- waddch(dialog, scroll ? '(' : ACS_HLINE);
- wmove(dialog, box_y, box_x + check_x + 7);
- waddch(dialog, scroll ? '-' : ACS_HLINE);
- wmove(dialog, box_y, box_x + check_x + 8);
- waddch(dialog, scroll ? ')' : ACS_HLINE);
- wattrset(dialog, darrow_attr);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 5);
- waddch(dialog, ACS_DARROW);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 6);
- waddch(dialog, '(');
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 7);
- waddch(dialog, '+');
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 8);
- waddch(dialog, ')');
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
- else
- i = choice - 1;
- }
- else if (key == KEY_DOWN || key == '+') {
- if (choice == max_choice - 1) {
- if (scroll+choice < item_no-1) {
-#ifdef BROKEN_WSCRL
- /* wscrl() in ncurses 1.8.1 seems to be broken, causing a segmentation
- violation when scrolling windows of height = 4, so scrolling is not
- used for now */
- scroll++;
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- /* Reprint list to scroll up */
- for (i = 0; i < max_choice; i++)
- print_item(list, items[(scroll+i)*3], items[(scroll+i)*3 + 1], status[scroll+i], i, i == choice);
-
-#else
-
- /* Scroll list up */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- if (list_height > 1) {
- /* De-highlight current last item before scrolling up */
- print_item(list, items[(scroll+max_choice-1)*3], items[(scroll+max_choice-1)*3 + 1], status[scroll+max_choice-1], max_choice-1, FALSE);
- scrollok(list, TRUE);
- scroll(list);
- scrollok(list, FALSE);
- }
- scroll++;
- print_item(list, items[(scroll+max_choice-1)*3], items[(scroll+max_choice-1)*3 + 1], status[scroll+max_choice-1], max_choice-1, TRUE);
-#endif
- wnoutrefresh(list);
-
- /* print the up/down arrows */
- wattrset(dialog, uarrow_attr);
- wmove(dialog, box_y, box_x + check_x + 5);
- waddch(dialog, ACS_UARROW);
- wmove(dialog, box_y, box_x + check_x + 6);
- waddstr(dialog, "(-)");
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 5);
- wattrset(dialog, scroll+choice < item_no-1 ? darrow_attr : menubox_border_attr);
- waddch(dialog, scroll+choice < item_no-1 ? ACS_DARROW : ACS_HLINE);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 6);
- waddch(dialog, scroll+choice < item_no-1 ? '(' : ACS_HLINE);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 7);
- waddch(dialog, scroll+choice < item_no-1 ? '+' : ACS_HLINE);
- wmove(dialog, box_y + list_height + 1, box_x + check_x + 8);
- waddch(dialog, scroll+choice < item_no-1 ? ')' : ACS_HLINE);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
- else
- i = choice + 1;
- }
- else if (key == ' ') { /* Toggle item status */
- if (!status[scroll+choice])
- {
- for (i=0; i<item_no; i++)
- status[i]=0;
- status[scroll+choice]=1;
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- for (i = 0; i < max_choice; i++)
- print_item(list, items[(scroll+i)*3], items[(scroll+i)*3 + 1], status[scroll+i], i, i == choice);
- wnoutrefresh(list);
- wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
-
- if (i != choice) {
- /* De-highlight current item */
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
- print_item(list, items[(scroll+choice)*3], items[(scroll+choice)*3 +1], status[scroll+choice], choice, FALSE);
- /* Highlight new item */
- choice = i;
- print_item(list, items[(scroll+choice)*3], items[(scroll+choice)*3 + 1], status[scroll+choice], choice, TRUE);
- wnoutrefresh(list);
- wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */
- wrefresh(dialog);
- }
- continue; /* wait for another key press */
- }
-
- switch (key) {
- case 'O':
- case 'o':
- delwin(dialog);
- for (i = 0; i < item_no; i++)
- if (status[i])
- fprintf(stderr, "%s", items[i*3]);
- free(status);
- return 0;
- case 'C':
- case 'c':
- delwin(dialog);
- free(status);
- return 1;
- case KEY_BTAB:
- case TAB:
- case KEY_LEFT:
- case KEY_RIGHT:
- if (!button) {
- button = 1; /* Indicates "Cancel" button is selected */
- print_button(dialog, " OK ", y, x, FALSE);
- print_button(dialog, "Cancel", y, x+14, TRUE);
- }
- else {
- button = 0; /* Indicates "OK" button is selected */
- print_button(dialog, "Cancel", y, x+14, FALSE);
- print_button(dialog, " OK ", y, x, TRUE);
- }
- wrefresh(dialog);
- break;
- case ' ':
- case '\n':
- delwin(dialog);
- if (!button)
- for (i = 0; i < item_no; i++)
- if (status[i])
- fprintf(stderr, items[i*3]);
- free(status);
- return button;
- case ESC:
- break;
- }
- }
-
- delwin(dialog);
- free(status);
- return -1; /* ESC pressed */
-}
-/* End of dialog_radiolist() */
-
-
-/*
- * Print list item
- */
-static void print_item(WINDOW *win, char *tag, char *item, int status, int choice, int selected)
-{
- int i;
-
- /* Clear 'residue' of last item */
- wattrset(win, menubox_attr);
- wmove(win, choice, 0);
- for (i = 0; i < list_width; i++)
- waddch(win, ' ');
- wmove(win, choice, check_x);
- wattrset(win, selected ? check_selected_attr : check_attr);
- wprintw(win, "(%c)", status ? '*' : ' ');
- wattrset(win, menubox_attr);
- waddch(win, ' ');
- wattrset(win, selected ? tag_key_selected_attr : tag_key_attr);
- waddch(win, tag[0]);
- wattrset(win, selected ? tag_selected_attr : tag_attr);
- waddstr(win, tag + 1);
- wmove(win, choice, item_x);
- wattrset(win, selected ? item_selected_attr : item_attr);
- waddstr(win, item);
-}
-/* End of print_item() */
diff --git a/gnu/usr.bin/dialog/rc.c b/gnu/usr.bin/dialog/rc.c
deleted file mode 100644
index 46add74..0000000
--- a/gnu/usr.bin/dialog/rc.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * rc.c -- routines for processing the configuration file
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include "dialog.h"
-#include "colors.h"
-#include "rc.h"
-
-
-static unsigned char *attr_to_str(int fg, int bg, int hl);
-static int str_to_attr(unsigned char *str, int *fg, int *bg, int *hl);
-static int parse_line(unsigned char *line, unsigned char **var, unsigned char **value);
-
-
-/*
- * Create the configuration file
- */
-void create_rc(unsigned char *filename)
-{
- int i;
- FILE *rc_file;
-
- if ((rc_file = fopen(filename, "wt")) == NULL) {
- fprintf(stderr, "\nError opening file for writing in create_rc().\n");
- exit(-1);
- }
-
- fprintf(rc_file, "#\
-\n# Run-time configuration file for dialog\
-\n#\
-\n# Automatically generated by \"dialog --create-rc <file>\"\
-\n#\
-\n#\
-\n# Types of values:\
-\n#\
-\n# Number - <number>\
-\n# String - \"string\"\
-\n# Boolean - <ON|OFF>\
-\n# Attribute - (foreground,background,highlight?)\
-\n#\n\n");
-
- /* Print an entry for each configuration variable */
- for (i = 0; i < VAR_COUNT; i++) {
- fprintf(rc_file, "\n# %s\n", vars[i].comment); /* print comment */
- switch (vars[i].type) {
- case VAL_INT:
- fprintf(rc_file, "%s = %d\n", vars[i].name, *((int *) vars[i].var));
- break;
- case VAL_STR:
- fprintf(rc_file, "%s = \"%s\"\n", vars[i].name, (unsigned char *) vars[i].var);
- break;
- case VAL_BOOL:
- fprintf(rc_file, "%s = %s\n", vars[i].name, *((bool *) vars[i].var) ? "ON" : "OFF");
- break;
- case VAL_ATTR:
- fprintf(rc_file, "%s = %s\n", vars[i].name, attr_to_str(((int *) vars[i].var)[0], ((int *) vars[i].var)[1], ((int *) vars[i].var)[2]));
- break;
- }
- }
-
- fclose(rc_file);
-}
-/* End of create_rc() */
-
-
-/*
- * Parse the configuration file and set up variables
- */
-int parse_rc(void)
-{
- int i, l = 1, parse, fg, bg, hl;
- unsigned char str[MAX_LEN+1], *var, *value, *tempptr;
- FILE *rc_file;
-
- /*
- *
- * At start, 'dialog' determines the settings to use as follows:
- *
- * a) if environment variable DIALOGRC is set, it's value determines the
- * name of the configuration file.
- *
- * b) if the file in (a) can't be found, use the file $HOME/.dialogrc
- * as the configuration file.
- *
- * c) if the file in (b) can't be found, use compiled in defaults.
- *
- */
-
- if ((tempptr = getenv("DIALOGRC")) != NULL)
- rc_file = fopen(tempptr, "rt");
-
- if (tempptr == NULL || rc_file == NULL) { /* step (a) failed? */
- /* try step (b) */
- if ((tempptr = getenv("HOME")) == NULL)
- return 0; /* step (b) failed, use default values */
-
- if (tempptr[0] == '\0' || lastch(tempptr) == '/')
- sprintf(str, "%s%s", tempptr, DIALOGRC);
- else
- sprintf(str, "%s/%s", tempptr, DIALOGRC);
-
- if ((rc_file = fopen(str, "rt")) == NULL)
- return 0; /* step (b) failed, use default values */
- }
-
- /* Scan each line and set variables */
- while (fgets(str, MAX_LEN, rc_file) != NULL) {
- if (lastch(str) != '\n') { /* ignore rest of file if line too long */
- fprintf(stderr, "\nParse error: line %d of configuration file too long.\n", l);
- fclose(rc_file);
- return -1; /* parse aborted */
- }
- else {
- lastch(str) = '\0';
- parse = parse_line(str, &var, &value); /* parse current line */
-
- switch (parse) {
- case LINE_BLANK: /* ignore blank lines and comments */
- case LINE_COMMENT:
- break;
- case LINE_OK:
- /* search table for matching config variable name */
- for (i = 0; i < VAR_COUNT && strcmp(vars[i].name, var); i++);
-
- if (i == VAR_COUNT) { /* no match */
- fprintf(stderr, "\nParse error: unknown variable at line %d of configuration file.\n", l);
- return -1; /* parse aborted */
- }
- else { /* variable found in table, set run time variables */
- switch (vars[i].type) {
- case VAL_INT:
- *((int *) vars[i].var) = atoi(value);
- break;
- case VAL_STR:
- if (!isquote(value[0]) || !isquote(lastch(value)) || strlen(value) < 2) {
- fprintf(stderr, "\nParse error: string value expected at line %d of configuration file.\n", l);
- return -1; /* parse aborted */
- }
- else {
- /* remove the (") quotes */
- value++;
- lastch(value) = '\0';
- strcpy((unsigned char *) vars[i].var, value);
- }
- break;
- case VAL_BOOL:
- if (!strcasecmp(value, "ON"))
- *((bool *) vars[i].var) = TRUE;
- else if (!strcasecmp(value, "OFF"))
- *((bool *) vars[i].var) = FALSE;
- else {
- fprintf(stderr, "\nParse error: boolean value expected at line %d of configuration file.\n", l);
- return -1; /* parse aborted */
- }
- break;
- case VAL_ATTR:
- if (str_to_attr(value, &fg, &bg, &hl) == -1) {
- fprintf(stderr, "\nParse error: attribute value expected at line %d of configuration file.\n", l);
- return -1; /* parse aborted */
- }
- ((int *) vars[i].var)[0] = fg;
- ((int *) vars[i].var)[1] = bg;
- ((int *) vars[i].var)[2] = hl;
- break;
- }
- }
- break;
- case LINE_ERROR:
- fprintf(stderr, "\nParse error: syntax error at line %d of configuration file.\n", l);
- return -1; /* parse aborted */
- }
- }
-
- l++; /* next line */
- }
-
- fclose(rc_file);
- return 0; /* parse successful */
-}
-/* End of parse_rc() */
-
-
-/*
- * Convert an attribute to a string representation like this:
- *
- * "(foreground,background,highlight)"
- */
-static unsigned char *attr_to_str(int fg, int bg, int hl)
-{
- int i;
- static unsigned char str[MAX_LEN+1];
-
- strcpy(str, "(");
- /* foreground */
- for (i = 0; fg != color_names[i].value; i++);
- strcat(str, color_names[i].name);
- strcat(str, ",");
-
- /* background */
- for (i = 0; bg != color_names[i].value; i++);
- strcat(str, color_names[i].name);
-
- /* highlight */
- strcat(str, hl ? ",ON)" : ",OFF)");
-
- return str;
-}
-/* End of attr_to_str() */
-
-
-/*
- * Extract the foreground, background and highlight values from an attribute
- * represented as a string in this form:
- *
- * "(foreground,background,highlight)"
- */
-static int str_to_attr(unsigned char *str, int *fg, int *bg, int *hl)
-{
- int i = 0, j, get_fg = 1;
- unsigned char tempstr[MAX_LEN+1], *part;
-
- if (str[0] != '(' || lastch(str) != ')')
- return -1; /* invalid representation */
-
- /* remove the parenthesis */
- strcpy(tempstr, str + 1);
- lastch(tempstr) = '\0';
-
-
- /* get foreground and background */
-
- while (1) {
- /* skip white space before fg/bg string */
- while (whitespace(tempstr[i]) && tempstr[i] != '\0') i++;
- if (tempstr[i] == '\0')
- return -1; /* invalid representation */
- part = tempstr + i; /* set 'part' to start of fg/bg string */
-
- /* find end of fg/bg string */
- while(!whitespace(tempstr[i]) && tempstr[i] != ',' && tempstr[i] != '\0') i++;
-
- if (tempstr[i] == '\0')
- return -1; /* invalid representation */
- else if (whitespace(tempstr[i])) { /* not yet ',' */
- tempstr[i++] = '\0';
-
- /* skip white space before ',' */
- while(whitespace(tempstr[i]) && tempstr[i] != '\0') i++;
-
- if (tempstr[i] != ',')
- return -1; /* invalid representation */
- }
-
- tempstr[i++] = '\0'; /* skip the ',' */
- for (j = 0; j < COLOR_COUNT && strcasecmp(part, color_names[j].name); j++);
- if (j == COLOR_COUNT) /* invalid color name */
- return -1;
- if (get_fg) {
- *fg = color_names[j].value;
- get_fg = 0; /* next we have to get the background */
- }
- else {
- *bg = color_names[j].value;
- break;
- }
- } /* got foreground and background */
-
-
- /* get highlight */
-
- /* skip white space before highlight string */
- while (whitespace(tempstr[i]) && tempstr[i] != '\0') i++;
- if (tempstr[i] == '\0')
- return -1; /* invalid representation */
- part = tempstr + i; /* set 'part' to start of highlight string */
-
- /* trim trailing white space from highlight string */
- i = strlen(part) - 1;
- while(whitespace(part[i])) i--;
- part[i+1] = '\0';
-
- if (!strcasecmp(part, "ON"))
- *hl = TRUE;
- else if (!strcasecmp(part, "OFF"))
- *hl = FALSE;
- else
- return -1; /* invalid highlight value */
-
- return 0;
-}
-/* End of str_to_attr() */
-
-
-/*
- * Parse a line in the configuration file
- *
- * Each line is of the form: "variable = value". On exit, 'var' will contain
- * the variable name, and 'value' will contain the value string.
- *
- * Return values:
- *
- * LINE_BLANK - line is blank
- * LINE_COMMENT - line is comment
- * LINE_OK - line is ok
- * LINE_ERROR - syntax error in line
- */
-static int parse_line(unsigned char *line, unsigned char **var, unsigned char **value)
-{
- int i = 0;
-
- /* ignore white space at beginning of line */
- while(whitespace(line[i]) && line[i] != '\0') i++;
-
- if (line[i] == '\0') /* line is blank */
- return LINE_BLANK;
- else if (line[i] == '#') /* line is comment */
- return LINE_COMMENT;
- else if (line[i] == '=') /* variables names can't strart with a '=' */
- return LINE_ERROR;
-
- /* set 'var' to variable name */
- *var = line + i++; /* skip to next character */
-
- /* find end of variable name */
- while(!whitespace(line[i]) && line[i] != '=' && line[i] != '\0') i++;
-
- if (line[i] == '\0') /* syntax error */
- return LINE_ERROR;
- else if (line[i] == '=')
- line[i++] = '\0';
- else {
- line[i++] = '\0';
-
- /* skip white space before '=' */
- while(whitespace(line[i]) && line[i] != '\0') i++;
-
- if (line[i] != '=') /* syntax error */
- return LINE_ERROR;
- else
- i++; /* skip the '=' */
- }
-
- /* skip white space after '=' */
- while(whitespace(line[i]) && line[i] != '\0') i++;
-
- if (line[i] == '\0')
- return LINE_ERROR;
- else
- *value = line + i; /* set 'value' to value string */
-
- /* trim trailing white space from 'value' */
- i = strlen(*value) - 1;
- while(whitespace((*value)[i])) i--;
- (*value)[i+1] = '\0';
-
- return LINE_OK; /* no syntax error in line */
-}
-/* End of parse_line() */
diff --git a/gnu/usr.bin/dialog/rc.h b/gnu/usr.bin/dialog/rc.h
deleted file mode 100644
index 225ff6d..0000000
--- a/gnu/usr.bin/dialog/rc.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * rc.h -- declarations for configuration file processing
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#define DIALOGRC ".dialogrc"
-#define VAR_LEN 30
-#define COMMENT_LEN 70
-
-/* Types of values */
-#define VAL_INT 0
-#define VAL_STR 1
-#define VAL_BOOL 2
-#define VAL_ATTR 3
-
-/* Type of line in configuration file */
-#define LINE_BLANK 2
-#define LINE_COMMENT 1
-#define LINE_OK 0
-#define LINE_ERROR -1
-
-/* number of configuration variables */
-#define VAR_COUNT (sizeof(vars) / sizeof(vars_st))
-
-/* check if character is white space */
-#define whitespace(c) (c == ' ' || c == '\t')
-
-/* check if character is string quoting characters */
-#define isquote(c) (c == '"' || c == '\'')
-
-/* get last character of string */
-#define lastch(str) str[strlen(str)-1]
-
-/*
- * Configuration variables
- */
-typedef struct {
- unsigned char name[VAR_LEN]; /* name of configuration variable as in DIALOGRC */
- void *var; /* address of actually variable to change */
- int type; /* type of value */
- unsigned char comment[COMMENT_LEN]; /* comment to put in "rc" file */
-} vars_st;
-
-vars_st vars[] = {
- { "use_shadow",
- &use_shadow,
- VAL_BOOL,
- "Shadow dialog boxes? This also turns on color." },
-
- { "use_colors",
- &use_colors,
- VAL_BOOL,
- "Turn color support ON or OFF" },
-
- { "screen_color",
- color_table[0],
- VAL_ATTR,
- "Screen color" },
-
- { "shadow_color",
- color_table[1],
- VAL_ATTR,
- "Shadow color" },
-
- { "dialog_color",
- color_table[2],
- VAL_ATTR,
- "Dialog box color" },
-
- { "title_color",
- color_table[3],
- VAL_ATTR,
- "Dialog box title color" },
-
- { "border_color",
- color_table[4],
- VAL_ATTR,
- "Dialog box border color" },
-
- { "button_active_color",
- color_table[5],
- VAL_ATTR,
- "Active button color" },
-
- { "button_inactive_color",
- color_table[6],
- VAL_ATTR,
- "Inactive button color" },
-
- { "button_key_active_color",
- color_table[7],
- VAL_ATTR,
- "Active button key color" },
-
- { "button_key_inactive_color",
- color_table[8],
- VAL_ATTR,
- "Inactive button key color" },
-
- { "button_label_active_color",
- color_table[9],
- VAL_ATTR,
- "Active button label color" },
-
- { "button_label_inactive_color",
- color_table[10],
- VAL_ATTR,
- "Inactive button label color" },
-
- { "inputbox_color",
- color_table[11],
- VAL_ATTR,
- "Input box color" },
-
- { "inputbox_border_color",
- color_table[12],
- VAL_ATTR,
- "Input box border color" },
-
- { "searchbox_color",
- color_table[13],
- VAL_ATTR,
- "Search box color" },
-
- { "searchbox_title_color",
- color_table[14],
- VAL_ATTR,
- "Search box title color" },
-
- { "searchbox_border_color",
- color_table[15],
- VAL_ATTR,
- "Search box border color" },
-
- { "position_indicator_color",
- color_table[16],
- VAL_ATTR,
- "File position indicator color" },
-
- { "menubox_color",
- color_table[17],
- VAL_ATTR,
- "Menu box color" },
-
- { "menubox_border_color",
- color_table[18],
- VAL_ATTR,
- "Menu box border color" },
-
- { "item_color",
- color_table[19],
- VAL_ATTR,
- "Item color" },
-
- { "item_selected_color",
- color_table[20],
- VAL_ATTR,
- "Selected item color" },
-
- { "tag_color",
- color_table[21],
- VAL_ATTR,
- "Tag color" },
-
- { "tag_selected_color",
- color_table[22],
- VAL_ATTR,
- "Selected tag color" },
-
- { "tag_key_color",
- color_table[23],
- VAL_ATTR,
- "Tag key color" },
-
- { "tag_key_selected_color",
- color_table[24],
- VAL_ATTR,
- "Selected tag key color" },
-
- { "check_color",
- color_table[25],
- VAL_ATTR,
- "Check box color" },
-
- { "check_selected_color",
- color_table[26],
- VAL_ATTR,
- "Selected check box color" },
-
- { "uarrow_color",
- color_table[27],
- VAL_ATTR,
- "Up arrow color" },
-
- { "darrow_color",
- color_table[28],
- VAL_ATTR,
- "Down arrow color" }
-}; /* vars */
-
-
-
-/*
- * Routines to process configuration file
- */
-void create_rc(unsigned char *filename);
-int parse_rc(void);
diff --git a/gnu/usr.bin/dialog/textbox.c b/gnu/usr.bin/dialog/textbox.c
deleted file mode 100644
index 23e1283..0000000
--- a/gnu/usr.bin/dialog/textbox.c
+++ /dev/null
@@ -1,709 +0,0 @@
-/*
- * textbox.c -- implements the text box
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include "dialog.h"
-
-
-static void back_lines(int n);
-static void print_page(WINDOW *win, int height, int width);
-static void print_line(WINDOW *win, int row, int width);
-static unsigned char *get_line(void);
-static int get_search_term(WINDOW *win, unsigned char *search_term, int height, int width);
-static void print_position(WINDOW *win, int height, int width);
-
-
-static int hscroll = 0, fd, file_size, bytes_read, begin_reached = 1,
- end_reached = 0, page_length;
-static unsigned char *buf, *page;
-
-
-/*
- * Display text from a file in a dialog box.
- */
-int dialog_textbox(unsigned char *title, unsigned char *file, int height, int width)
-{
- int i, x, y, cur_x, cur_y, fpos, key = 0, dir, temp, temp1;
-#ifdef HAVE_NCURSES
- int passed_end;
-#endif
- unsigned char search_term[MAX_LEN+1], *tempptr, *found;
- WINDOW *dialog, *text;
-
- search_term[0] = '\0'; /* no search term entered yet */
-
- /* Open input file for reading */
- if ((fd = open(file, O_RDONLY)) == -1) {
- endwin();
- fprintf(stderr, "\nCan't open input file in dialog_textbox().\n");
- exit(-1);
- }
- /* Get file size. Actually, 'file_size' is the real file size - 1,
- since it's only the last byte offset from the beginning */
- if ((file_size = lseek(fd, 0, SEEK_END)) == -1) {
- endwin();
- fprintf(stderr, "\nError getting file size in dialog_textbox().\n");
- exit(-1);
- }
- /* Restore file pointer to beginning of file after getting file size */
- if (lseek(fd, 0, SEEK_SET) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit(-1);
- }
- /* Allocate space for read buffer */
- if ((buf = malloc(BUF_SIZE+1)) == NULL) {
- endwin();
- fprintf(stderr, "\nCan't allocate memory in dialog_textbox().\n");
- exit(-1);
- }
- if ((bytes_read = read(fd, buf, BUF_SIZE)) == -1) {
- endwin();
- fprintf(stderr, "\nError reading file in dialog_textbox().\n");
- exit(-1);
- }
- buf[bytes_read] = '\0'; /* mark end of valid data */
- page = buf; /* page is pointer to start of page to be displayed */
-
- /* center dialog box on screen */
- x = (COLS - width)/2;
- y = (LINES - height)/2;
-
-#ifdef HAVE_NCURSES
- if (use_shadow)
- draw_shadow(stdscr, y, x, height, width);
-#endif
- dialog = newwin(height, width, y, x);
- keypad(dialog, TRUE);
-
- /* Create window for text region, used for scrolling text */
-/* text = newwin(height-4, width-2, y+1, x+1); */
- text = subwin(dialog, height-4, width-2, y+1, x+1);
- keypad(text, TRUE);
-
- draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
-
- wattrset(dialog, border_attr);
- wmove(dialog, height-3, 0);
- waddch(dialog, ACS_LTEE);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ACS_HLINE);
- wattrset(dialog, dialog_attr);
- waddch(dialog, ACS_RTEE);
- wmove(dialog, height-2, 1);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ' ');
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- wmove(dialog, 0, (width - strlen(title))/2 - 1);
- waddch(dialog, ' ');
- waddstr(dialog, title);
- waddch(dialog, ' ');
- }
- print_button(dialog, " EXIT ", height-2, width/2-4, TRUE);
- wnoutrefresh(dialog);
- getyx(dialog, cur_y, cur_x); /* Save cursor position */
-
- /* Print first page of text */
- attr_clear(text, height-4, width-2, dialog_attr);
- print_page(text, height-4, width-2);
- print_position(dialog, height, width);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
-
- while ((key != ESC) && (key != '\n')) {
- key = wgetch(dialog);
- switch (key) {
- case 'E': /* Exit */
- case 'e':
- delwin(dialog);
- free(buf);
- close(fd);
- return 0;
- case 'g': /* First page */
- case KEY_HOME:
- if (!begin_reached) {
- begin_reached = 1;
- /* First page not in buffer? */
- if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit(-1);
- }
- if (fpos > bytes_read) { /* Yes, we have to read it in */
- if (lseek(fd, 0, SEEK_SET) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit(-1);
- }
- if ((bytes_read = read(fd, buf, BUF_SIZE)) == -1) {
- endwin();
- fprintf(stderr, "\nError reading file in dialog_textbox().\n");
- exit(-1);
- }
- buf[bytes_read] = '\0';
- }
- page = buf;
- print_page(text, height-4, width-2);
- print_position(dialog, height, width);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- break;
- case 'G': /* Last page */
-#ifdef HAVE_NCURSES
- case KEY_END:
-#endif
- end_reached = 1;
- /* Last page not in buffer? */
- if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit(-1);
- }
- if (fpos < file_size) { /* Yes, we have to read it in */
- if (lseek(fd, -BUF_SIZE, SEEK_END) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit(-1);
- }
- if ((bytes_read = read(fd, buf, BUF_SIZE)) == -1) {
- endwin();
- fprintf(stderr, "\nError reading file in dialog_textbox().\n");
- exit(-1);
- }
- buf[bytes_read] = '\0';
- }
- page = buf + bytes_read;
- back_lines(height-4);
- print_page(text, height-4, width-2);
- print_position(dialog, height, width);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- break;
- case 'K': /* Previous line */
- case 'k':
- case KEY_UP:
- if (!begin_reached) {
- back_lines(page_length+1);
-#ifdef HAVE_NCURSES
- /* We don't call print_page() here but use scrolling to ensure
- faster screen update. However, 'end_reached' and 'page_length'
- should still be updated, and 'page' should point to start of
- next page. This is done by calling get_line() in the following
- 'for' loop. */
- scrollok(text, TRUE);
- wscrl(text, -1); /* Scroll text region down one line */
- scrollok(text, FALSE);
- page_length = 0;
- passed_end = 0;
- for (i = 0; i < height-4; i++) {
- if (!i) {
- print_line(text, 0, width-2); /* print first line of page */
- wnoutrefresh(text);
- }
- else
- get_line(); /* Called to update 'end_reached' and 'page' */
- if (!passed_end)
- page_length++;
- if (end_reached && !passed_end)
- passed_end = 1;
- }
-#else
- print_page(text, height-4, width-2);
-#endif
- print_position(dialog, height, width);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- break;
- case 'B': /* Previous page */
- case 'b':
- case KEY_PPAGE:
- if (!begin_reached) {
- back_lines(page_length + height-4);
- print_page(text, height-4, width-2);
- print_position(dialog, height, width);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- break;
- case 'J': /* Next line */
- case 'j':
- case KEY_DOWN:
- if (!end_reached) {
- begin_reached = 0;
- scrollok(text, TRUE);
- scroll(text); /* Scroll text region up one line */
- scrollok(text, FALSE);
- print_line(text, height-5, width-2);
-#ifndef HAVE_NCURSES
- wmove(text, height-5, 0);
- waddch(text, ' ');
- wmove(text, height-5, width-3);
- waddch(text, ' ');
-#endif
- wnoutrefresh(text);
- print_position(dialog, height, width);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- break;
- case ' ': /* Next page */
- case KEY_NPAGE:
- if (!end_reached) {
- begin_reached = 0;
- print_page(text, height-4, width-2);
- print_position(dialog, height, width);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- break;
- case '0': /* Beginning of line */
- case 'H': /* Scroll left */
- case 'h':
- case KEY_LEFT:
- if (hscroll > 0) {
- if (key == '0')
- hscroll = 0;
- else
- hscroll--;
- /* Reprint current page to scroll horizontally */
- back_lines(page_length);
- print_page(text, height-4, width-2);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- break;
- case 'L': /* Scroll right */
- case 'l':
- case KEY_RIGHT:
- if (hscroll < MAX_LEN) {
- hscroll++;
- /* Reprint current page to scroll horizontally */
- back_lines(page_length);
- print_page(text, height-4, width-2);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- break;
- case '/': /* Forward search */
- case 'n': /* Repeat forward search */
- case '?': /* Backward search */
- case 'N': /* Repeat backward search */
- /* set search direction */
- dir = (key == '/' || key == 'n') ? 1 : 0;
- if (dir ? !end_reached : !begin_reached) {
- if (key == 'n' || key == 'N') {
- if (search_term[0] == '\0') { /* No search term yet */
- fprintf(stderr, "\a"); /* beep */
- break;
- }
- }
- else /* Get search term from user */
- if (get_search_term(text, search_term, height-4, width-2) == -1) {
- /* ESC pressed in get_search_term(). Reprint page to clear box */
- wattrset(text, dialog_attr);
- back_lines(page_length);
- print_page(text, height-4, width-2);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- break;
- }
- /* Save variables for restoring in case search term can't be found */
- tempptr = page;
- temp = begin_reached;
- temp1 = end_reached;
- if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit(-1);
- }
- fpos -= bytes_read;
- /* update 'page' to point to next (previous) line before
- forward (backward) searching */
- back_lines(dir ? page_length-1 : page_length+1);
- found = NULL;
- if (dir) /* Forward search */
- while((found = strstr(get_line(), search_term)) == NULL) {
- if (end_reached)
- break;
- }
- else /* Backward search */
- while((found = strstr(get_line(), search_term)) == NULL) {
- if (begin_reached)
- break;
- back_lines(2);
- }
- if (found == NULL) { /* not found */
- fprintf(stderr, "\a"); /* beep */
- /* Restore program state to that before searching */
- if (lseek(fd, fpos, SEEK_SET) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit(-1);
- }
- if ((bytes_read = read(fd, buf, BUF_SIZE)) == -1) {
- endwin();
- fprintf(stderr, "\nError reading file in dialog_textbox().\n");
- exit(-1);
- }
- buf[bytes_read] = '\0';
- page = tempptr;
- begin_reached = temp;
- end_reached = temp1;
- /* move 'page' to point to start of current page in order to
- re-print current page. Note that 'page' always points to
- start of next page, so this is necessary */
- back_lines(page_length);
- }
- else /* Search term found */
- back_lines(1);
- /* Reprint page */
- wattrset(text, dialog_attr);
- print_page(text, height-4, width-2);
- if (found != NULL)
- print_position(dialog, height, width);
- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh(dialog);
- }
- else /* no need to find */
- fprintf(stderr, "\a"); /* beep */
- break;
- case ESC:
- break;
- }
- }
-
- delwin(dialog);
- free(buf);
- close(fd);
- return -1; /* ESC pressed */
-}
-/* End of dialog_textbox() */
-
-
-/*
- * Go back 'n' lines in text file. Called by dialog_textbox().
- * 'page' will be updated to point to the desired line in 'buf'.
- */
-static void back_lines(int n)
-{
- int i, fpos;
-
- begin_reached = 0;
- /* We have to distinguish between end_reached and !end_reached since at end
- of file, the line is not ended by a '\n'. The code inside 'if' basically
- does a '--page' to move one character backward so as to skip '\n' of the
- previous line */
- if (!end_reached) {
- /* Either beginning of buffer or beginning of file reached? */
- if (page == buf) {
- if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in back_lines().\n");
- exit(-1);
- }
- if (fpos > bytes_read) { /* Not beginning of file yet */
- /* We've reached beginning of buffer, but not beginning of file yet,
- so read previous part of file into buffer. Note that we only
- move backward for BUF_SIZE/2 bytes, but not BUF_SIZE bytes to
- avoid re-reading again in print_page() later */
- /* Really possible to move backward BUF_SIZE/2 bytes? */
- if (fpos < BUF_SIZE/2 + bytes_read) {
- /* No, move less then */
- if (lseek(fd, 0, SEEK_SET) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in back_lines().\n");
- exit(-1);
- }
- page = buf + fpos - bytes_read;
- }
- else { /* Move backward BUF_SIZE/2 bytes */
- if (lseek(fd, -(BUF_SIZE/2 + bytes_read), SEEK_CUR) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in back_lines().\n");
- exit(-1);
- }
- page = buf + BUF_SIZE/2;
- }
- if ((bytes_read = read(fd, buf, BUF_SIZE)) == -1) {
- endwin();
- fprintf(stderr, "\nError reading file in back_lines().\n");
- exit(-1);
- }
- buf[bytes_read] = '\0';
- }
- else { /* Beginning of file reached */
- begin_reached = 1;
- return;
- }
- }
- if (*(--page) != '\n') { /* '--page' here */
- /* Something's wrong... */
- endwin();
- fprintf(stderr, "\nInternal error in back_lines().\n");
- exit(-1);
- }
- }
-
- /* Go back 'n' lines */
- for (i = 0; i < n; i++)
- do {
- if (page == buf) {
- if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in back_lines().\n");
- exit(-1);
- }
- if (fpos > bytes_read) {
- /* Really possible to move backward BUF_SIZE/2 bytes? */
- if (fpos < BUF_SIZE/2 + bytes_read) {
- /* No, move less then */
- if (lseek(fd, 0, SEEK_SET) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in back_lines().\n");
- exit(-1);
- }
- page = buf + fpos - bytes_read;
- }
- else { /* Move backward BUF_SIZE/2 bytes */
- if (lseek(fd, -(BUF_SIZE/2 + bytes_read), SEEK_CUR) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in back_lines().\n");
- exit(-1);
- }
- page = buf + BUF_SIZE/2;
- }
- if ((bytes_read = read(fd, buf, BUF_SIZE)) == -1) {
- endwin();
- fprintf(stderr, "\nError reading file in back_lines().\n");
- exit(-1);
- }
- buf[bytes_read] = '\0';
- }
- else { /* Beginning of file reached */
- begin_reached = 1;
- return;
- }
- }
- } while (*(--page) != '\n');
- page++;
-}
-/* End of back_lines() */
-
-
-/*
- * Print a new page of text. Called by dialog_textbox().
- */
-static void print_page(WINDOW *win, int height, int width)
-{
- int i, passed_end = 0;
-
- page_length = 0;
- for (i = 0; i < height; i++) {
- print_line(win, i, width);
- if (!passed_end)
- page_length++;
- if (end_reached && !passed_end)
- passed_end = 1;
- }
- wnoutrefresh(win);
-}
-/* End of print_page() */
-
-
-/*
- * Print a new line of text. Called by dialog_textbox() and print_page().
- */
-static void print_line(WINDOW *win, int row, int width)
-{
- int i, y, x;
- unsigned char *line;
-
- line = get_line();
- line += MIN(strlen(line),hscroll); /* Scroll horizontally */
- wmove(win, row, 0); /* move cursor to correct line */
- waddch(win,' ');
-#ifdef HAVE_NCURSES
- waddnstr(win, line, MIN(strlen(line),width-2));
-#else
- line[MIN(strlen(line),width-2)] = '\0';
- waddstr(win, line);
-#endif
-
- getyx(win, y, x);
- /* Clear 'residue' of previous line */
- for (i = 0; i < width-x; i++)
- waddch(win, ' ');
-}
-/* End of print_line() */
-
-
-/*
- * Return current line of text. Called by dialog_textbox() and print_line().
- * 'page' should point to start of current line before calling, and will be
- * updated to point to start of next line.
- */
-static unsigned char *get_line(void)
-{
- int i = 0, fpos;
- static unsigned char line[MAX_LEN+1];
-
- end_reached = 0;
- while (*page != '\n') {
- if (*page == '\0') { /* Either end of file or end of buffer reached */
- if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in get_line().\n");
- exit(-1);
- }
- if (fpos < file_size) { /* Not end of file yet */
- /* We've reached end of buffer, but not end of file yet, so read next
- part of file into buffer */
- if ((bytes_read = read(fd, buf, BUF_SIZE)) == -1) {
- endwin();
- fprintf(stderr, "\nError reading file in get_line().\n");
- exit(-1);
- }
- buf[bytes_read] = '\0';
- page = buf;
- }
- else {
- if (!end_reached)
- end_reached = 1;
- break;
- }
- }
- else
- if (i < MAX_LEN)
- line[i++] = *(page++);
- else {
- if (i == MAX_LEN) /* Truncate lines longer than MAX_LEN characters */
- line[i++] = '\0';
- page++;
- }
- }
- if (i <= MAX_LEN)
- line[i] = '\0';
- if (!end_reached)
- page++; /* move pass '\n' */
-
- return line;
-}
-/* End of get_line() */
-
-
-/*
- * Display a dialog box and get the search term from user
- */
-static int get_search_term(WINDOW *win, unsigned char *search_term, int height, int width)
-{
- int i, x, y, input_x = 0, scroll = 0, key = 0,
- box_height = 3, box_width = 30;
-
- x = (width - box_width)/2;
- y = (height - box_height)/2;
-#ifdef HAVE_NCURSES
- if (use_shadow)
- draw_shadow(win, y, x, box_height, box_width);
-#endif
- draw_box(win, y, x, box_height, box_width, dialog_attr, searchbox_border_attr);
- wattrset(win, searchbox_title_attr);
- wmove(win, y, x+box_width/2-4);
- waddstr(win, " Search ");
-
- box_width -= 2;
- wmove(win, y+1, x+1);
- wrefresh(win);
- search_term[0] = '\0';
- wattrset(win, searchbox_attr);
- while (key != ESC) {
- key = wgetch(win);
- switch (key) {
- case '\n':
- if (search_term[0] != '\0')
- return 0;
- break;
- case KEY_BACKSPACE:
- if (input_x || scroll) {
- if (!input_x) {
- scroll = scroll < box_width-1 ? 0 : scroll-(box_width-1);
- wmove(win, y+1, x+1);
- for (i = 0; i < box_width; i++)
- waddch(win, search_term[scroll+input_x+i] ?
- search_term[scroll+input_x+i] : ' ');
- input_x = strlen(search_term) - scroll;
- }
- else
- input_x--;
- search_term[scroll+input_x] = '\0';
- wmove(win, y+1, input_x + x+1);
- waddch(win, ' ');
- wmove(win, y+1, input_x + x+1);
- wrefresh(win);
- }
- break;
- case ESC:
- break;
- default:
- if (isprint(key))
- if (scroll+input_x < MAX_LEN) {
- search_term[scroll+input_x] = key;
- search_term[scroll+input_x+1] = '\0';
- if (input_x == box_width-1) {
- scroll++;
- wmove(win, y+1, x+1);
- for (i = 0; i < box_width-1; i++)
- waddch(win, search_term[scroll+i]);
- }
- else {
- wmove(win, y+1, input_x++ + x+1);
- waddch(win, key);
- }
- wrefresh(win);
- }
- }
- }
-
- return -1; /* ESC pressed */
-}
-/* End of get_search_term() */
-
-
-/*
- * Print current position
- */
-static void print_position(WINDOW *win, int height, int width)
-{
- int fpos, percent;
-
- if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- endwin();
- fprintf(stderr, "\nError moving file pointer in print_position().\n");
- exit(-1);
- }
- wattrset(win, position_indicator_attr);
- percent = !file_size ? 100 : ((fpos-bytes_read+page-buf)*100)/file_size;
- wmove(win, height-3, width-9);
- wprintw(win, "(%3d%%)", percent);
-}
-/* End of print_position() */
diff --git a/gnu/usr.bin/dialog/yesno.c b/gnu/usr.bin/dialog/yesno.c
deleted file mode 100644
index 7a9806d..0000000
--- a/gnu/usr.bin/dialog/yesno.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * yesno.c -- implements the yes/no box
- *
- * AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include "dialog.h"
-
-
-/*
- * Display a dialog box with two buttons - Yes and No
- */
-int dialog_yesno(unsigned char *title, unsigned char * prompt, int height, int width)
-{
- int i, x, y, key = 0, button = 0;
- WINDOW *dialog;
-
- /* center dialog box on screen */
- x = (COLS - width)/2;
- y = (LINES - height)/2;
-
-#ifdef HAVE_NCURSES
- if (use_shadow)
- draw_shadow(stdscr, y, x, height, width);
-#endif
- dialog = newwin(height, width, y, x);
- keypad(dialog, TRUE);
-
- draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset(dialog, border_attr);
- wmove(dialog, height-3, 0);
- waddch(dialog, ACS_LTEE);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ACS_HLINE);
- wattrset(dialog, dialog_attr);
- waddch(dialog, ACS_RTEE);
- wmove(dialog, height-2, 1);
- for (i = 0; i < width-2; i++)
- waddch(dialog, ' ');
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- wmove(dialog, 0, (width - strlen(title))/2 - 1);
- waddch(dialog, ' ');
- waddstr(dialog, title);
- waddch(dialog, ' ');
- }
- wattrset(dialog, dialog_attr);
- print_autowrap(dialog, prompt, width, 1, 3);
-
- x = width/2-10;
- y = height-2;
- print_button(dialog, " No ", y, x+13, FALSE);
- print_button(dialog, " Yes ", y, x, TRUE);
- wrefresh(dialog);
-
- while (key != ESC) {
- key = wgetch(dialog);
- switch (key) {
- case 'Y':
- case 'y':
- delwin(dialog);
- return 0;
- case 'N':
- case 'n':
- delwin(dialog);
- return 1;
- case KEY_BTAB:
- case TAB:
- case KEY_UP:
- case KEY_DOWN:
- case KEY_LEFT:
- case KEY_RIGHT:
- if (!button) {
- button = 1; /* Indicates "No" button is selected */
- print_button(dialog, " Yes ", y, x, FALSE);
- print_button(dialog, " No ", y, x+13, TRUE);
- }
- else {
- button = 0; /* Indicates "Yes" button is selected */
- print_button(dialog, " No ", y, x+13, FALSE);
- print_button(dialog, " Yes ", y, x, TRUE);
- }
- wrefresh(dialog);
- break;
- case ' ':
- case '\n':
- delwin(dialog);
- return button;
- case ESC:
- break;
- }
- }
-
- delwin(dialog);
- return -1; /* ESC pressed */
-}
-/* End of dialog_yesno() */
diff --git a/gnu/usr.bin/diff/fnmatch.h b/gnu/usr.bin/diff/fnmatch.h
deleted file mode 100644
index 1a653ab..0000000
--- a/gnu/usr.bin/diff/fnmatch.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
-NOTE: The canonical source of this file is maintained with the GNU C Library.
-Bugs can be reported to bug-glibc@prep.ai.mit.edu.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef _FNMATCH_H
-
-#define _FNMATCH_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
-#undef __P
-#define __P(args) args
-#else /* Not C++ or ANSI C. */
-#undef __P
-#define __P(args) ()
-/* We can get away without defining `const' here only because in this file
- it is used only inside the prototype for `fnmatch', which is elided in
- non-ANSI C where `const' is problematical. */
-#endif /* C++ or ANSI C. */
-
-
-/* We #undef these before defining them because some losing systems
- (HP-UX A.08.07 for example) define these in <unistd.h>. */
-#undef FNM_PATHNAME
-#undef FNM_NOESCAPE
-#undef FNM_PERIOD
-
-/* Bits set in the FLAGS argument to `fnmatch'. */
-#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */
-#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */
-#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */
-
-#if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE)
-#define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */
-#define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */
-#define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */
-#endif
-
-/* Value returned by `fnmatch' if STRING does not match PATTERN. */
-#define FNM_NOMATCH 1
-
-/* Match STRING against the filename pattern PATTERN,
- returning zero if it matches, FNM_NOMATCH if not. */
-extern int fnmatch __P ((const char *__pattern, const char *__string,
- int __flags));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* fnmatch.h */
diff --git a/gnu/usr.bin/diff3/COPYING b/gnu/usr.bin/diff3/COPYING
deleted file mode 100644
index a43ea21..0000000
--- a/gnu/usr.bin/diff3/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/gnu/usr.bin/diff3/diff3.c b/gnu/usr.bin/diff3/diff3.c
deleted file mode 100644
index b9952fc..0000000
--- a/gnu/usr.bin/diff3/diff3.c
+++ /dev/null
@@ -1,1693 +0,0 @@
-/* Three way file comparison program (diff3) for Project GNU.
- Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Written by Randy Smith */
-
-#if __STDC__
-#define VOID void
-#else
-#define VOID char
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include "getopt.h"
-#include "system.h"
-
-/*
- * Internal data structures and macros for the diff3 program; includes
- * data structures for both diff3 diffs and normal diffs.
- */
-
-/* Different files within a three way diff. */
-#define FILE0 0
-#define FILE1 1
-#define FILE2 2
-
-/*
- * A three way diff is built from two two-way diffs; the file which
- * the two two-way diffs share is:
- */
-#define FILEC FILE2
-
-/*
- * Different files within a two way diff.
- * FC is the common file, FO the other file.
- */
-#define FO 0
-#define FC 1
-
-/* The ranges are indexed by */
-#define START 0
-#define END 1
-
-enum diff_type {
- ERROR, /* Should not be used */
- ADD, /* Two way diff add */
- CHANGE, /* Two way diff change */
- DELETE, /* Two way diff delete */
- DIFF_ALL, /* All three are different */
- DIFF_1ST, /* Only the first is different */
- DIFF_2ND, /* Only the second */
- DIFF_3RD /* Only the third */
-};
-
-/* Two way diff */
-struct diff_block {
- int ranges[2][2]; /* Ranges are inclusive */
- char **lines[2]; /* The actual lines (may contain nulls) */
- int *lengths[2]; /* Line lengths (including newlines, if any) */
- struct diff_block *next;
-};
-
-/* Three way diff */
-
-struct diff3_block {
- enum diff_type correspond; /* Type of diff */
- int ranges[3][2]; /* Ranges are inclusive */
- char **lines[3]; /* The actual lines (may contain nulls) */
- int *lengths[3]; /* Line lengths (including newlines, if any) */
- struct diff3_block *next;
-};
-
-/*
- * Access the ranges on a diff block.
- */
-#define D_LOWLINE(diff, filenum) \
- ((diff)->ranges[filenum][START])
-#define D_HIGHLINE(diff, filenum) \
- ((diff)->ranges[filenum][END])
-#define D_NUMLINES(diff, filenum) \
- (D_HIGHLINE (diff, filenum) - D_LOWLINE (diff, filenum) + 1)
-
-/*
- * Access the line numbers in a file in a diff by relative line
- * numbers (i.e. line number within the diff itself). Note that these
- * are lvalues and can be used for assignment.
- */
-#define D_RELNUM(diff, filenum, linenum) \
- ((diff)->lines[filenum][linenum])
-#define D_RELLEN(diff, filenum, linenum) \
- ((diff)->lengths[filenum][linenum])
-
-/*
- * And get at them directly, when that should be necessary.
- */
-#define D_LINEARRAY(diff, filenum) \
- ((diff)->lines[filenum])
-#define D_LENARRAY(diff, filenum) \
- ((diff)->lengths[filenum])
-
-/*
- * Next block.
- */
-#define D_NEXT(diff) ((diff)->next)
-
-/*
- * Access the type of a diff3 block.
- */
-#define D3_TYPE(diff) ((diff)->correspond)
-
-/*
- * Line mappings based on diffs. The first maps off the top of the
- * diff, the second off of the bottom.
- */
-#define D_HIGH_MAPLINE(diff, fromfile, tofile, lineno) \
- ((lineno) \
- - D_HIGHLINE ((diff), (fromfile)) \
- + D_HIGHLINE ((diff), (tofile)))
-
-#define D_LOW_MAPLINE(diff, fromfile, tofile, lineno) \
- ((lineno) \
- - D_LOWLINE ((diff), (fromfile)) \
- + D_LOWLINE ((diff), (tofile)))
-
-/*
- * General memory allocation function.
- */
-#define ALLOCATE(number, type) \
- (type *) xmalloc ((number) * sizeof (type))
-
-/* Options variables for flags set on command line. */
-
-/* If nonzero, treat all files as text files, never as binary. */
-static int always_text;
-
-/* If nonzero, write out an ed script instead of the standard diff3 format. */
-static int edscript;
-
-/* If nonzero, in the case of overlapping diffs (type DIFF_ALL),
- preserve the lines which would normally be deleted from
- file 1 with a special flagging mechanism. */
-static int flagging;
-
-/* Number of lines to keep in identical prefix and suffix. */
-static int horizon_lines = 10;
-
-/* If nonzero, do not output information for overlapping diffs. */
-static int simple_only;
-
-/* If nonzero, do not output information for non-overlapping diffs. */
-static int overlap_only;
-
-/* If nonzero, show information for DIFF_2ND diffs. */
-static int show_2nd;
-
-/* If nonzero, include `:wq' at the end of the script
- to write out the file being edited. */
-static int finalwrite;
-
-/* If nonzero, output a merged file. */
-static int merge;
-
-static char *argv0;
-
-/*
- * Forward function declarations.
- */
-static int myread ();
-static void fatal ();
-static void perror_with_exit ();
-static struct diff_block *process_diff ();
-static struct diff3_block *make_3way_diff ();
-static void output_diff3 ();
-static int output_diff3_edscript ();
-static int output_diff3_merge ();
-static void usage ();
-
-static struct diff3_block *using_to_diff3_block ();
-static int copy_stringlist ();
-static struct diff3_block *create_diff3_block ();
-static int compare_line_list ();
-
-static char *read_diff ();
-static enum diff_type process_diff_control ();
-static char *scan_diff_line ();
-
-static struct diff3_block *reverse_diff3_blocklist ();
-
-VOID *xmalloc ();
-static VOID *xrealloc ();
-
-static char diff_program[] = DIFF_PROGRAM;
-
-static struct option longopts[] =
-{
- {"text", 0, NULL, 'a'},
- {"show-all", 0, NULL, 'A'},
- {"ed", 0, NULL, 'e'},
- {"show-overlap", 0, NULL, 'E'},
- {"label", 1, NULL, 'L'},
- {"merge", 0, NULL, 'm'},
- {"overlap-only", 0, NULL, 'x'},
- {"easy-only", 0, NULL, '3'},
- {"version", 0, NULL, 'v'},
- {0, 0, 0, 0}
-};
-
-/*
- * Main program. Calls diff twice on two pairs of input files,
- * combines the two diffs, and outputs them.
- */
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- extern char *version_string;
- int c, i;
- int mapping[3];
- int rev_mapping[3];
- int incompat;
- int conflicts_found;
- struct diff_block *thread0, *thread1, *last_block;
- struct diff3_block *diff3;
- int tag_count = 0;
- char *tag_strings[3];
- extern char *optarg;
- char *commonname;
- char **file;
- struct stat statb;
-
- incompat = 0;
-
- argv0 = argv[0];
-
- while ((c = getopt_long (argc, argv, "aeimvx3AEXL:", longopts, (int *) 0))
- != EOF)
- {
- switch (c)
- {
- case 'a':
- always_text = 1;
- break;
- case 'A':
- show_2nd = 1;
- flagging = 1;
- incompat++;
- break;
- case 'x':
- overlap_only = 1;
- incompat++;
- break;
- case '3':
- simple_only = 1;
- incompat++;
- break;
- case 'i':
- finalwrite = 1;
- break;
- case 'm':
- merge = 1;
- break;
- case 'X':
- overlap_only = 1;
- /* Falls through */
- case 'E':
- flagging = 1;
- /* Falls through */
- case 'e':
- incompat++;
- break;
- case 'v':
- fprintf (stderr, "GNU diff3 version %s\n", version_string);
- break;
- case 'L':
- /* Handle up to three -L options. */
- if (tag_count < 3)
- {
- tag_strings[tag_count++] = optarg;
- break;
- }
- /* Falls through */
- default:
- usage ();
- /* NOTREACHED */
- }
- }
-
- edscript = incompat & ~merge; /* -AeExX3 without -m implies ed script. */
- show_2nd |= ~incompat & merge; /* -m without -AeExX3 implies -A. */
- flagging |= ~incompat & merge;
-
- if (incompat > 1 /* Ensure at most one of -AeExX3. */
- || finalwrite & merge /* -i -m would rewrite input file. */
- || (tag_count && ! flagging) /* -L requires one of -AEX. */
- || argc - optind != 3)
- usage ();
-
- file = &argv[optind];
-
- for (i = tag_count; i < 3; i++)
- tag_strings[i] = file[i];
-
- /* Always compare file1 to file2, even if file2 is "-".
- This is needed for -mAeExX3. Using the file0 as
- the common file would produce wrong results, because if the
- file0-file1 diffs didn't line up with the file0-file2 diffs
- (which is entirely possible since we don't use diff's -n option),
- diff3 might report phantom changes from file1 to file2. */
-
- if (strcmp (file[2], "-") == 0)
- {
- /* Sigh. We've got standard input as the last arg. We can't
- call diff twice on stdin. Use the middle arg as the common
- file instead. */
- if (strcmp (file[0], "-") == 0 || strcmp (file[1], "-") == 0)
- fatal ("`-' specified for more than one input file");
- mapping[0] = 0;
- mapping[1] = 2;
- mapping[2] = 1;
- }
- else
- {
- /* Normal, what you'd expect */
- mapping[0] = 0;
- mapping[1] = 1;
- mapping[2] = 2;
- }
-
- for (i = 0; i < 3; i++)
- rev_mapping[mapping[i]] = i;
-
- for (i = 0; i < 3; i++)
- if (strcmp (file[i], "-") != 0)
- if (stat (file[i], &statb) < 0)
- perror_with_exit (file[i]);
- else if (S_ISDIR(statb.st_mode))
- {
- fprintf (stderr, "%s: %s: Is a directory\n", argv0, file[i]);
- exit (2);
- }
-
-
- commonname = file[rev_mapping[FILEC]];
- thread1 = process_diff (file[rev_mapping[FILE1]], commonname, &last_block);
- if (thread1)
- for (i = 0; i < 2; i++)
- {
- horizon_lines = max (horizon_lines, D_NUMLINES (thread1, i));
- horizon_lines = max (horizon_lines, D_NUMLINES (last_block, i));
- }
- thread0 = process_diff (file[rev_mapping[FILE0]], commonname, &last_block);
- diff3 = make_3way_diff (thread0, thread1);
- if (edscript)
- conflicts_found
- = output_diff3_edscript (stdout, diff3, mapping, rev_mapping,
- tag_strings[0], tag_strings[1], tag_strings[2]);
- else if (merge)
- {
- if (! freopen (file[rev_mapping[FILE0]], "r", stdin))
- perror_with_exit (file[rev_mapping[FILE0]]);
- conflicts_found
- = output_diff3_merge (stdin, stdout, diff3, mapping, rev_mapping,
- tag_strings[0], tag_strings[1], tag_strings[2]);
- if (ferror (stdin))
- fatal ("read error");
- }
- else
- {
- output_diff3 (stdout, diff3, mapping, rev_mapping);
- conflicts_found = 0;
- }
-
- if (ferror (stdout) || fclose (stdout) != 0)
- fatal ("write error");
- exit (conflicts_found);
- return conflicts_found;
-}
-
-/*
- * Explain, patiently and kindly, how to use this program. Then exit.
- */
-static void
-usage ()
-{
- fprintf (stderr, "\
-Usage: %s [options] my-file older-file your-file\n\
-Options:\n\
- [-exAEX3v] [-i|-m] [-L label1 [-L label2 [-L label3]]] [--text] [--ed]\n\
- [--merge] [--show-all] [--show-overlap] [--overlap-only] [--easy-only]\n\
- [--label=label1 [--label=label2 [--label=label3]]] [--version]\n\
- Only one of [exAEX3] is allowed\n", argv0);
- exit (2);
-}
-
-/*
- * Routines that combine the two diffs together into one. The
- * algorithm used follows:
- *
- * File2 is shared in common between the two diffs.
- * Diff02 is the diff between 0 and 2.
- * Diff12 is the diff between 1 and 2.
- *
- * 1) Find the range for the first block in File2.
- * a) Take the lowest of the two ranges (in File2) in the two
- * current blocks (one from each diff) as being the low
- * water mark. Assign the upper end of this block as
- * being the high water mark and move the current block up
- * one. Mark the block just moved over as to be used.
- * b) Check the next block in the diff that the high water
- * mark is *not* from.
- *
- * *If* the high water mark is above
- * the low end of the range in that block,
- *
- * mark that block as to be used and move the current
- * block up. Set the high water mark to the max of
- * the high end of this block and the current. Repeat b.
- *
- * 2) Find the corresponding ranges in File0 (from the blocks
- * in diff02; line per line outside of diffs) and in File1.
- * Create a diff3_block, reserving space as indicated by the ranges.
- *
- * 3) Copy all of the pointers for file2 in. At least for now,
- * do bcmp's between corresponding strings in the two diffs.
- *
- * 4) Copy all of the pointers for file0 and 1 in. Get what you
- * need from file2 (when there isn't a diff block, it's
- * identical to file2 within the range between diff blocks).
- *
- * 5) If the diff blocks you used came from only one of the two
- * strings of diffs, then that file (i.e. the one other than
- * the common file in that diff) is the odd person out. If you used
- * diff blocks from both sets, check to see if files 0 and 1 match:
- *
- * Same number of lines? If so, do a set of bcmp's (if a
- * bcmp matches; copy the pointer over; it'll be easier later
- * if you have to do any compares). If they match, 0 & 1 are
- * the same. If not, all three different.
- *
- * Then you do it again, until you run out of blocks.
- *
- */
-
-/*
- * This routine makes a three way diff (chain of diff3_block's) from two
- * two way diffs (chains of diff_block's). It is assumed that each of
- * the two diffs passed are onto the same file (i.e. that each of the
- * diffs were made "to" the same file). The three way diff pointer
- * returned will have numbering FILE0--the other file in diff02,
- * FILE1--the other file in diff12, and FILEC--the common file.
- */
-static struct diff3_block *
-make_3way_diff (thread0, thread1)
- struct diff_block *thread0, *thread1;
-{
-/*
- * This routine works on the two diffs passed to it as threads.
- * Thread number 0 is diff02, thread number 1 is diff12. The USING
- * array is set to the base of the list of blocks to be used to
- * construct each block of the three way diff; if no blocks from a
- * particular thread are to be used, that element of the using array
- * is set to 0. The elements LAST_USING array are set to the last
- * elements on each of the using lists.
- *
- * The HIGH_WATER_MARK is set to the highest line number in the common file
- * described in any of the diffs in either of the USING lists. The
- * HIGH_WATER_THREAD names the thread. Similarly the BASE_WATER_MARK
- * and BASE_WATER_THREAD describe the lowest line number in the common file
- * described in any of the diffs in either of the USING lists. The
- * HIGH_WATER_DIFF is the diff from which the HIGH_WATER_MARK was
- * taken.
- *
- * The HIGH_WATER_DIFF should always be equal to LAST_USING
- * [HIGH_WATER_THREAD]. The OTHER_DIFF is the next diff to check for
- * higher water, and should always be equal to
- * CURRENT[HIGH_WATER_THREAD ^ 0x1]. The OTHER_THREAD is the thread
- * in which the OTHER_DIFF is, and hence should always be equal to
- * HIGH_WATER_THREAD ^ 0x1.
- *
- * The variable LAST_DIFF is kept set to the last diff block produced
- * by this routine, for line correspondence purposes between that diff
- * and the one currently being worked on. It is initialized to
- * ZERO_DIFF before any blocks have been created.
- */
-
- struct diff_block
- *using[2],
- *last_using[2],
- *current[2];
-
- int
- high_water_mark;
-
- int
- high_water_thread,
- base_water_thread,
- other_thread;
-
- struct diff_block
- *high_water_diff,
- *other_diff;
-
- struct diff3_block
- *result,
- *tmpblock,
- **result_end,
- *last_diff3;
-
- static struct diff3_block zero_diff3 = {
- ERROR,
- { {0, 0}, {0, 0}, {0, 0} },
- { (char **) 0, (char **) 0, (char **) 0 },
- { (int *) 0, (int *) 0, (int *) 0 },
- (struct diff3_block *) 0
- };
-
- /* Initialization */
- result = 0;
- result_end = &result;
- current[0] = thread0; current[1] = thread1;
- last_diff3 = &zero_diff3;
-
- /* Sniff up the threads until we reach the end */
-
- while (current[0] || current[1])
- {
- using[0] = using[1] = last_using[0] = last_using[1] =
- (struct diff_block *) 0;
-
- /* Setup low and high water threads, diffs, and marks. */
- if (!current[0])
- base_water_thread = 1;
- else if (!current[1])
- base_water_thread = 0;
- else
- base_water_thread =
- (D_LOWLINE (current[0], FC) > D_LOWLINE (current[1], FC));
-
- high_water_thread = base_water_thread;
-
- high_water_diff = current[high_water_thread];
-
-#if 0
- /* low and high waters start off same diff */
- base_water_mark = D_LOWLINE (high_water_diff, FC);
-#endif
-
- high_water_mark = D_HIGHLINE (high_water_diff, FC);
-
- /* Make the diff you just got info from into the using class */
- using[high_water_thread]
- = last_using[high_water_thread]
- = high_water_diff;
- current[high_water_thread] = high_water_diff->next;
- last_using[high_water_thread]->next
- = (struct diff_block *) 0;
-
- /* And mark the other diff */
- other_thread = high_water_thread ^ 0x1;
- other_diff = current[other_thread];
-
- /* Shuffle up the ladder, checking the other diff to see if it
- needs to be incorporated. */
- while (other_diff
- && D_LOWLINE (other_diff, FC) <= high_water_mark + 1)
- {
-
- /* Incorporate this diff into the using list. Note that
- this doesn't take it off the current list */
- if (using[other_thread])
- last_using[other_thread]->next = other_diff;
- else
- using[other_thread] = other_diff;
- last_using[other_thread] = other_diff;
-
- /* Take it off the current list. Note that this following
- code assumes that other_diff enters it equal to
- current[high_water_thread ^ 0x1] */
- current[other_thread]
- = current[other_thread]->next;
- other_diff->next
- = (struct diff_block *) 0;
-
- /* Set the high_water stuff
- If this comparison is equal, then this is the last pass
- through this loop; since diff blocks within a given
- thread cannot overlap, the high_water_mark will be
- *below* the range_start of either of the next diffs. */
-
- if (high_water_mark < D_HIGHLINE (other_diff, FC))
- {
- high_water_thread ^= 1;
- high_water_diff = other_diff;
- high_water_mark = D_HIGHLINE (other_diff, FC);
- }
-
- /* Set the other diff */
- other_thread = high_water_thread ^ 0x1;
- other_diff = current[other_thread];
- }
-
- /* The using lists contain a list of all of the blocks to be
- included in this diff3_block. Create it. */
-
- tmpblock = using_to_diff3_block (using, last_using,
- base_water_thread, high_water_thread,
- last_diff3);
-
- if (!tmpblock)
- fatal ("internal error: screwup in format of diff blocks");
-
- /* Put it on the list. */
- *result_end = tmpblock;
- result_end = &tmpblock->next;
-
- /* Set up corresponding lines correctly. */
- last_diff3 = tmpblock;
- }
- return result;
-}
-
-/*
- * using_to_diff3_block:
- * This routine takes two lists of blocks (from two separate diff
- * threads) and puts them together into one diff3 block.
- * It then returns a pointer to this diff3 block or 0 for failure.
- *
- * All arguments besides using are for the convenience of the routine;
- * they could be derived from the using array.
- * LAST_USING is a pair of pointers to the last blocks in the using
- * structure.
- * LOW_THREAD and HIGH_THREAD tell which threads contain the lowest
- * and highest line numbers for File0.
- * last_diff3 contains the last diff produced in the calling routine.
- * This is used for lines mappings which would still be identical to
- * the state that diff ended in.
- *
- * A distinction should be made in this routine between the two diffs
- * that are part of a normal two diff block, and the three diffs that
- * are part of a diff3_block.
- */
-static struct diff3_block *
-using_to_diff3_block (using, last_using, low_thread, high_thread, last_diff3)
- struct diff_block
- *using[2],
- *last_using[2];
- int low_thread, high_thread;
- struct diff3_block *last_diff3;
-{
- int low[2], high[2];
- struct diff3_block *result;
- struct diff_block *ptr;
- int d, i;
-
- /* Find the range in the common file. */
- int lowc = D_LOWLINE (using[low_thread], FC);
- int highc = D_HIGHLINE (last_using[high_thread], FC);
-
- /* Find the ranges in the other files.
- If using[d] is null, that means that the file to which that diff
- refers is equivalent to the common file over this range. */
-
- for (d = 0; d < 2; d++)
- if (using[d])
- {
- low[d] = D_LOW_MAPLINE (using[d], FC, FO, lowc);
- high[d] = D_HIGH_MAPLINE (last_using[d], FC, FO, highc);
- }
- else
- {
- low[d] = D_HIGH_MAPLINE (last_diff3, FILEC, FILE0 + d, lowc);
- high[d] = D_HIGH_MAPLINE (last_diff3, FILEC, FILE0 + d, highc);
- }
-
- /* Create a block with the appropriate sizes */
- result = create_diff3_block (low[0], high[0], low[1], high[1], lowc, highc);
-
- /* Copy information for the common file.
- Return with a zero if any of the compares failed. */
-
- for (d = 0; d < 2; d++)
- for (ptr = using[d]; ptr; ptr = D_NEXT (ptr))
- {
- int result_offset = D_LOWLINE (ptr, FC) - lowc;
-
- if (!copy_stringlist (D_LINEARRAY (ptr, FC),
- D_LENARRAY (ptr, FC),
- D_LINEARRAY (result, FILEC) + result_offset,
- D_LENARRAY (result, FILEC) + result_offset,
- D_NUMLINES (ptr, FC)))
- return 0;
- }
-
- /* Copy information for file d. First deal with anything that might be
- before the first diff. */
-
- for (d = 0; d < 2; d++)
- {
- struct diff_block *u = using[d];
- int lo = low[d], hi = high[d];
-
- for (i = 0;
- i + lo < (u ? D_LOWLINE (u, FO) : hi + 1);
- i++)
- {
- D_RELNUM (result, FILE0 + d, i) = D_RELNUM (result, FILEC, i);
- D_RELLEN (result, FILE0 + d, i) = D_RELLEN (result, FILEC, i);
- }
-
- for (ptr = u; ptr; ptr = D_NEXT (ptr))
- {
- int result_offset = D_LOWLINE (ptr, FO) - lo;
- int linec;
-
- if (!copy_stringlist (D_LINEARRAY (ptr, FO),
- D_LENARRAY (ptr, FO),
- D_LINEARRAY (result, FILE0 + d) + result_offset,
- D_LENARRAY (result, FILE0 + d) + result_offset,
- D_NUMLINES (ptr, FO)))
- return 0;
-
- /* Catch the lines between here and the next diff */
- linec = D_HIGHLINE (ptr, FC) + 1 - lowc;
- for (i = D_HIGHLINE (ptr, FO) + 1 - lo;
- i < (D_NEXT (ptr) ? D_LOWLINE (D_NEXT (ptr), FO) : hi + 1) - lo;
- i++)
- {
- D_RELNUM (result, FILE0 + d, i) = D_RELNUM (result, FILEC, linec);
- D_RELLEN (result, FILE0 + d, i) = D_RELLEN (result, FILEC, linec);
- linec++;
- }
- }
- }
-
- /* Set correspond */
- if (!using[0])
- D3_TYPE (result) = DIFF_2ND;
- else if (!using[1])
- D3_TYPE (result) = DIFF_1ST;
- else
- {
- int nl0 = D_NUMLINES (result, FILE0);
- int nl1 = D_NUMLINES (result, FILE1);
-
- if (nl0 != nl1
- || !compare_line_list (D_LINEARRAY (result, FILE0),
- D_LENARRAY (result, FILE0),
- D_LINEARRAY (result, FILE1),
- D_LENARRAY (result, FILE1),
- nl0))
- D3_TYPE (result) = DIFF_ALL;
- else
- D3_TYPE (result) = DIFF_3RD;
- }
-
- return result;
-}
-
-/*
- * This routine copies pointers from a list of strings to a different list
- * of strings. If a spot in the second list is already filled, it
- * makes sure that it is filled with the same string; if not it
- * returns 0, the copy incomplete.
- * Upon successful completion of the copy, it returns 1.
- */
-static int
-copy_stringlist (fromptrs, fromlengths, toptrs, tolengths, copynum)
- char *fromptrs[], *toptrs[];
- int *fromlengths, *tolengths;
- int copynum;
-{
- register char
- **f = fromptrs,
- **t = toptrs;
- register int
- *fl = fromlengths,
- *tl = tolengths;
-
- while (copynum--)
- {
- if (*t)
- { if (*fl != *tl || bcmp (*f, *t, *fl)) return 0; }
- else
- { *t = *f ; *tl = *fl; }
-
- t++; f++; tl++; fl++;
- }
- return 1;
-}
-
-/*
- * Create a diff3_block, with ranges as specified in the arguments.
- * Allocate the arrays for the various pointers (and zero them) based
- * on the arguments passed. Return the block as a result.
- */
-static struct diff3_block *
-create_diff3_block (low0, high0, low1, high1, low2, high2)
- register int low0, high0, low1, high1, low2, high2;
-{
- struct diff3_block *result = ALLOCATE (1, struct diff3_block);
- int numlines;
-
- D3_TYPE (result) = ERROR;
- D_NEXT (result) = 0;
-
- /* Assign ranges */
- D_LOWLINE (result, FILE0) = low0;
- D_HIGHLINE (result, FILE0) = high0;
- D_LOWLINE (result, FILE1) = low1;
- D_HIGHLINE (result, FILE1) = high1;
- D_LOWLINE (result, FILE2) = low2;
- D_HIGHLINE (result, FILE2) = high2;
-
- /* Allocate and zero space */
- numlines = D_NUMLINES (result, FILE0);
- if (numlines)
- {
- D_LINEARRAY (result, FILE0) = ALLOCATE (numlines, char *);
- D_LENARRAY (result, FILE0) = ALLOCATE (numlines, int);
- bzero (D_LINEARRAY (result, FILE0), (numlines * sizeof (char *)));
- bzero (D_LENARRAY (result, FILE0), (numlines * sizeof (int)));
- }
- else
- {
- D_LINEARRAY (result, FILE0) = (char **) 0;
- D_LENARRAY (result, FILE0) = (int *) 0;
- }
-
- numlines = D_NUMLINES (result, FILE1);
- if (numlines)
- {
- D_LINEARRAY (result, FILE1) = ALLOCATE (numlines, char *);
- D_LENARRAY (result, FILE1) = ALLOCATE (numlines, int);
- bzero (D_LINEARRAY (result, FILE1), (numlines * sizeof (char *)));
- bzero (D_LENARRAY (result, FILE1), (numlines * sizeof (int)));
- }
- else
- {
- D_LINEARRAY (result, FILE1) = (char **) 0;
- D_LENARRAY (result, FILE1) = (int *) 0;
- }
-
- numlines = D_NUMLINES (result, FILE2);
- if (numlines)
- {
- D_LINEARRAY (result, FILE2) = ALLOCATE (numlines, char *);
- D_LENARRAY (result, FILE2) = ALLOCATE (numlines, int);
- bzero (D_LINEARRAY (result, FILE2), (numlines * sizeof (char *)));
- bzero (D_LENARRAY (result, FILE2), (numlines * sizeof (int)));
- }
- else
- {
- D_LINEARRAY (result, FILE2) = (char **) 0;
- D_LENARRAY (result, FILE2) = (int *) 0;
- }
-
- /* Return */
- return result;
-}
-
-/*
- * Compare two lists of lines of text.
- * Return 1 if they are equivalent, 0 if not.
- */
-static int
-compare_line_list (list1, lengths1, list2, lengths2, nl)
- char *list1[], *list2[];
- int *lengths1, *lengths2;
- int nl;
-{
- char
- **l1 = list1,
- **l2 = list2;
- int
- *lgths1 = lengths1,
- *lgths2 = lengths2;
-
- while (nl--)
- if (!*l1 || !*l2 || *lgths1 != *lgths2++
- || bcmp (*l1++, *l2++, *lgths1++))
- return 0;
- return 1;
-}
-
-/*
- * Routines to input and parse two way diffs.
- */
-
-extern char **environ;
-
-#define DIFF_CHUNK_SIZE 10000
-
-static struct diff_block *
-process_diff (filea, fileb, last_block)
- char *filea, *fileb;
- struct diff_block **last_block;
-{
- char *diff_contents;
- char *diff_limit;
- char *scan_diff;
- enum diff_type dt;
- int i;
- struct diff_block *block_list, **block_list_end, *bptr;
-
- diff_limit = read_diff (filea, fileb, &diff_contents);
- scan_diff = diff_contents;
- block_list_end = &block_list;
-
- while (scan_diff < diff_limit)
- {
- bptr = ALLOCATE (1, struct diff_block);
- bptr->lines[0] = bptr->lines[1] = (char **) 0;
- bptr->lengths[0] = bptr->lengths[1] = (int *) 0;
-
- dt = process_diff_control (&scan_diff, bptr);
- if (dt == ERROR || *scan_diff != '\n')
- {
- fprintf (stderr, "%s: diff error: ", argv0);
- do
- {
- putc (*scan_diff, stderr);
- }
- while (*scan_diff++ != '\n');
- exit (2);
- }
- scan_diff++;
-
- /* Force appropriate ranges to be null, if necessary */
- switch (dt)
- {
- case ADD:
- bptr->ranges[0][0]++;
- break;
- case DELETE:
- bptr->ranges[1][0]++;
- break;
- case CHANGE:
- break;
- default:
- fatal ("internal error: invalid diff type in process_diff");
- break;
- }
-
- /* Allocate space for the pointers for the lines from filea, and
- parcel them out among these pointers */
- if (dt != ADD)
- {
- int numlines = D_NUMLINES (bptr, 0);
- bptr->lines[0] = ALLOCATE (numlines, char *);
- bptr->lengths[0] = ALLOCATE (numlines, int);
- for (i = 0; i < numlines; i++)
- scan_diff = scan_diff_line (scan_diff,
- &(bptr->lines[0][i]),
- &(bptr->lengths[0][i]),
- diff_limit,
- '<');
- }
-
- /* Get past the separator for changes */
- if (dt == CHANGE)
- {
- if (strncmp (scan_diff, "---\n", 4))
- fatal ("invalid diff format; invalid change separator");
- scan_diff += 4;
- }
-
- /* Allocate space for the pointers for the lines from fileb, and
- parcel them out among these pointers */
- if (dt != DELETE)
- {
- int numlines = D_NUMLINES (bptr, 1);
- bptr->lines[1] = ALLOCATE (numlines, char *);
- bptr->lengths[1] = ALLOCATE (numlines, int);
- for (i = 0; i < numlines; i++)
- scan_diff = scan_diff_line (scan_diff,
- &(bptr->lines[1][i]),
- &(bptr->lengths[1][i]),
- diff_limit,
- '>');
- }
-
- /* Place this block on the blocklist. */
- *block_list_end = bptr;
- block_list_end = &bptr->next;
- }
-
- *block_list_end = 0;
- *last_block = bptr;
- return block_list;
-}
-
-/*
- * This routine will parse a normal format diff control string. It
- * returns the type of the diff (ERROR if the format is bad). All of
- * the other important information is filled into to the structure
- * pointed to by db, and the string pointer (whose location is passed
- * to this routine) is updated to point beyond the end of the string
- * parsed. Note that only the ranges in the diff_block will be set by
- * this routine.
- *
- * If some specific pair of numbers has been reduced to a single
- * number, then both corresponding numbers in the diff block are set
- * to that number. In general these numbers are interpetted as ranges
- * inclusive, unless being used by the ADD or DELETE commands. It is
- * assumed that these will be special cased in a superior routine.
- */
-
-static enum diff_type
-process_diff_control (string, db)
- char **string;
- struct diff_block *db;
-{
- char *s = *string;
- int holdnum;
- enum diff_type type;
-
-/* These macros are defined here because they can use variables
- defined in this function. Don't try this at home kids, we're
- trained professionals!
-
- Also note that SKIPWHITE only recognizes tabs and spaces, and
- that READNUM can only read positive, integral numbers */
-
-#define SKIPWHITE(s) { while (*s == ' ' || *s == '\t') s++; }
-#define READNUM(s, num) \
- { if (!isdigit (*s)) return ERROR; holdnum = 0; \
- do { holdnum = (*s++ - '0' + holdnum * 10); } \
- while (isdigit (*s)); (num) = holdnum; }
-
- /* Read first set of digits */
- SKIPWHITE (s);
- READNUM (s, db->ranges[0][START]);
-
- /* Was that the only digit? */
- SKIPWHITE (s);
- if (*s == ',')
- {
- /* Get the next digit */
- s++;
- READNUM (s, db->ranges[0][END]);
- }
- else
- db->ranges[0][END] = db->ranges[0][START];
-
- /* Get the letter */
- SKIPWHITE (s);
- switch (*s)
- {
- case 'a':
- type = ADD;
- break;
- case 'c':
- type = CHANGE;
- break;
- case 'd':
- type = DELETE;
- break;
- default:
- return ERROR; /* Bad format */
- }
- s++; /* Past letter */
-
- /* Read second set of digits */
- SKIPWHITE (s);
- READNUM (s, db->ranges[1][START]);
-
- /* Was that the only digit? */
- SKIPWHITE (s);
- if (*s == ',')
- {
- /* Get the next digit */
- s++;
- READNUM (s, db->ranges[1][END]);
- SKIPWHITE (s); /* To move to end */
- }
- else
- db->ranges[1][END] = db->ranges[1][START];
-
- *string = s;
- return type;
-}
-
-static char *
-read_diff (filea, fileb, output_placement)
- char *filea, *fileb;
- char **output_placement;
-{
- char *argv[7];
- char horizon_arg[256];
- char **ap;
- int fds[2];
- char *diff_result;
- int current_chunk_size;
- int bytes;
- int total;
- int pid, w;
- int wstatus;
-
- ap = argv;
- *ap++ = diff_program;
- if (always_text)
- *ap++ = "-a";
- sprintf (horizon_arg, "--horizon-lines=%d", horizon_lines);
- *ap++ = horizon_arg;
- *ap++ = "--";
- *ap++ = filea;
- *ap++ = fileb;
- *ap = (char *) 0;
-
- if (pipe (fds) < 0)
- perror_with_exit ("pipe failed");
-
- pid = vfork ();
- if (pid == 0)
- {
- /* Child */
- close (fds[0]);
- if (fds[1] != fileno (stdout))
- {
- dup2 (fds[1], fileno (stdout));
- close (fds[1]);
- }
- execve (diff_program, argv, environ);
- /* Avoid stdio, because the parent process's buffers are inherited. */
- write (fileno (stderr), diff_program, strlen (diff_program));
- write (fileno (stderr), ": not found\n", 12);
- _exit (2);
- }
-
- if (pid == -1)
- perror_with_exit ("fork failed");
-
- close (fds[1]); /* Prevent erroneous lack of EOF */
- current_chunk_size = DIFF_CHUNK_SIZE;
- diff_result = (char *) xmalloc (current_chunk_size);
- total = 0;
- do {
- bytes = myread (fds[0],
- diff_result + total,
- current_chunk_size - total);
- total += bytes;
- if (total == current_chunk_size)
- diff_result = (char *) xrealloc (diff_result, (current_chunk_size *= 2));
- } while (bytes);
-
- if (total != 0 && diff_result[total-1] != '\n')
- fatal ("invalid diff format; incomplete last line");
-
- *output_placement = diff_result;
-
- do
- if ((w = wait (&wstatus)) == -1)
- perror_with_exit ("wait failed");
- while (w != pid);
-
- if (! (WIFEXITED (wstatus) && WEXITSTATUS (wstatus) < 2))
- fatal ("subsidiary diff failed");
-
- return diff_result + total;
-}
-
-
-/*
- * Scan a regular diff line (consisting of > or <, followed by a
- * space, followed by text (including nulls) up to a newline.
- *
- * This next routine began life as a macro and many parameters in it
- * are used as call-by-reference values.
- */
-static char *
-scan_diff_line (scan_ptr, set_start, set_length, limit, firstchar)
- char *scan_ptr, **set_start;
- int *set_length;
- char *limit;
- char firstchar;
-{
- char *line_ptr;
-
- if (!(scan_ptr[0] == (firstchar)
- && scan_ptr[1] == ' '))
- fatal ("invalid diff format; incorrect leading line chars");
-
- *set_start = line_ptr = scan_ptr + 2;
- while (*line_ptr++ != '\n')
- ;
-
- /* Include newline if the original line ended in a newline,
- or if an edit script is being generated.
- Copy any missing newline message to stderr if an edit script is being
- generated, because edit scripts cannot handle missing newlines.
- Return the beginning of the next line. */
- *set_length = line_ptr - *set_start;
- if (line_ptr < limit && *line_ptr == '\\')
- {
- if (edscript)
- fprintf (stderr, "%s:", argv0);
- else
- --*set_length;
- line_ptr++;
- do
- {
- if (edscript)
- putc (*line_ptr, stderr);
- }
- while (*line_ptr++ != '\n');
- }
-
- return line_ptr;
-}
-
-/*
- * This routine outputs a three way diff passed as a list of
- * diff3_block's.
- * The argument MAPPING is indexed by external file number (in the
- * argument list) and contains the internal file number (from the
- * diff passed). This is important because the user expects his
- * outputs in terms of the argument list number, and the diff passed
- * may have been done slightly differently (if the last argument
- * was "-", for example).
- * REV_MAPPING is the inverse of MAPPING.
- */
-static void
-output_diff3 (outputfile, diff, mapping, rev_mapping)
- FILE *outputfile;
- struct diff3_block *diff;
- int mapping[3], rev_mapping[3];
-{
- int i;
- int oddoneout;
- char *cp;
- struct diff3_block *ptr;
- int line;
- int length;
- int dontprint;
- static int skew_increment[3] = { 2, 3, 1 }; /* 0==>2==>1==>3 */
-
- for (ptr = diff; ptr; ptr = D_NEXT (ptr))
- {
- char x[2];
-
- switch (ptr->correspond)
- {
- case DIFF_ALL:
- x[0] = '\0';
- dontprint = 3; /* Print them all */
- oddoneout = 3; /* Nobody's odder than anyone else */
- break;
- case DIFF_1ST:
- case DIFF_2ND:
- case DIFF_3RD:
- oddoneout = rev_mapping[(int) ptr->correspond - (int) DIFF_1ST];
-
- x[0] = oddoneout + '1';
- x[1] = '\0';
- dontprint = oddoneout==0;
- break;
- default:
- fatal ("internal error: invalid diff type passed to output");
- }
- fprintf (outputfile, "====%s\n", x);
-
- /* Go 0, 2, 1 if the first and third outputs are equivalent. */
- for (i = 0; i < 3;
- i = (oddoneout == 1 ? skew_increment[i] : i + 1))
- {
- int realfile = mapping[i];
- int
- lowt = D_LOWLINE (ptr, realfile),
- hight = D_HIGHLINE (ptr, realfile);
-
- fprintf (outputfile, "%d:", i + 1);
- switch (lowt - hight)
- {
- case 1:
- fprintf (outputfile, "%da\n", lowt - 1);
- break;
- case 0:
- fprintf (outputfile, "%dc\n", lowt);
- break;
- default:
- fprintf (outputfile, "%d,%dc\n", lowt, hight);
- break;
- }
-
- if (i == dontprint) continue;
-
- for (line = 0; line < hight - lowt + 1; line++)
- {
- fprintf (outputfile, " ");
- cp = D_RELNUM (ptr, realfile, line);
- length = D_RELLEN (ptr, realfile, line);
- fwrite (cp, sizeof (char), length, outputfile);
- }
- if (line != 0 && cp[length - 1] != '\n')
- fprintf (outputfile, "\n\\ No newline at end of file\n");
- }
- }
-}
-
-
-/*
- * Output to OUTPUTFILE the lines of B taken from FILENUM.
- * Double any initial '.'s; yield nonzero if any initial '.'s were doubled.
- */
-static int
-dotlines (outputfile, b, filenum)
- FILE *outputfile;
- struct diff3_block *b;
- int filenum;
-{
- int i;
- int leading_dot = 0;
-
- for (i = 0;
- i < D_NUMLINES (b, filenum);
- i++)
- {
- char *line = D_RELNUM (b, filenum, i);
- if (line[0] == '.')
- {
- leading_dot = 1;
- fprintf (outputfile, ".");
- }
- fwrite (line, sizeof (char),
- D_RELLEN (b, filenum, i), outputfile);
- }
-
- return leading_dot;
-}
-
-/*
- * Output to OUTPUTFILE a '.' line. If LEADING_DOT is nonzero,
- * also output a command that removes initial '.'s
- * starting with line START and continuing for NUM lines.
- */
-static void
-undotlines (outputfile, leading_dot, start, num)
- FILE *outputfile;
- int leading_dot, start, num;
-{
- fprintf (outputfile, ".\n");
- if (leading_dot)
- if (num == 1)
- fprintf (outputfile, "%ds/^\\.//\n", start);
- else
- fprintf (outputfile, "%d,%ds/^\\.//\n", start, start + num - 1);
-}
-
-/*
- * This routine outputs a diff3 set of blocks as an ed script. This
- * script applies the changes between file's 2 & 3 to file 1. It
- * takes the precise format of the ed script to be output from global
- * variables set during options processing. Note that it does
- * destructive things to the set of diff3 blocks it is passed; it
- * reverses their order (this gets around the problems involved with
- * changing line numbers in an ed script).
- *
- * Note that this routine has the same problem of mapping as the last
- * one did; the variable MAPPING maps from file number according to
- * the argument list to file number according to the diff passed. All
- * files listed below are in terms of the argument list.
- * REV_MAPPING is the inverse of MAPPING.
- *
- * The arguments FILE0, FILE1 and FILE2 are the strings to print
- * as the names of the three files. These may be the actual names,
- * or may be the arguments specified with -L.
- *
- * Returns 1 if conflicts were found.
- */
-
-static int
-output_diff3_edscript (outputfile, diff, mapping, rev_mapping,
- file0, file1, file2)
- FILE *outputfile;
- struct diff3_block *diff;
- int mapping[3], rev_mapping[3];
- char *file0, *file1, *file2;
-{
- int leading_dot;
- int conflicts_found = 0, conflict;
- struct diff3_block *b;
-
- for (b = reverse_diff3_blocklist (diff); b; b = b->next)
- {
- /* Must do mapping correctly. */
- enum diff_type type
- = ((b->correspond == DIFF_ALL) ?
- DIFF_ALL :
- ((enum diff_type)
- (((int) DIFF_1ST)
- + rev_mapping[(int) b->correspond - (int) DIFF_1ST])));
-
- /* If we aren't supposed to do this output block, skip it. */
- switch (type)
- {
- default: continue;
- case DIFF_2ND: if (!show_2nd) continue; conflict = 1; break;
- case DIFF_3RD: if (overlap_only) continue; conflict = 0; break;
- case DIFF_ALL: if (simple_only) continue; conflict = flagging; break;
- }
-
- if (conflict)
- {
- conflicts_found = 1;
-
-
- /* Mark end of conflict. */
-
- fprintf (outputfile, "%da\n", D_HIGHLINE (b, mapping[FILE0]));
- leading_dot = 0;
- if (type == DIFF_ALL)
- {
- if (show_2nd)
- {
- /* Append lines from FILE1. */
- fprintf (outputfile, "||||||| %s\n", file1);
- leading_dot = dotlines (outputfile, b, mapping[FILE1]);
- }
- /* Append lines from FILE2. */
- fprintf (outputfile, "=======\n");
- leading_dot |= dotlines (outputfile, b, mapping[FILE2]);
- }
- fprintf (outputfile, ">>>>>>> %s\n", file2);
- undotlines (outputfile, leading_dot,
- D_HIGHLINE (b, mapping[FILE0]) + 2,
- (D_NUMLINES (b, mapping[FILE1])
- + D_NUMLINES (b, mapping[FILE2]) + 1));
-
-
- /* Mark start of conflict. */
-
- fprintf (outputfile, "%da\n<<<<<<< %s\n",
- D_LOWLINE (b, mapping[FILE0]) - 1,
- type == DIFF_ALL ? file0 : file1);
- leading_dot = 0;
- if (type == DIFF_2ND)
- {
- /* Prepend lines from FILE1. */
- leading_dot = dotlines (outputfile, b, mapping[FILE1]);
- fprintf (outputfile, "=======\n");
- }
- undotlines (outputfile, leading_dot,
- D_LOWLINE (b, mapping[FILE0]) + 1,
- D_NUMLINES (b, mapping[FILE1]));
- }
- else if (D_NUMLINES (b, mapping[FILE2]) == 0)
- /* Write out a delete */
- {
- if (D_NUMLINES (b, mapping[FILE0]) == 1)
- fprintf (outputfile, "%dd\n",
- D_LOWLINE (b, mapping[FILE0]));
- else
- fprintf (outputfile, "%d,%dd\n",
- D_LOWLINE (b, mapping[FILE0]),
- D_HIGHLINE (b, mapping[FILE0]));
- }
- else
- /* Write out an add or change */
- {
- switch (D_NUMLINES (b, mapping[FILE0]))
- {
- case 0:
- fprintf (outputfile, "%da\n",
- D_HIGHLINE (b, mapping[FILE0]));
- break;
- case 1:
- fprintf (outputfile, "%dc\n",
- D_HIGHLINE (b, mapping[FILE0]));
- break;
- default:
- fprintf (outputfile, "%d,%dc\n",
- D_LOWLINE (b, mapping[FILE0]),
- D_HIGHLINE (b, mapping[FILE0]));
- break;
- }
-
- undotlines (outputfile, dotlines (outputfile, b, mapping[FILE2]),
- D_LOWLINE (b, mapping[FILE0]),
- D_NUMLINES (b, mapping[FILE2]));
- }
- }
- if (finalwrite) fprintf (outputfile, "w\nq\n");
- return conflicts_found;
-}
-
-/*
- * Read from INFILE and output to OUTPUTFILE a set of diff3_ blocks DIFF
- * as a merged file. This acts like 'ed file0 <[output_diff3_edscript]',
- * except that it works even for binary data or incomplete lines.
- *
- * As before, MAPPING maps from arg list file number to diff file number,
- * REV_MAPPING is its inverse,
- * and FILE0, FILE1, and FILE2 are the names of the files.
- *
- * Returns 1 if conflicts were found.
- */
-
-static int
-output_diff3_merge (infile, outputfile, diff, mapping, rev_mapping,
- file0, file1, file2)
- FILE *infile, *outputfile;
- struct diff3_block *diff;
- int mapping[3], rev_mapping[3];
- char *file0, *file1, *file2;
-{
- int c, i;
- int conflicts_found = 0, conflict;
- struct diff3_block *b;
- int linesread = 0;
-
- for (b = diff; b; b = b->next)
- {
- /* Must do mapping correctly. */
- enum diff_type type
- = ((b->correspond == DIFF_ALL) ?
- DIFF_ALL :
- ((enum diff_type)
- (((int) DIFF_1ST)
- + rev_mapping[(int) b->correspond - (int) DIFF_1ST])));
- char *format_2nd = "<<<<<<< %s\n";
-
- /* If we aren't supposed to do this output block, skip it. */
- switch (type)
- {
- default: continue;
- case DIFF_2ND: if (!show_2nd) continue; conflict = 1; break;
- case DIFF_3RD: if (overlap_only) continue; conflict = 0; break;
- case DIFF_ALL: if (simple_only) continue; conflict = flagging;
- format_2nd = "||||||| %s\n";
- break;
- }
-
- /* Copy I lines from file 0. */
- i = D_LOWLINE (b, FILE0) - linesread - 1;
- linesread += i;
- while (0 <= --i)
- do
- {
- c = getc (infile);
- if (c == EOF)
- if (ferror (infile))
- perror_with_exit ("input file");
- else if (feof (infile))
- fatal ("input file shrank");
- putc (c, outputfile);
- }
- while (c != '\n');
-
- if (conflict)
- {
- conflicts_found = 1;
-
- if (type == DIFF_ALL)
- {
- /* Put in lines from FILE0 with bracket. */
- fprintf (outputfile, "<<<<<<< %s\n", file0);
- for (i = 0;
- i < D_NUMLINES (b, mapping[FILE0]);
- i++)
- fwrite (D_RELNUM (b, mapping[FILE0], i), sizeof (char),
- D_RELLEN (b, mapping[FILE0], i), outputfile);
- }
-
- if (show_2nd)
- {
- /* Put in lines from FILE1 with bracket. */
- fprintf (outputfile, format_2nd, file1);
- for (i = 0;
- i < D_NUMLINES (b, mapping[FILE1]);
- i++)
- fwrite (D_RELNUM (b, mapping[FILE1], i), sizeof (char),
- D_RELLEN (b, mapping[FILE1], i), outputfile);
- }
-
- fprintf (outputfile, "=======\n");
- }
-
- /* Put in lines from FILE2. */
- for (i = 0;
- i < D_NUMLINES (b, mapping[FILE2]);
- i++)
- fwrite (D_RELNUM (b, mapping[FILE2], i), sizeof (char),
- D_RELLEN (b, mapping[FILE2], i), outputfile);
-
- if (conflict)
- fprintf (outputfile, ">>>>>>> %s\n", file2);
-
- /* Skip I lines in file 0. */
- i = D_NUMLINES (b, FILE0);
- linesread += i;
- while (0 <= --i)
- while ((c = getc (infile)) != '\n')
- if (c == EOF)
- if (ferror (infile))
- perror_with_exit ("input file");
- else if (feof (infile))
- {
- if (i || b->next)
- fatal ("input file shrank");
- return conflicts_found;
- }
- }
- /* Copy rest of common file. */
- while ((c = getc (infile)) != EOF || !(ferror (infile) | feof (infile)))
- putc (c, outputfile);
- return conflicts_found;
-}
-
-/*
- * Reverse the order of the list of diff3 blocks.
- */
-static struct diff3_block *
-reverse_diff3_blocklist (diff)
- struct diff3_block *diff;
-{
- register struct diff3_block *tmp, *next, *prev;
-
- for (tmp = diff, prev = (struct diff3_block *) 0;
- tmp; tmp = next)
- {
- next = tmp->next;
- tmp->next = prev;
- prev = tmp;
- }
-
- return prev;
-}
-
-static int
-myread (fd, ptr, size)
- int fd, size;
- char *ptr;
-{
- int result = read (fd, ptr, size);
- if (result < 0)
- perror_with_exit ("read failed");
- return result;
-}
-
-VOID *
-xmalloc (size)
- unsigned size;
-{
- VOID *result = (VOID *) malloc (size ? size : 1);
- if (!result)
- fatal ("virtual memory exhausted");
- return result;
-}
-
-static VOID *
-xrealloc (ptr, size)
- VOID *ptr;
- unsigned size;
-{
- VOID *result = (VOID *) realloc (ptr, size ? size : 1);
- if (!result)
- fatal ("virtual memory exhausted");
- return result;
-}
-
-static void
-fatal (string)
- char *string;
-{
- fprintf (stderr, "%s: %s\n", argv0, string);
- exit (2);
-}
-
-static void
-perror_with_exit (string)
- char *string;
-{
- int e = errno;
- fprintf (stderr, "%s: ", argv0);
- errno = e;
- perror (string);
- exit (2);
-}
diff --git a/gnu/usr.bin/diff3/getopt.c b/gnu/usr.bin/diff3/getopt.c
deleted file mode 100644
index a59a013..0000000
--- a/gnu/usr.bin/diff3/getopt.c
+++ /dev/null
@@ -1,731 +0,0 @@
-/* Getopt for GNU.
- NOTE: getopt is now part of the C library, so if you don't know what
- "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
- before changing it!
-
- Copyright (C) 1987, 88, 89, 90, 91, 92, 1993
- Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* NOTE!!! AIX requires this to be the first thing in the file.
- Do not put ANYTHING before it! */
-#if !defined (__GNUC__) && defined (_AIX)
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not __GNUC__ */
-#if defined (HAVE_ALLOCA_H) || (defined(sparc) && (defined(sun) || (!defined(USG) && !defined(SVR4) && !defined(__svr4__))))
-#include <alloca.h>
-#else
-#ifndef _AIX
-char *alloca ();
-#endif
-#endif /* alloca.h */
-#endif /* not __GNUC__ */
-
-#if !__STDC__ && !defined(const) && IN_GCC
-#define const
-#endif
-
-/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. */
-#ifndef _NO_PROTO
-#define _NO_PROTO
-#endif
-
-#include <stdio.h>
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself. This code is part of the GNU C
- Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object files,
- it is simpler to just do this in the source for each such file. */
-
-#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
-
-
-/* This needs to come after some library #include
- to get __GNU_LIBRARY__ defined. */
-#ifdef __GNU_LIBRARY__
-#undef alloca
-/* Don't include stdlib.h for non-GNU C libraries because some of them
- contain conflicting prototypes for getopt. */
-#include <stdlib.h>
-#else /* Not GNU C library. */
-#define __alloca alloca
-#endif /* GNU C library. */
-
-/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a
- long-named option. Because this is not POSIX.2 compliant, it is
- being phased out. */
-/* #define GETOPT_COMPAT */
-
-/* This version of `getopt' appears to the caller like standard Unix `getopt'
- but it behaves differently for the user, since it allows the user
- to intersperse the options with the other arguments.
-
- As `getopt' works, it permutes the elements of ARGV so that,
- when it is done, all the options precede everything else. Thus
- all application programs are extended to handle flexible argument order.
-
- Setting the environment variable POSIXLY_CORRECT disables permutation.
- Then the behavior is completely standard.
-
- GNU application programs can use a third alternative mode in which
- they can distinguish the relative order of options and other arguments. */
-
-#include "getopt.h"
-
-/* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
-char *optarg = 0;
-
-/* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
-
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns EOF, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
-/* XXX 1003.2 says this must be 1 before any call. */
-int optind = 0;
-
-/* The next char to be scanned in the option-element
- in which the last option character we returned was found.
- This allows us to pick up the scan where we left off.
-
- If this is zero, or a null string, it means resume the scan
- by advancing to the next ARGV-element. */
-
-static char *nextchar;
-
-/* Callers store zero here to inhibit the error message
- for unrecognized options. */
-
-int opterr = 1;
-
-/* Set to an option character which was unrecognized.
- This must be initialized on some systems to avoid linking in the
- system's own getopt implementation. */
-
-int optopt = '?';
-
-/* Describe how to deal with options that follow non-option ARGV-elements.
-
- If the caller did not specify anything,
- the default is REQUIRE_ORDER if the environment variable
- POSIXLY_CORRECT is defined, PERMUTE otherwise.
-
- REQUIRE_ORDER means don't recognize them as options;
- stop option processing when the first non-option is seen.
- This is what Unix does.
- This mode of operation is selected by either setting the environment
- variable POSIXLY_CORRECT, or using `+' as the first character
- of the list of option characters.
-
- PERMUTE is the default. We permute the contents of ARGV as we scan,
- so that eventually all the non-options are at the end. This allows options
- to be given in any order, even with programs that were not written to
- expect this.
-
- RETURN_IN_ORDER is an option available to programs that were written
- to expect options and other ARGV-elements in any order and that care about
- the ordering of the two. We describe each non-option ARGV-element
- as if it were the argument of an option with character code 1.
- Using `-' as the first character of the list of option characters
- selects this mode of operation.
-
- The special argument `--' forces an end of option-scanning regardless
- of the value of `ordering'. In the case of RETURN_IN_ORDER, only
- `--' can cause `getopt' to return EOF with `optind' != ARGC. */
-
-static enum
-{
- REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
-} ordering;
-
-#ifdef __GNU_LIBRARY__
-/* We want to avoid inclusion of string.h with non-GNU libraries
- because there are many ways it can cause trouble.
- On some systems, it contains special magic macros that don't work
- in GCC. */
-#include <string.h>
-#define my_index strchr
-#define my_bcopy(src, dst, n) memcpy ((dst), (src), (n))
-#else
-
-/* Avoid depending on library functions or files
- whose names are inconsistent. */
-
-char *getenv ();
-
-static char *
-my_index (str, chr)
- const char *str;
- int chr;
-{
- while (*str)
- {
- if (*str == chr)
- return (char *) str;
- str++;
- }
- return 0;
-}
-
-static void
-my_bcopy (from, to, size)
- const char *from;
- char *to;
- int size;
-{
- int i;
- for (i = 0; i < size; i++)
- to[i] = from[i];
-}
-#endif /* GNU C library. */
-
-/* Handle permutation of arguments. */
-
-/* Describe the part of ARGV that contains non-options that have
- been skipped. `first_nonopt' is the index in ARGV of the first of them;
- `last_nonopt' is the index after the last of them. */
-
-static int first_nonopt;
-static int last_nonopt;
-
-/* Exchange two adjacent subsequences of ARGV.
- One subsequence is elements [first_nonopt,last_nonopt)
- which contains all the non-options that have been skipped so far.
- The other is elements [last_nonopt,optind), which contains all
- the options processed since those non-options were skipped.
-
- `first_nonopt' and `last_nonopt' are relocated so that they describe
- the new indices of the non-options in ARGV after they are moved. */
-
-static void
-exchange (argv)
- char **argv;
-{
- int nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *);
- char **temp = (char **) __alloca (nonopts_size);
-
- /* Interchange the two blocks of data in ARGV. */
-
- my_bcopy ((char *) &argv[first_nonopt], (char *) temp, nonopts_size);
- my_bcopy ((char *) &argv[last_nonopt], (char *) &argv[first_nonopt],
- (optind - last_nonopt) * sizeof (char *));
- my_bcopy ((char *) temp,
- (char *) &argv[first_nonopt + optind - last_nonopt],
- nonopts_size);
-
- /* Update records for the slots the non-options now occupy. */
-
- first_nonopt += (optind - last_nonopt);
- last_nonopt = optind;
-}
-
-/* Scan elements of ARGV (whose length is ARGC) for option characters
- given in OPTSTRING.
-
- If an element of ARGV starts with '-', and is not exactly "-" or "--",
- then it is an option element. The characters of this element
- (aside from the initial '-') are option characters. If `getopt'
- is called repeatedly, it returns successively each of the option characters
- from each of the option elements.
-
- If `getopt' finds another option character, it returns that character,
- updating `optind' and `nextchar' so that the next call to `getopt' can
- resume the scan with the following option character or ARGV-element.
-
- If there are no more option characters, `getopt' returns `EOF'.
- Then `optind' is the index in ARGV of the first ARGV-element
- that is not an option. (The ARGV-elements have been permuted
- so that those that are not options now come last.)
-
- OPTSTRING is a string containing the legitimate option characters.
- If an option character is seen that is not listed in OPTSTRING,
- return '?' after printing an error message. If you set `opterr' to
- zero, the error message is suppressed but we still return '?'.
-
- If a char in OPTSTRING is followed by a colon, that means it wants an arg,
- so the following text in the same ARGV-element, or the text of the following
- ARGV-element, is returned in `optarg'. Two colons mean an option that
- wants an optional arg; if there is text in the current ARGV-element,
- it is returned in `optarg', otherwise `optarg' is set to zero.
-
- If OPTSTRING starts with `-' or `+', it requests different methods of
- handling the non-option ARGV-elements.
- See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
-
- Long-named options begin with `--' instead of `-'.
- Their names may be abbreviated as long as the abbreviation is unique
- or is an exact match for some defined option. If they have an
- argument, it follows the option name in the same ARGV-element, separated
- from the option name by a `=', or else the in next ARGV-element.
- When `getopt' finds a long-named option, it returns 0 if that option's
- `flag' field is nonzero, the value of the option's `val' field
- if the `flag' field is zero.
-
- The elements of ARGV aren't really const, because we permute them.
- But we pretend they're const in the prototype to be compatible
- with other systems.
-
- LONGOPTS is a vector of `struct option' terminated by an
- element containing a name which is zero.
-
- LONGIND returns the index in LONGOPT of the long-named option found.
- It is only valid when a long-named option has been found by the most
- recent call.
-
- If LONG_ONLY is nonzero, '-' as well as '--' can introduce
- long-named options. */
-
-int
-_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
- int argc;
- char *const *argv;
- const char *optstring;
- const struct option *longopts;
- int *longind;
- int long_only;
-{
- int option_index;
-
- optarg = 0;
-
- /* Initialize the internal data when the first call is made.
- Start processing options with ARGV-element 1 (since ARGV-element 0
- is the program name); the sequence of previously skipped
- non-option ARGV-elements is empty. */
-
- if (optind == 0)
- {
- first_nonopt = last_nonopt = optind = 1;
-
- nextchar = NULL;
-
- /* Determine how to handle the ordering of options and nonoptions. */
-
- if (optstring[0] == '-')
- {
- ordering = RETURN_IN_ORDER;
- ++optstring;
- }
- else if (optstring[0] == '+')
- {
- ordering = REQUIRE_ORDER;
- ++optstring;
- }
- else if (getenv ("POSIXLY_CORRECT") != NULL)
- ordering = REQUIRE_ORDER;
- else
- ordering = PERMUTE;
- }
-
- if (nextchar == NULL || *nextchar == '\0')
- {
- if (ordering == PERMUTE)
- {
- /* If we have just processed some options following some non-options,
- exchange them so that the options come first. */
-
- if (first_nonopt != last_nonopt && last_nonopt != optind)
- exchange ((char **) argv);
- else if (last_nonopt != optind)
- first_nonopt = optind;
-
- /* Now skip any additional non-options
- and extend the range of non-options previously skipped. */
-
- while (optind < argc
- && (argv[optind][0] != '-' || argv[optind][1] == '\0')
-#ifdef GETOPT_COMPAT
- && (longopts == NULL
- || argv[optind][0] != '+' || argv[optind][1] == '\0')
-#endif /* GETOPT_COMPAT */
- )
- optind++;
- last_nonopt = optind;
- }
-
- /* Special ARGV-element `--' means premature end of options.
- Skip it like a null option,
- then exchange with previous non-options as if it were an option,
- then skip everything else like a non-option. */
-
- if (optind != argc && !strcmp (argv[optind], "--"))
- {
- optind++;
-
- if (first_nonopt != last_nonopt && last_nonopt != optind)
- exchange ((char **) argv);
- else if (first_nonopt == last_nonopt)
- first_nonopt = optind;
- last_nonopt = argc;
-
- optind = argc;
- }
-
- /* If we have done all the ARGV-elements, stop the scan
- and back over any non-options that we skipped and permuted. */
-
- if (optind == argc)
- {
- /* Set the next-arg-index to point at the non-options
- that we previously skipped, so the caller will digest them. */
- if (first_nonopt != last_nonopt)
- optind = first_nonopt;
- return EOF;
- }
-
- /* If we have come to a non-option and did not permute it,
- either stop the scan or describe it to the caller and pass it by. */
-
- if ((argv[optind][0] != '-' || argv[optind][1] == '\0')
-#ifdef GETOPT_COMPAT
- && (longopts == NULL
- || argv[optind][0] != '+' || argv[optind][1] == '\0')
-#endif /* GETOPT_COMPAT */
- )
- {
- if (ordering == REQUIRE_ORDER)
- return EOF;
- optarg = argv[optind++];
- return 1;
- }
-
- /* We have found another option-ARGV-element.
- Start decoding its characters. */
-
- nextchar = (argv[optind] + 1
- + (longopts != NULL && argv[optind][1] == '-'));
- }
-
- if (longopts != NULL
- && ((argv[optind][0] == '-'
- && (argv[optind][1] == '-' || long_only))
-#ifdef GETOPT_COMPAT
- || argv[optind][0] == '+'
-#endif /* GETOPT_COMPAT */
- ))
- {
- const struct option *p;
- char *s = nextchar;
- int exact = 0;
- int ambig = 0;
- const struct option *pfound = NULL;
- int indfound;
-
- while (*s && *s != '=')
- s++;
-
- /* Test all options for either exact match or abbreviated matches. */
- for (p = longopts, option_index = 0; p->name;
- p++, option_index++)
- if (!strncmp (p->name, nextchar, s - nextchar))
- {
- if (s - nextchar == strlen (p->name))
- {
- /* Exact match found. */
- pfound = p;
- indfound = option_index;
- exact = 1;
- break;
- }
- else if (pfound == NULL)
- {
- /* First nonexact match found. */
- pfound = p;
- indfound = option_index;
- }
- else
- /* Second nonexact match found. */
- ambig = 1;
- }
-
- if (ambig && !exact)
- {
- if (opterr)
- fprintf (stderr, "%s: option `%s' is ambiguous\n",
- argv[0], argv[optind]);
- nextchar += strlen (nextchar);
- optind++;
- return '?';
- }
-
- if (pfound != NULL)
- {
- option_index = indfound;
- optind++;
- if (*s)
- {
- /* Don't test has_arg with >, because some C compilers don't
- allow it to be used on enums. */
- if (pfound->has_arg)
- optarg = s + 1;
- else
- {
- if (opterr)
- {
- if (argv[optind - 1][1] == '-')
- /* --option */
- fprintf (stderr,
- "%s: option `--%s' doesn't allow an argument\n",
- argv[0], pfound->name);
- else
- /* +option or -option */
- fprintf (stderr,
- "%s: option `%c%s' doesn't allow an argument\n",
- argv[0], argv[optind - 1][0], pfound->name);
- }
- nextchar += strlen (nextchar);
- return '?';
- }
- }
- else if (pfound->has_arg == 1)
- {
- if (optind < argc)
- optarg = argv[optind++];
- else
- {
- if (opterr)
- fprintf (stderr, "%s: option `%s' requires an argument\n",
- argv[0], argv[optind - 1]);
- nextchar += strlen (nextchar);
- return optstring[0] == ':' ? ':' : '?';
- }
- }
- nextchar += strlen (nextchar);
- if (longind != NULL)
- *longind = option_index;
- if (pfound->flag)
- {
- *(pfound->flag) = pfound->val;
- return 0;
- }
- return pfound->val;
- }
- /* Can't find it as a long option. If this is not getopt_long_only,
- or the option starts with '--' or is not a valid short
- option, then it's an error.
- Otherwise interpret it as a short option. */
- if (!long_only || argv[optind][1] == '-'
-#ifdef GETOPT_COMPAT
- || argv[optind][0] == '+'
-#endif /* GETOPT_COMPAT */
- || my_index (optstring, *nextchar) == NULL)
- {
- if (opterr)
- {
- if (argv[optind][1] == '-')
- /* --option */
- fprintf (stderr, "%s: unrecognized option `--%s'\n",
- argv[0], nextchar);
- else
- /* +option or -option */
- fprintf (stderr, "%s: unrecognized option `%c%s'\n",
- argv[0], argv[optind][0], nextchar);
- }
- nextchar = (char *) "";
- optind++;
- return '?';
- }
- }
-
- /* Look at and handle the next option-character. */
-
- {
- char c = *nextchar++;
- char *temp = my_index (optstring, c);
-
- /* Increment `optind' when we start to process its last character. */
- if (*nextchar == '\0')
- ++optind;
-
- if (temp == NULL || c == ':')
- {
- if (opterr)
- {
-#if 0
- if (c < 040 || c >= 0177)
- fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
- argv[0], c);
- else
- fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
-#else
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c);
-#endif
- }
- optopt = c;
- return '?';
- }
- if (temp[1] == ':')
- {
- if (temp[2] == ':')
- {
- /* This is an option that accepts an argument optionally. */
- if (*nextchar != '\0')
- {
- optarg = nextchar;
- optind++;
- }
- else
- optarg = 0;
- nextchar = NULL;
- }
- else
- {
- /* This is an option that requires an argument. */
- if (*nextchar != '\0')
- {
- optarg = nextchar;
- /* If we end this ARGV-element by taking the rest as an arg,
- we must advance to the next element now. */
- optind++;
- }
- else if (optind == argc)
- {
- if (opterr)
- {
-#if 0
- fprintf (stderr, "%s: option `-%c' requires an argument\n",
- argv[0], c);
-#else
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr, "%s: option requires an argument -- %c\n",
- argv[0], c);
-#endif
- }
- optopt = c;
- if (optstring[0] == ':')
- c = ':';
- else
- c = '?';
- }
- else
- /* We already incremented `optind' once;
- increment it again when taking next ARGV-elt as argument. */
- optarg = argv[optind++];
- nextchar = NULL;
- }
- }
- return c;
- }
-}
-
-int
-getopt (argc, argv, optstring)
- int argc;
- char *const *argv;
- const char *optstring;
-{
- return _getopt_internal (argc, argv, optstring,
- (const struct option *) 0,
- (int *) 0,
- 0);
-}
-
-#endif /* _LIBC or not __GNU_LIBRARY__. */
-
-#ifdef TEST
-
-/* Compile with -DTEST to make an executable for use in testing
- the above definition of `getopt'. */
-
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- int c;
- int digit_optind = 0;
-
- while (1)
- {
- int this_option_optind = optind ? optind : 1;
-
- c = getopt (argc, argv, "abc:d:0123456789");
- if (c == EOF)
- break;
-
- switch (c)
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (digit_optind != 0 && digit_optind != this_option_optind)
- printf ("digits occur in two different argv-elements.\n");
- digit_optind = this_option_optind;
- printf ("option %c\n", c);
- break;
-
- case 'a':
- printf ("option a\n");
- break;
-
- case 'b':
- printf ("option b\n");
- break;
-
- case 'c':
- printf ("option c with value `%s'\n", optarg);
- break;
-
- case '?':
- break;
-
- default:
- printf ("?? getopt returned character code 0%o ??\n", c);
- }
- }
-
- if (optind < argc)
- {
- printf ("non-option ARGV-elements: ");
- while (optind < argc)
- printf ("%s ", argv[optind++]);
- printf ("\n");
- }
-
- exit (0);
-}
-
-#endif /* TEST */
diff --git a/gnu/usr.bin/diff3/getopt.h b/gnu/usr.bin/diff3/getopt.h
deleted file mode 100644
index 45541f5..0000000
--- a/gnu/usr.bin/diff3/getopt.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Declarations for getopt.
- Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef _GETOPT_H
-#define _GETOPT_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
-extern char *optarg;
-
-/* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
-
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns EOF, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
-extern int optind;
-
-/* Callers store zero here to inhibit the error message `getopt' prints
- for unrecognized options. */
-
-extern int opterr;
-
-/* Set to an option character which was unrecognized. */
-
-extern int optopt;
-
-/* Describe the long-named options requested by the application.
- The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
- of `struct option' terminated by an element containing a name which is
- zero.
-
- The field `has_arg' is:
- no_argument (or 0) if the option does not take an argument,
- required_argument (or 1) if the option requires an argument,
- optional_argument (or 2) if the option takes an optional argument.
-
- If the field `flag' is not NULL, it points to a variable that is set
- to the value given in the field `val' when the option is found, but
- left unchanged if the option is not found.
-
- To have a long-named option do something other than set an `int' to
- a compiled-in constant, such as set a value from `optarg', set the
- option's `flag' field to zero and its `val' field to a nonzero
- value (the equivalent single-letter option character, if there is
- one). For long options that have a zero `flag' field, `getopt'
- returns the contents of the `val' field. */
-
-struct option
-{
-#if __STDC__
- const char *name;
-#else
- char *name;
-#endif
- /* has_arg can't be an enum because some compilers complain about
- type mismatches in all the code that assumes it is an int. */
- int has_arg;
- int *flag;
- int val;
-};
-
-/* Names for the values of the `has_arg' field of `struct option'. */
-
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-#if __STDC__
-#if defined(__GNU_LIBRARY__)
-/* Many other libraries have conflicting prototypes for getopt, with
- differences in the consts, in stdlib.h. To avoid compilation
- errors, only prototype getopt for the GNU C library. */
-extern int getopt (int argc, char *const *argv, const char *shortopts);
-#else /* not __GNU_LIBRARY__ */
-extern int getopt ();
-#endif /* not __GNU_LIBRARY__ */
-extern int getopt_long (int argc, char *const *argv, const char *shortopts,
- const struct option *longopts, int *longind);
-extern int getopt_long_only (int argc, char *const *argv,
- const char *shortopts,
- const struct option *longopts, int *longind);
-
-/* Internal only. Users should not call this directly. */
-extern int _getopt_internal (int argc, char *const *argv,
- const char *shortopts,
- const struct option *longopts, int *longind,
- int long_only);
-#else /* not __STDC__ */
-extern int getopt ();
-extern int getopt_long ();
-extern int getopt_long_only ();
-
-extern int _getopt_internal ();
-#endif /* not __STDC__ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GETOPT_H */
diff --git a/gnu/usr.bin/diff3/getopt1.c b/gnu/usr.bin/diff3/getopt1.c
deleted file mode 100644
index a32615c..0000000
--- a/gnu/usr.bin/diff3/getopt1.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* getopt_long and getopt_long_only entry points for GNU getopt.
- Copyright (C) 1987, 88, 89, 90, 91, 92, 1993
- Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "getopt.h"
-
-#if !__STDC__ && !defined(const) && IN_GCC
-#define const
-#endif
-
-#include <stdio.h>
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself. This code is part of the GNU C
- Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object files,
- it is simpler to just do this in the source for each such file. */
-
-#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
-
-
-/* This needs to come after some library #include
- to get __GNU_LIBRARY__ defined. */
-#ifdef __GNU_LIBRARY__
-#include <stdlib.h>
-#else
-char *getenv ();
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-int
-getopt_long (argc, argv, options, long_options, opt_index)
- int argc;
- char *const *argv;
- const char *options;
- const struct option *long_options;
- int *opt_index;
-{
- return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
-}
-
-/* Like getopt_long, but '-' as well as '--' can indicate a long option.
- If an option that starts with '-' (not '--') doesn't match a long option,
- but does match a short option, it is parsed as a short option
- instead. */
-
-int
-getopt_long_only (argc, argv, options, long_options, opt_index)
- int argc;
- char *const *argv;
- const char *options;
- const struct option *long_options;
- int *opt_index;
-{
- return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
-}
-
-
-#endif /* _LIBC or not __GNU_LIBRARY__. */
-
-#ifdef TEST
-
-#include <stdio.h>
-
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- int c;
- int digit_optind = 0;
-
- while (1)
- {
- int this_option_optind = optind ? optind : 1;
- int option_index = 0;
- static struct option long_options[] =
- {
- {"add", 1, 0, 0},
- {"append", 0, 0, 0},
- {"delete", 1, 0, 0},
- {"verbose", 0, 0, 0},
- {"create", 0, 0, 0},
- {"file", 1, 0, 0},
- {0, 0, 0, 0}
- };
-
- c = getopt_long (argc, argv, "abc:d:0123456789",
- long_options, &option_index);
- if (c == EOF)
- break;
-
- switch (c)
- {
- case 0:
- printf ("option %s", long_options[option_index].name);
- if (optarg)
- printf (" with arg %s", optarg);
- printf ("\n");
- break;
-
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (digit_optind != 0 && digit_optind != this_option_optind)
- printf ("digits occur in two different argv-elements.\n");
- digit_optind = this_option_optind;
- printf ("option %c\n", c);
- break;
-
- case 'a':
- printf ("option a\n");
- break;
-
- case 'b':
- printf ("option b\n");
- break;
-
- case 'c':
- printf ("option c with value `%s'\n", optarg);
- break;
-
- case 'd':
- printf ("option d with value `%s'\n", optarg);
- break;
-
- case '?':
- break;
-
- default:
- printf ("?? getopt returned character code 0%o ??\n", c);
- }
- }
-
- if (optind < argc)
- {
- printf ("non-option ARGV-elements: ");
- while (optind < argc)
- printf ("%s ", argv[optind++]);
- printf ("\n");
- }
-
- exit (0);
-}
-
-#endif /* TEST */
diff --git a/gnu/usr.bin/diff3/system.h b/gnu/usr.bin/diff3/system.h
deleted file mode 100644
index b17d39a..0000000
--- a/gnu/usr.bin/diff3/system.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/* System dependent declarations.
- Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
-
-This file is part of GNU DIFF.
-
-GNU DIFF is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU DIFF 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 GNU DIFF; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifndef S_ISDIR
-#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-#endif
-#ifndef S_ISREG
-#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_TIME_H
-#include <time.h>
-#else
-#include <sys/time.h>
-#endif
-
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#else
-#include <sys/file.h>
-#endif
-
-#if !HAVE_DUP2
-#define dup2(f,t) (close (t), fcntl (f,F_DUPFD,t))
-#endif
-
-#ifndef O_RDONLY
-#define O_RDONLY 0
-#endif
-
-#if HAVE_SYS_WAIT_H
-#ifndef _POSIX_VERSION
-/* Prevent the NeXT prototype using union wait from causing problems. */
-#define wait system_wait
-#endif
-#include <sys/wait.h>
-#ifndef _POSIX_VERSION
-#undef wait
-#endif
-#endif /* HAVE_SYS_WAIT_H */
-
-#ifndef WEXITSTATUS
-#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
-#undef WIFEXITED /* Avoid 4.3BSD incompatibility with Posix. */
-#endif
-#ifndef WIFEXITED
-#define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
-#if HAVE_ST_BLKSIZE
-#define STAT_BLOCKSIZE(s) (s).st_blksize
-#else
-#define STAT_BLOCKSIZE(s) (S_ISREG ((s).st_mode) ? 8192 : 4096)
-#endif
-
-#if DIRENT || defined (_POSIX_VERSION)
-#include <dirent.h>
-#ifdef direct
-#undef direct
-#endif
-#define direct dirent
-#else /* ! (DIRENT || defined (_POSIX_VERSION)) */
-#if SYSNDIR
-#include <sys/ndir.h>
-#else
-#if SYSDIR
-#include <sys/dir.h>
-#else
-#include <ndir.h>
-#endif
-#endif
-#endif /* ! (DIRENT || defined (_POSIX_VERSION)) */
-
-#if HAVE_VFORK_H
-#include <vfork.h>
-#endif
-
-#if HAVE_STRING_H || STDC_HEADERS
-#include <string.h>
-#ifndef index
-#define index strchr
-#endif
-#ifndef rindex
-#define rindex strrchr
-#endif
-#ifndef bcopy
-#define bcopy(s,d,n) memcpy (d,s,n)
-#endif
-#ifndef bcmp
-#define bcmp(s1,s2,n) memcmp (s1,s2,n)
-#endif
-#ifndef bzero
-#define bzero(s,n) memset (s,0,n)
-#endif
-#else
-#include <strings.h>
-#endif
-#if !HAVE_MEMCHR && !STDC_HEADERS
-char *memchr ();
-#endif
-
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <limits.h>
-#else
-char *getenv ();
-char *malloc ();
-char *realloc ();
-#if __STDC__ || __GNUC__
-#include "limits.h"
-#else
-#define INT_MAX 2147483647
-#define CHAR_BIT 8
-#endif
-#endif
-
-#include <errno.h>
-#if !STDC_HEADERS
-extern int errno;
-#endif
-
-#ifdef TRUE
-#undef TRUE
-#endif
-#ifdef FALSE
-#undef FALSE
-#endif
-#define TRUE 1
-#define FALSE 0
-
-#if !__STDC__
-#define volatile
-#endif
-
-#define min(a,b) ((a) <= (b) ? (a) : (b))
-#define max(a,b) ((a) >= (b) ? (a) : (b))
diff --git a/gnu/usr.bin/diff3/version.c b/gnu/usr.bin/diff3/version.c
deleted file mode 100644
index cb9d3b9..0000000
--- a/gnu/usr.bin/diff3/version.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Version number of GNU diff. */
-
-char *version_string = "2.3";
diff --git a/gnu/usr.bin/grep/tests/regress.sh b/gnu/usr.bin/grep/tests/regress.sh
deleted file mode 100644
index b947036..0000000
--- a/gnu/usr.bin/grep/tests/regress.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-# Regression test for GNU e?grep.
-# Usage: regress.sh [dir-containing-egrep]
-
-builddir=${1-..}
-
-failures=0
-
-# The Khadafy test is brought to you by Scott Anderson . . .
-$builddir/egrep -f khadafy.regexp khadafy.lines > khadafy.out
-if cmp khadafy.lines khadafy.out
-then
- rm khadafy.out
-else
- echo Khadafy test failed -- output left on khadafy.out
- failures=1
-fi
-
-# . . . and the following by Henry Spencer.
-
-awk -F: -f scriptgen.awk spencer.tests > tmp.script
-
-if sh tmp.script $builddir
-then
- rm tmp.script
- exit $failures
-else
- rm tmp.script
- exit 1
-fi
diff --git a/gnu/usr.bin/groff/eqn/eqn.cc b/gnu/usr.bin/groff/eqn/eqn.cc
deleted file mode 100644
index 744a755..0000000
--- a/gnu/usr.bin/groff/eqn/eqn.cc
+++ /dev/null
@@ -1,1162 +0,0 @@
-#ifndef lint
-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/90";
-#endif
-#define YYBYACC 1
-#line 20 "/u/jjc/groff/eqn/eqn.y"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "lib.h"
-#include "box.h"
-extern int non_empty_flag;
-char *strsave(const char *);
-int yylex();
-void yyerror(const char *);
-#line 32 "/u/jjc/groff/eqn/eqn.y"
-typedef union {
- char *str;
- box *b;
- pile_box *pb;
- matrix_box *mb;
- int n;
- column *col;
-} YYSTYPE;
-#line 26 "y.tab.c"
-#define OVER 257
-#define SMALLOVER 258
-#define SQRT 259
-#define SUB 260
-#define SUP 261
-#define LPILE 262
-#define RPILE 263
-#define CPILE 264
-#define PILE 265
-#define LEFT 266
-#define RIGHT 267
-#define TO 268
-#define FROM 269
-#define SIZE 270
-#define FONT 271
-#define ROMAN 272
-#define BOLD 273
-#define ITALIC 274
-#define FAT 275
-#define ACCENT 276
-#define BAR 277
-#define UNDER 278
-#define ABOVE 279
-#define TEXT 280
-#define QUOTED_TEXT 281
-#define FWD 282
-#define BACK 283
-#define DOWN 284
-#define UP 285
-#define MATRIX 286
-#define COL 287
-#define LCOL 288
-#define RCOL 289
-#define CCOL 290
-#define MARK 291
-#define LINEUP 292
-#define TYPE 293
-#define VCENTER 294
-#define PRIME 295
-#define SPLIT 296
-#define NOSPLIT 297
-#define UACCENT 298
-#define SPECIAL 299
-#define SPACE 300
-#define GFONT 301
-#define GSIZE 302
-#define DEFINE 303
-#define NDEFINE 304
-#define TDEFINE 305
-#define SDEFINE 306
-#define UNDEF 307
-#define IFDEF 308
-#define INCLUDE 309
-#define DELIM 310
-#define CHARTYPE 311
-#define SET 312
-#define GRFONT 313
-#define GBFONT 314
-#define YYERRCODE 256
-short yylhs[] = { -1,
- 0, 0, 6, 6, 1, 1, 1, 2, 2, 2,
- 2, 2, 3, 3, 3, 3, 4, 4, 7, 7,
- 7, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 8, 11, 11, 12, 12, 13,
- 13, 16, 16, 15, 15, 14, 14, 14, 14, 9,
- 9, 10, 10, 10,
-};
-short yylen[] = { 2,
- 0, 1, 1, 2, 1, 2, 2, 1, 3, 3,
- 5, 5, 1, 2, 3, 3, 1, 3, 1, 3,
- 5, 1, 1, 2, 2, 1, 1, 1, 3, 2,
- 2, 2, 2, 4, 5, 3, 2, 2, 2, 3,
- 3, 2, 2, 2, 2, 3, 3, 3, 3, 3,
- 3, 3, 2, 3, 1, 1, 3, 3, 4, 1,
- 2, 1, 3, 3, 4, 2, 2, 2, 2, 1,
- 1, 1, 1, 1,
-};
-short yydefred[] = { 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 22, 23, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 26, 27, 28, 0,
- 0, 3, 5, 0, 13, 0, 0, 17, 14, 70,
- 71, 0, 0, 55, 31, 32, 33, 30, 73, 74,
- 72, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 7, 0, 0, 24, 25, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 37, 38,
- 39, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 60, 0,
- 0, 29, 15, 16, 9, 0, 0, 20, 18, 40,
- 41, 0, 58, 0, 0, 0, 0, 66, 67, 68,
- 69, 34, 61, 0, 0, 0, 0, 59, 35, 0,
- 0, 0, 11, 12, 21, 0, 64, 0, 0, 65,
-};
-short yydgoto[] = { 31,
- 32, 33, 34, 35, 36, 84, 38, 43, 44, 52,
- 85, 45, 98, 99, 118, 131,
-};
-short yysindex[] = { 1488,
- 1527, -120, -120, -120, -120, -123, -249, -249, 1566, 1566,
- 1566, 1566, 0, 0, -249, -249, -249, -249, -115, 1488,
- 1488, -249, 1566, -256, -251, -249, 0, 0, 0, 1488,
- 0, 0, 0, -221, 0, -233, 1488, 0, 0, 0,
- 0, 1488, -85, 0, 0, 0, 0, 0, 0, 0,
- 0, 1488, 1566, 1566, -195, -195, -195, -195, 1566, 1566,
- 1566, 1566, -272, 0, 0, 1566, -195, 0, 0, 1566,
- 1402, 1527, 1527, 1527, 1527, 1566, 1566, 1566, 0, 0,
- 0, 1566, 0, 1488, -113, 1488, 1444, -195, -195, -195,
- -195, -195, -195, -117, -117, -117, -117, -118, 0, -195,
- -195, 0, 0, 0, 0, -167, -189, 0, 0, 0,
- 0, 1488, 0, -106, -123, 1488, -83, 0, 0, 0,
- 0, 0, 0, 1527, 1527, 1566, 1488, 0, 0, 1488,
- -105, 1488, 0, 0, 0, 1488, 0, -104, 1488, 0,
-};
-short yyrindex[] = { 41,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 1220, 46, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 85, 128, 363, 406, 0, 0,
- 0, 0, 0, 0, 0, 0, 449, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -103, 0, 0, 185, 492, 727, 770,
- 813, 856, 1091, 0, 0, 0, 0, 0, 0, 1134,
- 1177, 0, 0, 0, 0, 42, 1220, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -102, 0, 0, -101,
- 0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
-};
-short yygindex[] = { 0,
- -7, -69, 3, -66, 458, 9, -26, 52, 27, -63,
- -32, 54, 0, -35, 2, -59,
-};
-#define YYTABLESIZE 1865
-short yytable[] = { 49,
- 8, 50, 42, 39, 105, 116, 122, 63, 37, 8,
- 109, 113, 64, 65, 94, 95, 96, 97, 128, 137,
- 140, 56, 57, 62, 68, 63, 76, 77, 69, 83,
- 40, 41, 51, 53, 54, 72, 73, 86, 71, 132,
- 1, 10, 78, 79, 80, 2, 74, 75, 66, 108,
- 10, 129, 70, 114, 133, 134, 46, 47, 48, 135,
- 87, 81, 123, 83, 82, 0, 59, 60, 61, 62,
- 76, 126, 138, 0, 103, 104, 83, 106, 0, 83,
- 78, 79, 80, 0, 42, 0, 78, 79, 80, 72,
- 73, 0, 0, 42, 8, 0, 119, 120, 121, 81,
- 124, 125, 82, 0, 0, 81, 0, 0, 82, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,
- 127, 0, 83, 8, 130, 8, 8, 43, 0, 0,
- 0, 83, 0, 0, 0, 10, 43, 0, 0, 0,
- 130, 51, 0, 0, 139, 117, 117, 117, 117, 0,
- 0, 0, 0, 0, 0, 0, 40, 41, 0, 40,
- 41, 0, 40, 41, 10, 112, 10, 10, 94, 95,
- 96, 97, 112, 136, 136, 56, 57, 62, 42, 63,
- 0, 0, 0, 0, 36, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 42, 0, 42,
- 42, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 43, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 43, 0, 43, 43, 0, 0, 0, 0, 0, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 0, 0,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 0, 0, 0,
- 0, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 36,
- 0, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
- 0, 0, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 0, 0, 44, 42, 42, 42, 42, 42, 42, 42,
- 42, 44, 0, 0, 0, 42, 42, 42, 42, 0,
- 42, 42, 0, 42, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 0, 0, 45, 43, 43, 43, 43,
- 43, 43, 43, 43, 45, 0, 0, 0, 43, 43,
- 43, 43, 0, 43, 43, 0, 43, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 36, 36, 0, 36, 36, 0, 0, 53, 0,
- 0, 0, 36, 36, 0, 0, 44, 53, 0, 0,
- 36, 36, 36, 36, 0, 0, 55, 56, 57, 58,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,
- 67, 0, 36, 0, 0, 44, 0, 44, 44, 0,
- 0, 47, 0, 0, 0, 0, 0, 0, 0, 45,
- 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 89, 0, 0, 0, 0, 90, 91, 92, 93,
- 0, 0, 0, 100, 0, 0, 0, 101, 45, 0,
- 45, 45, 0, 107, 0, 110, 0, 0, 0, 111,
- 0, 0, 53, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 53, 0, 53, 53, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 47, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 47, 0, 47, 47, 0, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 0, 0,
- 0, 44, 44, 44, 44, 44, 44, 44, 44, 0,
- 0, 0, 0, 44, 44, 44, 44, 0, 44, 44,
- 0, 44, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 0, 0, 0, 45, 45, 45, 45, 45, 45,
- 45, 45, 0, 0, 0, 0, 45, 45, 45, 45,
- 0, 45, 45, 0, 45, 53, 53, 53, 53, 53,
- 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
- 53, 53, 53, 53, 0, 0, 46, 53, 53, 53,
- 53, 53, 53, 53, 53, 46, 0, 0, 0, 53,
- 53, 53, 53, 0, 53, 53, 0, 53, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 0, 0, 48,
- 47, 47, 47, 47, 47, 47, 47, 47, 48, 0,
- 0, 0, 47, 47, 47, 47, 0, 47, 47, 0,
- 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 49, 0, 0, 0, 0, 0, 0, 0,
- 46, 49, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 46,
- 0, 46, 46, 0, 0, 51, 0, 0, 0, 0,
- 0, 0, 0, 48, 51, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 48, 0, 48, 48, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 49, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 49, 0, 49, 49, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 51, 0,
- 51, 51, 0, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 0, 0, 0, 46, 46, 46, 46, 46,
- 46, 46, 46, 0, 0, 0, 0, 46, 46, 46,
- 46, 0, 46, 46, 0, 46, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 0, 0, 0, 48, 48,
- 48, 48, 48, 48, 48, 48, 0, 0, 0, 0,
- 48, 48, 48, 48, 0, 48, 48, 0, 48, 49,
- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
- 49, 49, 49, 49, 49, 49, 49, 49, 0, 0,
- 50, 49, 49, 49, 49, 49, 49, 49, 49, 50,
- 0, 0, 0, 49, 49, 49, 49, 0, 49, 49,
- 0, 49, 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 0, 0, 52, 51, 51, 51, 51, 51, 51,
- 51, 51, 52, 0, 0, 0, 51, 51, 51, 51,
- 0, 51, 51, 0, 51, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
- 0, 0, 0, 0, 50, 54, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 50, 0, 50, 50, 0, 0, 19,
- 0, 0, 0, 0, 0, 0, 0, 52, 19, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 52, 0, 52, 52,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
- 0, 54, 54, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 19, 0, 19, 19, 0, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 0, 0, 0, 50,
- 50, 50, 50, 50, 50, 50, 50, 0, 0, 0,
- 0, 50, 50, 50, 50, 0, 50, 50, 0, 50,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 0,
- 29, 0, 52, 52, 52, 52, 52, 52, 52, 52,
- 0, 0, 0, 0, 52, 52, 52, 52, 0, 52,
- 52, 0, 52, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 29, 0, 0, 54, 54, 54, 54, 54,
- 54, 54, 54, 0, 0, 0, 0, 54, 54, 54,
- 54, 0, 54, 54, 0, 54, 19, 19, 19, 0,
- 0, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 27, 29, 0, 19, 19,
- 19, 19, 19, 19, 19, 19, 0, 0, 0, 0,
- 19, 19, 19, 19, 0, 19, 19, 0, 19, 0,
- 0, 0, 0, 0, 30, 0, 102, 28, 0, 0,
- 0, 0, 0, 0, 0, 29, 0, 27, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 30, 0, 0, 28,
- 0, 0, 0, 0, 29, 0, 0, 0, 0, 0,
- 0, 27, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 0, 0, 28, 0, 0, 0, 0, 0, 0,
- 27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,
- 0, 0, 28, 0, 0, 0, 0, 0, 0, 27,
- 1, 0, 0, 2, 3, 4, 5, 6, 0, 0,
- 0, 7, 8, 9, 10, 11, 12, 0, 0, 0,
- 0, 13, 14, 15, 16, 17, 18, 19, 30, 0,
- 0, 28, 20, 21, 22, 23, 0, 24, 25, 0,
- 26, 0, 1, 0, 0, 2, 3, 4, 5, 6,
- 115, 0, 0, 7, 8, 9, 10, 11, 12, 0,
- 0, 0, 0, 13, 14, 15, 16, 17, 18, 19,
- 0, 0, 0, 0, 20, 21, 22, 23, 0, 24,
- 25, 0, 26, 0, 0, 0, 1, 0, 0, 2,
- 3, 4, 5, 6, 0, 0, 0, 7, 8, 9,
- 10, 11, 12, 0, 0, 0, 0, 13, 14, 15,
- 16, 17, 18, 19, 0, 0, 0, 0, 20, 21,
- 22, 23, 0, 24, 25, 1, 26, 0, 2, 3,
- 4, 5, 6, 0, 0, 0, 7, 8, 9, 10,
- 11, 12, 0, 0, 0, 0, 13, 14, 15, 16,
- 17, 18, 19, 0, 0, 0, 0, 0, 0, 22,
- 23, 0, 24, 25, 0, 26, 0, 2, 3, 4,
- 5, 6, 0, 0, 0, 7, 8, 9, 10, 11,
- 12, 0, 0, 0, 0, 13, 14, 15, 16, 17,
- 18, 19, 0, 0, 0, 0, 0, 0, 22, 23,
- 0, 24, 25, 0, 26,
-};
-short yycheck[] = { 123,
- 0, 125, 123, 1, 74, 123, 125, 123, 0, 9,
- 77, 125, 20, 21, 287, 288, 289, 290, 125, 125,
- 125, 125, 125, 125, 281, 125, 260, 261, 280, 37,
- 280, 281, 6, 7, 8, 257, 258, 123, 30, 123,
- 0, 0, 276, 277, 278, 0, 268, 269, 22, 76,
- 9, 115, 26, 86, 124, 125, 3, 4, 5, 126,
- 52, 295, 98, 71, 298, -1, 15, 16, 17, 18,
- 260, 261, 132, -1, 72, 73, 84, 75, -1, 87,
- 276, 277, 278, -1, 0, -1, 276, 277, 278, 257,
- 258, -1, -1, 9, 94, -1, 95, 96, 97, 295,
- 268, 269, 298, -1, -1, 295, -1, -1, 298, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 127,
- 112, -1, 130, 123, 116, 125, 126, 0, -1, -1,
- -1, 139, -1, -1, -1, 94, 9, -1, -1, -1,
- 132, 115, -1, -1, 136, 94, 95, 96, 97, -1,
- -1, -1, -1, -1, -1, -1, 280, 281, -1, 280,
- 281, -1, 280, 281, 123, 279, 125, 126, 287, 288,
- 289, 290, 279, 279, 279, 279, 279, 279, 94, 279,
- -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 123, -1, 125,
- 126, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 94, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 123, -1, 125, 126, -1, -1, -1, -1, -1, 259,
- 260, 261, 262, 263, 264, 265, 266, 267, -1, -1,
- 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
- 280, 281, 282, 283, 284, 285, 286, -1, -1, -1,
- -1, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 125,
- -1, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, -1, -1,
- -1, -1, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 257, 258, 259, 260, 261, 262, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
- -1, -1, 0, 279, 280, 281, 282, 283, 284, 285,
- 286, 9, -1, -1, -1, 291, 292, 293, 294, -1,
- 296, 297, -1, 299, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, -1, -1, 0, 279, 280, 281, 282,
- 283, 284, 285, 286, 9, -1, -1, -1, 291, 292,
- 293, 294, -1, 296, 297, -1, 299, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, -1, 260, 261, -1, -1, 0, -1,
- -1, -1, 268, 269, -1, -1, 94, 9, -1, -1,
- 276, 277, 278, 279, -1, -1, 9, 10, 11, 12,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 295,
- 23, -1, 298, -1, -1, 123, -1, 125, 126, -1,
- -1, 0, -1, -1, -1, -1, -1, -1, -1, 94,
- 9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 53, 54, -1, -1, -1, -1, 59, 60, 61, 62,
- -1, -1, -1, 66, -1, -1, -1, 70, 123, -1,
- 125, 126, -1, 76, -1, 78, -1, -1, -1, 82,
- -1, -1, 94, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 123, -1, 125, 126, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 94, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 123, -1, 125, 126, -1, 257,
- 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, 273, 274, 275, -1, -1,
- -1, 279, 280, 281, 282, 283, 284, 285, 286, -1,
- -1, -1, -1, 291, 292, 293, 294, -1, 296, 297,
- -1, 299, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, -1, -1, -1, 279, 280, 281, 282, 283, 284,
- 285, 286, -1, -1, -1, -1, 291, 292, 293, 294,
- -1, 296, 297, -1, 299, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, 275, -1, -1, 0, 279, 280, 281,
- 282, 283, 284, 285, 286, 9, -1, -1, -1, 291,
- 292, 293, 294, -1, 296, 297, -1, 299, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, -1, -1, 0,
- 279, 280, 281, 282, 283, 284, 285, 286, 9, -1,
- -1, -1, 291, 292, 293, 294, -1, 296, 297, -1,
- 299, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
- 94, 9, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 123,
- -1, 125, 126, -1, -1, 0, -1, -1, -1, -1,
- -1, -1, -1, 94, 9, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 123, -1, 125, 126, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 94, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 123, -1, 125, 126, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 94,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 123, -1,
- 125, 126, -1, 257, 258, 259, 260, 261, 262, 263,
- 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
- 274, 275, -1, -1, -1, 279, 280, 281, 282, 283,
- 284, 285, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, -1, 296, 297, -1, 299, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, -1, -1, -1, 279, 280,
- 281, 282, 283, 284, 285, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, -1, 296, 297, -1, 299, 257,
- 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, 273, 274, 275, -1, -1,
- 0, 279, 280, 281, 282, 283, 284, 285, 286, 9,
- -1, -1, -1, 291, 292, 293, 294, -1, 296, 297,
- -1, 299, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, -1, -1, 0, 279, 280, 281, 282, 283, 284,
- 285, 286, 9, -1, -1, -1, 291, 292, 293, 294,
- -1, 296, 297, -1, 299, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, -1, -1, 94, 9, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 123, -1, 125, 126, -1, -1, 0,
- -1, -1, -1, -1, -1, -1, -1, 94, 9, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 123, -1, 125, 126,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 94, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 123,
- -1, 125, 126, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 94, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 123, -1, 125, 126, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
- 270, 271, 272, 273, 274, 275, -1, -1, -1, 279,
- 280, 281, 282, 283, 284, 285, 286, -1, -1, -1,
- -1, 291, 292, 293, 294, -1, 296, 297, -1, 299,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, -1,
- 9, -1, 279, 280, 281, 282, 283, 284, 285, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, -1, 296,
- 297, -1, 299, 257, 258, 259, 260, 261, 262, 263,
- 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
- 274, 275, 9, -1, -1, 279, 280, 281, 282, 283,
- 284, 285, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, -1, 296, 297, -1, 299, 257, 258, 259, -1,
- -1, 262, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 94, 9, -1, 279, 280,
- 281, 282, 283, 284, 285, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, -1, 296, 297, -1, 299, -1,
- -1, -1, -1, -1, 123, -1, 125, 126, -1, -1,
- -1, -1, -1, -1, -1, 9, -1, 94, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 123, -1, -1, 126,
- -1, -1, -1, -1, 9, -1, -1, -1, -1, -1,
- -1, 94, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 123, -1, -1, 126, -1, -1, -1, -1, -1, -1,
- 94, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 123,
- -1, -1, 126, -1, -1, -1, -1, -1, -1, 94,
- 259, -1, -1, 262, 263, 264, 265, 266, -1, -1,
- -1, 270, 271, 272, 273, 274, 275, -1, -1, -1,
- -1, 280, 281, 282, 283, 284, 285, 286, 123, -1,
- -1, 126, 291, 292, 293, 294, -1, 296, 297, -1,
- 299, -1, 259, -1, -1, 262, 263, 264, 265, 266,
- 267, -1, -1, 270, 271, 272, 273, 274, 275, -1,
- -1, -1, -1, 280, 281, 282, 283, 284, 285, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, -1, 296,
- 297, -1, 299, -1, -1, -1, 259, -1, -1, 262,
- 263, 264, 265, 266, -1, -1, -1, 270, 271, 272,
- 273, 274, 275, -1, -1, -1, -1, 280, 281, 282,
- 283, 284, 285, 286, -1, -1, -1, -1, 291, 292,
- 293, 294, -1, 296, 297, 259, 299, -1, 262, 263,
- 264, 265, 266, -1, -1, -1, 270, 271, 272, 273,
- 274, 275, -1, -1, -1, -1, 280, 281, 282, 283,
- 284, 285, 286, -1, -1, -1, -1, -1, -1, 293,
- 294, -1, 296, 297, -1, 299, -1, 262, 263, 264,
- 265, 266, -1, -1, -1, 270, 271, 272, 273, 274,
- 275, -1, -1, -1, -1, 280, 281, 282, 283, 284,
- 285, 286, -1, -1, -1, -1, -1, -1, 293, 294,
- -1, 296, 297, -1, 299,
-};
-#define YYFINAL 31
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 314
-#if YYDEBUG
-char *yyname[] = {
-"end-of-file",0,0,0,0,0,0,0,0,"'\\t'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'","'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"OVER",
-"SMALLOVER","SQRT","SUB","SUP","LPILE","RPILE","CPILE","PILE","LEFT","RIGHT",
-"TO","FROM","SIZE","FONT","ROMAN","BOLD","ITALIC","FAT","ACCENT","BAR","UNDER",
-"ABOVE","TEXT","QUOTED_TEXT","FWD","BACK","DOWN","UP","MATRIX","COL","LCOL",
-"RCOL","CCOL","MARK","LINEUP","TYPE","VCENTER","PRIME","SPLIT","NOSPLIT",
-"UACCENT","SPECIAL","SPACE","GFONT","GSIZE","DEFINE","NDEFINE","TDEFINE",
-"SDEFINE","UNDEF","IFDEF","INCLUDE","DELIM","CHARTYPE","SET","GRFONT","GBFONT",
-};
-char *yyrule[] = {
-"$accept : top",
-"top :",
-"top : equation",
-"equation : mark",
-"equation : equation mark",
-"mark : from_to",
-"mark : MARK mark",
-"mark : LINEUP mark",
-"from_to : sqrt_over",
-"from_to : sqrt_over TO from_to",
-"from_to : sqrt_over FROM sqrt_over",
-"from_to : sqrt_over FROM sqrt_over TO from_to",
-"from_to : sqrt_over FROM sqrt_over FROM from_to",
-"sqrt_over : script",
-"sqrt_over : SQRT sqrt_over",
-"sqrt_over : sqrt_over OVER sqrt_over",
-"sqrt_over : sqrt_over SMALLOVER sqrt_over",
-"script : nonsup",
-"script : simple SUP script",
-"nonsup : simple",
-"nonsup : simple SUB nonsup",
-"nonsup : simple SUB simple SUP script",
-"simple : TEXT",
-"simple : QUOTED_TEXT",
-"simple : SPLIT QUOTED_TEXT",
-"simple : NOSPLIT TEXT",
-"simple : '^'",
-"simple : '~'",
-"simple : '\\t'",
-"simple : '{' equation '}'",
-"simple : PILE pile_arg",
-"simple : LPILE pile_arg",
-"simple : RPILE pile_arg",
-"simple : CPILE pile_arg",
-"simple : MATRIX '{' column_list '}'",
-"simple : LEFT delim equation RIGHT delim",
-"simple : LEFT delim equation",
-"simple : simple BAR",
-"simple : simple UNDER",
-"simple : simple PRIME",
-"simple : simple ACCENT simple",
-"simple : simple UACCENT simple",
-"simple : ROMAN simple",
-"simple : BOLD simple",
-"simple : ITALIC simple",
-"simple : FAT simple",
-"simple : FONT text simple",
-"simple : SIZE text simple",
-"simple : FWD number simple",
-"simple : BACK number simple",
-"simple : UP number simple",
-"simple : DOWN number simple",
-"simple : TYPE text simple",
-"simple : VCENTER simple",
-"simple : SPECIAL text simple",
-"number : text",
-"pile_element_list : equation",
-"pile_element_list : pile_element_list ABOVE equation",
-"pile_arg : '{' pile_element_list '}'",
-"pile_arg : number '{' pile_element_list '}'",
-"column_list : column",
-"column_list : column_list column",
-"column_element_list : equation",
-"column_element_list : column_element_list ABOVE equation",
-"column_arg : '{' column_element_list '}'",
-"column_arg : number '{' column_element_list '}'",
-"column : COL column_arg",
-"column : LCOL column_arg",
-"column : RCOL column_arg",
-"column : CCOL column_arg",
-"text : TEXT",
-"text : QUOTED_TEXT",
-"delim : text",
-"delim : '{'",
-"delim : '}'",
-};
-#endif
-#define yyclearin (yychar=(-1))
-#define yyerrok (yyerrflag=0)
-#ifdef YYSTACKSIZE
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#endif
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH 500
-#endif
-#endif
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short yyss[YYSTACKSIZE];
-YYSTYPE yyvs[YYSTACKSIZE];
-#define yystacksize YYSTACKSIZE
-#define YYABORT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-int
-yyparse()
-{
- register int yym, yyn, yystate;
-#if YYDEBUG
- register char *yys;
- extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
-yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
-#ifdef lint
- goto yynewerror;
-#endif
-yynewerror:
- yyerror("syntax error");
-#ifdef lint
- goto yyerrlab;
-#endif
-yyerrlab:
- ++yynerrs;
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
-#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
- }
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
-case 2:
-#line 126 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].b->top_level(); non_empty_flag = 1; }
-break;
-case 3:
-#line 131 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = yyvsp[0].b; }
-break;
-case 4:
-#line 133 "/u/jjc/groff/eqn/eqn.y"
-{
- list_box *lb = yyvsp[-1].b->to_list_box();
- if (!lb)
- lb = new list_box(yyvsp[-1].b);
- lb->append(yyvsp[0].b);
- yyval.b = lb;
- }
-break;
-case 5:
-#line 144 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = yyvsp[0].b; }
-break;
-case 6:
-#line 146 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_mark_box(yyvsp[0].b); }
-break;
-case 7:
-#line 148 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_lineup_box(yyvsp[0].b); }
-break;
-case 8:
-#line 153 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = yyvsp[0].b; }
-break;
-case 9:
-#line 155 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_limit_box(yyvsp[-2].b, 0, yyvsp[0].b); }
-break;
-case 10:
-#line 157 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_limit_box(yyvsp[-2].b, yyvsp[0].b, 0); }
-break;
-case 11:
-#line 159 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_limit_box(yyvsp[-4].b, yyvsp[-2].b, yyvsp[0].b); }
-break;
-case 12:
-#line 161 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_limit_box(yyvsp[-4].b, make_limit_box(yyvsp[-2].b, yyvsp[0].b, 0), 0); }
-break;
-case 13:
-#line 166 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = yyvsp[0].b; }
-break;
-case 14:
-#line 168 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_sqrt_box(yyvsp[0].b); }
-break;
-case 15:
-#line 170 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_over_box(yyvsp[-2].b, yyvsp[0].b); }
-break;
-case 16:
-#line 172 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_small_over_box(yyvsp[-2].b, yyvsp[0].b); }
-break;
-case 17:
-#line 177 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = yyvsp[0].b; }
-break;
-case 18:
-#line 179 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_script_box(yyvsp[-2].b, 0, yyvsp[0].b); }
-break;
-case 19:
-#line 184 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = yyvsp[0].b; }
-break;
-case 20:
-#line 186 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_script_box(yyvsp[-2].b, yyvsp[0].b, 0); }
-break;
-case 21:
-#line 188 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_script_box(yyvsp[-4].b, yyvsp[-2].b, yyvsp[0].b); }
-break;
-case 22:
-#line 193 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = split_text(yyvsp[0].str); }
-break;
-case 23:
-#line 195 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new quoted_text_box(yyvsp[0].str); }
-break;
-case 24:
-#line 197 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = split_text(yyvsp[0].str); }
-break;
-case 25:
-#line 199 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new quoted_text_box(yyvsp[0].str); }
-break;
-case 26:
-#line 201 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new half_space_box; }
-break;
-case 27:
-#line 203 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new space_box; }
-break;
-case 28:
-#line 205 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new tab_box; }
-break;
-case 29:
-#line 207 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = yyvsp[-1].b; }
-break;
-case 30:
-#line 209 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].pb->set_alignment(CENTER_ALIGN); yyval.b = yyvsp[0].pb; }
-break;
-case 31:
-#line 211 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].pb->set_alignment(LEFT_ALIGN); yyval.b = yyvsp[0].pb; }
-break;
-case 32:
-#line 213 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].pb->set_alignment(RIGHT_ALIGN); yyval.b = yyvsp[0].pb; }
-break;
-case 33:
-#line 215 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].pb->set_alignment(CENTER_ALIGN); yyval.b = yyvsp[0].pb; }
-break;
-case 34:
-#line 217 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = yyvsp[-1].mb; }
-break;
-case 35:
-#line 219 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_delim_box(yyvsp[-3].str, yyvsp[-2].b, yyvsp[0].str); }
-break;
-case 36:
-#line 221 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_delim_box(yyvsp[-1].str, yyvsp[0].b, 0); }
-break;
-case 37:
-#line 223 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_overline_box(yyvsp[-1].b); }
-break;
-case 38:
-#line 225 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_underline_box(yyvsp[-1].b); }
-break;
-case 39:
-#line 227 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_prime_box(yyvsp[-1].b); }
-break;
-case 40:
-#line 229 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_accent_box(yyvsp[-2].b, yyvsp[0].b); }
-break;
-case 41:
-#line 231 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_uaccent_box(yyvsp[-2].b, yyvsp[0].b); }
-break;
-case 42:
-#line 233 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new font_box(strsave(get_grfont()), yyvsp[0].b); }
-break;
-case 43:
-#line 235 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new font_box(strsave(get_gbfont()), yyvsp[0].b); }
-break;
-case 44:
-#line 237 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new font_box(strsave(get_gfont()), yyvsp[0].b); }
-break;
-case 45:
-#line 239 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new fat_box(yyvsp[0].b); }
-break;
-case 46:
-#line 241 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new font_box(yyvsp[-1].str, yyvsp[0].b); }
-break;
-case 47:
-#line 243 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new size_box(yyvsp[-1].str, yyvsp[0].b); }
-break;
-case 48:
-#line 245 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new hmotion_box(yyvsp[-1].n, yyvsp[0].b); }
-break;
-case 49:
-#line 247 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new hmotion_box(-yyvsp[-1].n, yyvsp[0].b); }
-break;
-case 50:
-#line 249 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new vmotion_box(yyvsp[-1].n, yyvsp[0].b); }
-break;
-case 51:
-#line 251 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new vmotion_box(-yyvsp[-1].n, yyvsp[0].b); }
-break;
-case 52:
-#line 253 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].b->set_spacing_type(yyvsp[-1].str); yyval.b = yyvsp[0].b; }
-break;
-case 53:
-#line 255 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = new vcenter_box(yyvsp[0].b); }
-break;
-case 54:
-#line 257 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.b = make_special_box(yyvsp[-1].str, yyvsp[0].b); }
-break;
-case 55:
-#line 262 "/u/jjc/groff/eqn/eqn.y"
-{
- int n;
- if (sscanf(yyvsp[0].str, "%d", &n) == 1)
- yyval.n = n;
- a_delete yyvsp[0].str;
- }
-break;
-case 56:
-#line 272 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.pb = new pile_box(yyvsp[0].b); }
-break;
-case 57:
-#line 274 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[-2].pb->append(yyvsp[0].b); yyval.pb = yyvsp[-2].pb; }
-break;
-case 58:
-#line 279 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.pb = yyvsp[-1].pb; }
-break;
-case 59:
-#line 281 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[-1].pb->set_space(yyvsp[-3].n); yyval.pb = yyvsp[-1].pb; }
-break;
-case 60:
-#line 286 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.mb = new matrix_box(yyvsp[0].col); }
-break;
-case 61:
-#line 288 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[-1].mb->append(yyvsp[0].col); yyval.mb = yyvsp[-1].mb; }
-break;
-case 62:
-#line 293 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.col = new column(yyvsp[0].b); }
-break;
-case 63:
-#line 295 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[-2].col->append(yyvsp[0].b); yyval.col = yyvsp[-2].col; }
-break;
-case 64:
-#line 300 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.col = yyvsp[-1].col; }
-break;
-case 65:
-#line 302 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[-1].col->set_space(yyvsp[-3].n); yyval.col = yyvsp[-1].col; }
-break;
-case 66:
-#line 307 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].col->set_alignment(CENTER_ALIGN); yyval.col = yyvsp[0].col; }
-break;
-case 67:
-#line 309 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].col->set_alignment(LEFT_ALIGN); yyval.col = yyvsp[0].col; }
-break;
-case 68:
-#line 311 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].col->set_alignment(RIGHT_ALIGN); yyval.col = yyvsp[0].col; }
-break;
-case 69:
-#line 313 "/u/jjc/groff/eqn/eqn.y"
-{ yyvsp[0].col->set_alignment(CENTER_ALIGN); yyval.col = yyvsp[0].col; }
-break;
-case 70:
-#line 317 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.str = yyvsp[0].str; }
-break;
-case 71:
-#line 319 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.str = yyvsp[0].str; }
-break;
-case 72:
-#line 324 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.str = yyvsp[0].str; }
-break;
-case 73:
-#line 326 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.str = strsave("{"); }
-break;
-case 74:
-#line 328 "/u/jjc/groff/eqn/eqn.y"
-{ yyval.str = strsave("}"); }
-break;
-#line 1107 "y.tab.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
- }
-#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
-to state %d\n", *yyssp, yystate);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- return (1);
-yyaccept:
- return (0);
-}
diff --git a/gnu/usr.bin/groff/eqn/eqn.tab.h b/gnu/usr.bin/groff/eqn/eqn.tab.h
deleted file mode 100644
index 9a8b3cb..0000000
--- a/gnu/usr.bin/groff/eqn/eqn.tab.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#define OVER 257
-#define SMALLOVER 258
-#define SQRT 259
-#define SUB 260
-#define SUP 261
-#define LPILE 262
-#define RPILE 263
-#define CPILE 264
-#define PILE 265
-#define LEFT 266
-#define RIGHT 267
-#define TO 268
-#define FROM 269
-#define SIZE 270
-#define FONT 271
-#define ROMAN 272
-#define BOLD 273
-#define ITALIC 274
-#define FAT 275
-#define ACCENT 276
-#define BAR 277
-#define UNDER 278
-#define ABOVE 279
-#define TEXT 280
-#define QUOTED_TEXT 281
-#define FWD 282
-#define BACK 283
-#define DOWN 284
-#define UP 285
-#define MATRIX 286
-#define COL 287
-#define LCOL 288
-#define RCOL 289
-#define CCOL 290
-#define MARK 291
-#define LINEUP 292
-#define TYPE 293
-#define VCENTER 294
-#define PRIME 295
-#define SPLIT 296
-#define NOSPLIT 297
-#define UACCENT 298
-#define SPECIAL 299
-#define SPACE 300
-#define GFONT 301
-#define GSIZE 302
-#define DEFINE 303
-#define NDEFINE 304
-#define TDEFINE 305
-#define SDEFINE 306
-#define UNDEF 307
-#define IFDEF 308
-#define INCLUDE 309
-#define DELIM 310
-#define CHARTYPE 311
-#define SET 312
-#define GRFONT 313
-#define GBFONT 314
-typedef union {
- char *str;
- box *b;
- pile_box *pb;
- matrix_box *mb;
- int n;
- column *col;
-} YYSTYPE;
-extern YYSTYPE yylval;
diff --git a/gnu/usr.bin/groff/pic/pic.cc b/gnu/usr.bin/groff/pic/pic.cc
deleted file mode 100644
index a85ff8b..0000000
--- a/gnu/usr.bin/groff/pic/pic.cc
+++ /dev/null
@@ -1,5166 +0,0 @@
-#ifndef lint
-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/90";
-#endif
-#define YYBYACC 1
-#line 20 "/u/jjc/groff/pic/pic.y"
-#include "pic.h"
-#include "ptable.h"
-#include "object.h"
-
-extern int delim_flag;
-extern void do_copy(const char *);
-extern void copy_rest_thru(const char *, const char *);
-extern void copy_file_thru(const char *, const char *, const char *);
-extern void push_body(const char *);
-extern void do_for(char *var, double from, double to,
- int by_is_multiplicative, double by, char *body);
-extern void do_lookahead();
-
-#undef fmod
-#undef rand
-
-extern "C" {
- double fmod(double, double);
- int rand();
-}
-
-/* Maximum number of characters produced by printf("%g") */
-#define GDIGITS 14
-
-int yylex();
-void yyerror(const char *);
-
-void reset(const char *nm);
-void reset_all();
-
-place *lookup_label(const char *);
-void define_label(const char *label, const place *pl);
-
-direction current_direction;
-position current_position;
-
-implement_ptable(place)
-
-PTABLE(place) top_table;
-
-PTABLE(place) *current_table = &top_table;
-saved_state *current_saved_state = 0;
-
-object_list olist;
-
-const char *ordinal_postfix(int n);
-const char *object_type_name(object_type type);
-char *format_number(const char *form, double n);
-char *do_sprintf(const char *form, const double *v, int nv);
-
-#line 73 "/u/jjc/groff/pic/pic.y"
-typedef union {
- char *str;
- int n;
- double x;
- struct { double x, y; } pair;
- struct { double x; char *body; } if_data;
- struct { char *str; const char *filename; int lineno; } lstr;
- struct { double *v; int nv; int maxv; } dv;
- struct { double val; int is_multiplicative; } by;
- place pl;
- object *obj;
- corner crn;
- path *pth;
- object_spec *spec;
- saved_state *pstate;
- graphics_state state;
- object_type obtype;
-} YYSTYPE;
-#line 76 "y.tab.c"
-#define LABEL 257
-#define VARIABLE 258
-#define NUMBER 259
-#define TEXT 260
-#define COMMAND_LINE 261
-#define DELIMITED 262
-#define ORDINAL 263
-#define TH 264
-#define LEFT_ARROW_HEAD 265
-#define RIGHT_ARROW_HEAD 266
-#define DOUBLE_ARROW_HEAD 267
-#define LAST 268
-#define UP 269
-#define DOWN 270
-#define LEFT 271
-#define RIGHT 272
-#define BOX 273
-#define CIRCLE 274
-#define ELLIPSE 275
-#define ARC 276
-#define LINE 277
-#define ARROW 278
-#define MOVE 279
-#define SPLINE 280
-#define HEIGHT 281
-#define RADIUS 282
-#define WIDTH 283
-#define DIAMETER 284
-#define FROM 285
-#define TO 286
-#define AT 287
-#define WITH 288
-#define BY 289
-#define THEN 290
-#define DOTTED 291
-#define DASHED 292
-#define CHOP 293
-#define SAME 294
-#define INVISIBLE 295
-#define LJUST 296
-#define RJUST 297
-#define ABOVE 298
-#define BELOW 299
-#define OF 300
-#define THE 301
-#define WAY 302
-#define BETWEEN 303
-#define AND 304
-#define HERE 305
-#define DOT_N 306
-#define DOT_E 307
-#define DOT_W 308
-#define DOT_S 309
-#define DOT_NE 310
-#define DOT_SE 311
-#define DOT_NW 312
-#define DOT_SW 313
-#define DOT_C 314
-#define DOT_START 315
-#define DOT_END 316
-#define DOT_X 317
-#define DOT_Y 318
-#define DOT_HT 319
-#define DOT_WID 320
-#define DOT_RAD 321
-#define SIN 322
-#define COS 323
-#define ATAN2 324
-#define LOG 325
-#define EXP 326
-#define SQRT 327
-#define K_MAX 328
-#define K_MIN 329
-#define INT 330
-#define RAND 331
-#define COPY 332
-#define THRU 333
-#define TOP 334
-#define BOTTOM 335
-#define UPPER 336
-#define LOWER 337
-#define SH 338
-#define PRINT 339
-#define CW 340
-#define CCW 341
-#define FOR 342
-#define DO 343
-#define IF 344
-#define ELSE 345
-#define ANDAND 346
-#define OROR 347
-#define NOTEQUAL 348
-#define EQUALEQUAL 349
-#define LESSEQUAL 350
-#define GREATEREQUAL 351
-#define LEFT_CORNER 352
-#define RIGHT_CORNER 353
-#define CENTER 354
-#define END 355
-#define START 356
-#define RESET 357
-#define UNTIL 358
-#define PLOT 359
-#define THICKNESS 360
-#define FILL 361
-#define ALIGNED 362
-#define SPRINTF 363
-#define COMMAND 364
-#define DEFINE 365
-#define UNDEF 366
-#define YYERRCODE 256
-short yylhs[] = { -1,
- 0, 0, 16, 17, 17, 28, 28, 29, 29, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 31, 30,
- 30, 32, 33, 30, 34, 35, 30, 36, 30, 30,
- 37, 30, 30, 30, 38, 38, 38, 26, 26, 27,
- 27, 27, 39, 7, 23, 23, 2, 2, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 4, 4, 4,
- 15, 15, 15, 15, 40, 42, 15, 15, 41, 41,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 43, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 25, 25, 24, 24, 19, 19,
- 6, 6, 6, 6, 6, 6, 44, 44, 5, 5,
- 13, 13, 13, 13, 13, 14, 14, 14, 22, 22,
- 21, 21, 8, 8, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 11, 11, 12, 12, 12, 10, 10,
- 10, 10, 10, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1,
-};
-short yylen[] = { 2,
- 1, 1, 3, 1, 3, 0, 1, 1, 2, 3,
- 4, 1, 1, 1, 1, 1, 2, 2, 0, 3,
- 2, 0, 0, 7, 0, 0, 6, 0, 10, 1,
- 0, 4, 1, 1, 2, 2, 3, 1, 2, 1,
- 1, 1, 0, 5, 0, 2, 1, 1, 3, 3,
- 3, 3, 3, 3, 3, 3, 2, 0, 2, 3,
- 1, 4, 4, 4, 0, 0, 6, 1, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 3, 0, 4, 3, 3, 3, 3, 2, 2, 3,
- 2, 3, 2, 3, 2, 3, 3, 3, 3, 3,
- 3, 2, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 2, 1, 5, 0, 3, 1, 1,
- 1, 3, 3, 5, 5, 6, 1, 4, 3, 3,
- 1, 2, 2, 3, 1, 1, 1, 3, 1, 3,
- 1, 2, 2, 2, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 2, 3, 1, 1, 2, 1, 4,
- 3, 3, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
- 2, 2, 1, 1, 2, 2, 2, 2, 1, 1,
- 1, 1, 1, 2, 2, 2, 2, 2, 3, 3,
- 3, 3, 3, 3, 2, 3, 4, 4, 6, 4,
- 4, 4, 6, 6, 4, 4, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 2,
-};
-short yydefred[] = { 0,
- 8, 0, 2, 0, 0, 0, 0, 125, 16, 12,
- 13, 14, 15, 71, 72, 73, 74, 75, 76, 77,
- 78, 0, 19, 0, 0, 0, 0, 0, 0, 0,
- 65, 82, 0, 4, 0, 0, 79, 68, 0, 9,
- 0, 0, 0, 0, 25, 0, 146, 202, 203, 149,
- 151, 187, 188, 145, 174, 175, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 185, 186, 0, 0, 193,
- 194, 199, 201, 200, 0, 0, 0, 0, 0, 131,
- 129, 147, 0, 0, 0, 0, 0, 0, 41, 0,
- 38, 0, 0, 0, 0, 0, 0, 0, 0, 35,
- 0, 0, 0, 0, 0, 31, 3, 0, 113, 114,
- 115, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 102, 0, 0, 0, 111, 112,
- 119, 120, 121, 122, 116, 117, 0, 0, 124, 0,
- 118, 36, 0, 0, 10, 0, 22, 0, 20, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 189,
- 191, 195, 197, 190, 192, 196, 198, 0, 0, 0,
- 0, 0, 0, 0, 0, 137, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 204, 205, 206, 207, 208, 0,
- 142, 0, 0, 163, 155, 156, 157, 158, 159, 160,
- 161, 0, 154, 152, 153, 39, 0, 0, 57, 0,
- 0, 0, 43, 0, 0, 0, 0, 81, 127, 0,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 166, 100, 0, 169, 0, 0, 101, 0, 0, 0,
- 0, 0, 37, 0, 0, 0, 0, 0, 0, 62,
- 0, 11, 0, 26, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 227, 0, 216, 140, 0, 150, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 148, 132,
- 133, 162, 0, 0, 53, 0, 0, 0, 0, 0,
- 51, 0, 0, 50, 49, 0, 66, 83, 32, 173,
- 0, 0, 0, 164, 0, 168, 0, 0, 23, 0,
- 217, 218, 0, 220, 221, 222, 0, 0, 225, 226,
- 0, 0, 0, 0, 0, 44, 0, 126, 0, 0,
- 172, 171, 165, 0, 0, 27, 0, 0, 0, 134,
- 138, 0, 0, 0, 0, 70, 67, 170, 24, 46,
- 219, 223, 224, 136, 0, 0, 0, 0, 28, 0,
- 0, 29,
-};
-short yydgoto[] = { 2,
- 105, 179, 107, 396, 90, 91, 33, 92, 93, 262,
- 263, 264, 108, 95, 34, 3, 35, 36, 96, 223,
- 97, 98, 376, 336, 109, 100, 101, 241, 5, 38,
- 46, 283, 374, 158, 350, 401, 243, 39, 329, 114,
- 387, 369, 115, 202,
-};
-short yysindex[] = { -52,
- 0, 0, 0, 5088, -25, -11, 21, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -243, 0,10878, -206,11047, -204,11505, 19,10878,
- 0, 0, -275, 0, -52,10742, 0, 0, -42, 0,
- -52,11047, 16, -239, 0, -165, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 71, 93, 98, 106, 108,
- 120, 139, 147, 153, 156, 0, 0, -110, 44, 0,
- 0, 0, 0, 0,11177,11047,11505,11505, 1055, 0,
- 0, 0, -45, -61, 2441, -19, 747, 312, 0,10878,
- 0, 152,11047,11047, 1515, -89, -228, -61, -98, 0,
- 637, -38,10878, -52, -52, 0, 0, 9673, 0, 0,
- 0,11829,11829,11829,11829,11505,11505,11505,11505,11621,
-11621,11621, 2099,11726, 0,11829,11829,11829, 0, 0,
- 0, 0, 0, 0, 0, 0,11505,11829, 0, 1527,
- 0, 0, -41,10520, 0,11047, 0, -32, 0,11047,
-11047,11047,11047,11047,11047,11047,11047,11047, 9002, 0,
- 0, 0, 0, 0, 0, 0, 0, 1494, 183, 187,
- -4, -30, 143, 143, -53, 0,11505,11505,11505,11505,
-11505,11505,11505,11621,11505,11505,11505,11505,11505,11505,
-11505,11621, -43, 199, 0, 0, 0, 0, 0, -17,
- 0,11726,11726, 0, 0, 0, 0, 0, 0, 0,
- 0, 168, 0, 0, 0, 0,11505, 143, 0,11047,
-11047,11505, 0,11047,11047, -229, -229, 0, 0, 148,
- 5088, 171, 15, 0, 1527, 1527, 1527, 1527, 1527, 1527,
- 1527, 1527, 1055, -19, -19, -19, 1989, 699, 747, 23,
- 0, 0, 2428, 0,11284, 648, 0, 1527, 1527, 1527,
- 1527, 1527, 0, -11, 21, 0, 0, 0, -61, 0,
- -19, 0, 17, 0, 240, 244, 242, 249, 255, 257,
- 256, 258, 260, 0, 262, 0, 0,11621, 0, -9,
- -27, 184, 252, 252, 1, 1, 1527, -34, 40, 1,
- 155, 155, 143, 143, 143, 143, -22, 199, 0, 0,
- 0, 0, 1088, -27, 0, 1048, -40, 1, 42, -27,
- 0, 1048, -40, 0, 0, 47, 0, 0, 0, 0,
- 747, 1989, 1989, 0, 48, 0, 1076, 187, 0, -51,
- 0, 0,11047, 0, 0, 0,11047,11047, 0, 0,
- 100, 5,11621,11621,11505, 0,11505, 0, 5088, 1989,
- 0, 0, 0, -51, 49, 0, 272, 284, 287, 0,
- 0, 30, -19, 1487, 1527, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,11385, -14,11505, 1527, 0, 1527,
- 72, 0,
-};
-short yyrindex[] = { 219,
- 0, 0, 0, 344, 109, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 22, 0, 0, 0,
- 0, 0, 57, 0, 65, 58, 0, 0, 390, 0,
-10629, 0, 0, 412, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9146, 0,
- 0, 0, 0, 4421, 8691, 9247, 0, 0, 0, 500,
- 0, 0, 0, 0, 411, 0, 564, 0, 0, 0,
-10123, 0, 508, 5512, 5512, 0, 0, 122, 0, 0,
- 0, 66, 9595, 9353, 9486, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9700, 9804, 9909, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,10013, 0, 4967,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 304, 0, 227,
- 0, 0, 469, 577, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3104, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,10455, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5284, 5391, 5708, 5815, 6132, 6239,
- 6556, 6663, 0, 6980, 7087, 7404, 0, 0, 0, 0,
- 0, 0, 8873, 0, 0, 0, 0, 7511, 7828, 7935,
- 8252, 8359, 0,10222, 1933, 1729, 3046, 919, 947, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3982, 4089, 3211, 3543, 2226, 2333, 4860, 8766, 0, 2665,
- 1787, 1894, 909, 1016, 1348, 1455, 0, 3650, 0, 0,
- 0, 0, 0, 8845, 0, 27, 28, 2772, 0, 140,
- 0, 194, 195, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 304, 0, 0, 547,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 575, 0,
- 0, 0, 0, 547, 0, 0, 0, 0, 0, 0,
- 0, 0, 4528, 33, 52, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 50, 0, 51,
- 0, 0,
-};
-short yygindex[] = { 0,
- -24, 498, -99, 0, -56, 237, 0, 0, -59, 0,
- 0, -215, 515, -74, -117, 161, 0, 0, 1810, -73,
- 0, 0, 18, 0, 26, 368, -68, 14, 364, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
-};
-#define YYTABLESIZE 12185
-short yytable[] = { 89,
- 244, 153, 200, 111, 229, 89, 1, 198, 196, 200,
- 197, 150, 199, 4, 198, 196, 44, 197, 204, 199,
- 212, 34, 213, 212, 225, 213, 235, 56, 180, 37,
- 8, 226, 232, 40, 195, 211, 280, 200, 212, 298,
- 213, 340, 198, 196, 226, 197, 41, 199, 117, 99,
- 86, 102, 86, 110, 154, 99, 30, 61, 112, 201,
- 178, 151, 183, 184, 6, 89, 201, 235, 56, 116,
- 235, 56, 212, 261, 213, 89, 156, 267, 43, 228,
- 34, 42, 212, 363, 213, 235, 56, 368, 89, 45,
- 367, 394, 128, 157, 201, 128, 159, 245, 246, 247,
- 248, 249, 250, 251, 252, 253, 253, 253, 7, 266,
- 160, 268, 269, 270, 34, 30, 61, 234, 235, 235,
- 56, 7, 271, 272, 89, 99, 371, 372, 318, 253,
- 325, 327, 161, 29, 331, 333, 238, 162, 99, 52,
- 380, 7, 212, 37, 213, 163, 34, 164, 7, 30,
- 61, 235, 56, 7, 388, 320, 321, 6, 89, 165,
- 170, 171, 301, 302, 303, 304, 305, 306, 307, 308,
- 310, 311, 312, 313, 314, 315, 316, 253, 166, 37,
- 52, 30, 61, 52, 342, 343, 167, 266, 266, 6,
- 89, 200, 168, 55, 54, 169, 198, 261, 52, 7,
- 233, 199, 323, 346, 7, 324, 326, 328, 348, 330,
- 332, 47, 227, 47, 7, 152, 273, 50, 6, 50,
- 200, 239, 51, 296, 51, 198, 196, 297, 197, 284,
- 199, 7, 52, 299, 55, 54, 201, 55, 54, 319,
- 347, 172, 173, 232, 210, 195, 7, 300, 201, 236,
- 237, 386, 55, 54, 203, 205, 206, 207, 208, 209,
- 322, 334, 335, 338, 52, 185, 37, 370, 186, 131,
- 131, 131, 337, 253, 240, 242, 339, 201, 349, 344,
- 351, 364, 261, 261, 352, 353, 55, 54, 200, 354,
- 235, 56, 362, 198, 196, 355, 197, 356, 199, 357,
- 359, 358, 360, 366, 373, 234, 375, 381, 390, 6,
- 261, 232, 391, 195, 174, 175, 235, 56, 55, 54,
- 189, 190, 191, 192, 392, 89, 235, 393, 399, 235,
- 89, 89, 89, 402, 89, 89, 89, 89, 253, 253,
- 384, 6, 385, 1, 47, 201, 89, 89, 89, 89,
- 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
- 89, 89, 89, 89, 89, 7, 7, 7, 7, 7,
- 398, 7, 400, 235, 56, 58, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 33,
- 278, 389, 59, 60, 37, 176, 177, 113, 118, 0,
- 0, 0, 222, 52, 0, 89, 89, 0, 0, 0,
- 47, 21, 0, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 89, 89, 89, 89, 52,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 0, 7, 7, 7, 7, 7, 7, 33, 0,
- 7, 47, 7, 0, 47, 0, 0, 55, 54, 0,
- 7, 7, 7, 7, 7, 7, 0, 7, 215, 47,
- 21, 7, 7, 0, 0, 6, 6, 0, 6, 6,
- 0, 0, 33, 55, 54, 52, 52, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 18,
- 0, 215, 0, 47, 21, 215, 0, 17, 215, 215,
- 215, 215, 215, 215, 33, 215, 0, 0, 0, 0,
- 0, 0, 0, 106, 0, 0, 0, 215, 215, 187,
- 215, 189, 190, 191, 192, 47, 21, 0, 94, 155,
- 55, 54, 0, 0, 94, 0, 45, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 6, 18, 0,
- 6, 215, 6, 48, 215, 0, 17, 0, 0, 0,
- 0, 214, 0, 0, 69, 6, 236, 6, 0, 224,
- 0, 6, 6, 182, 215, 216, 217, 218, 219, 220,
- 0, 221, 18, 215, 0, 0, 0, 0, 0, 94,
- 17, 191, 192, 0, 48, 45, 0, 48, 0, 236,
- 0, 0, 0, 236, 94, 0, 236, 236, 236, 236,
- 236, 236, 48, 236, 18, 0, 0, 94, 0, 0,
- 0, 0, 17, 69, 0, 236, 236, 0, 236, 45,
- 0, 0, 0, 0, 94, 94, 94, 0, 0, 0,
- 0, 0, 0, 282, 0, 0, 48, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 295, 69, 279, 236,
- 0, 45, 236, 200, 47, 0, 0, 0, 198, 196,
- 0, 197, 0, 199, 200, 0, 0, 0, 48, 198,
- 196, 193, 197, 0, 199, 0, 232, 0, 195, 69,
- 47, 236, 0, 0, 0, 0, 0, 232, 94, 195,
- 0, 0, 0, 0, 0, 0, 94, 0, 0, 0,
- 0, 0, 0, 0, 0, 215, 215, 215, 215, 0,
- 201, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 215, 201, 0, 0, 0, 0, 0, 0, 0, 215,
- 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 215, 215, 215, 215, 0,
- 0, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 0, 0, 0, 0, 222,
- 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 0, 0, 215, 215, 215, 215, 0, 0, 215, 215,
- 0, 215, 94, 0, 215, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 0, 0, 48, 215, 215,
- 215, 215, 0, 236, 236, 236, 236, 222, 0, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 236, 0,
- 377, 0, 0, 48, 378, 379, 0, 236, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 94, 94, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
- 236, 236, 236, 0, 0, 0, 8, 0, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 211, 0,
- 236, 236, 236, 236, 0, 0, 236, 236, 63, 236,
- 0, 0, 236, 236, 236, 236, 236, 236, 236, 236,
- 236, 236, 236, 0, 0, 0, 236, 236, 236, 236,
- 0, 211, 0, 0, 0, 211, 64, 0, 211, 211,
- 211, 211, 211, 211, 0, 211, 0, 0, 214, 0,
- 0, 129, 0, 129, 0, 0, 341, 211, 211, 0,
- 211, 215, 216, 217, 218, 219, 220, 63, 221, 0,
- 0, 0, 187, 188, 189, 190, 191, 192, 0, 130,
- 0, 130, 0, 187, 188, 189, 190, 191, 192, 29,
- 0, 211, 0, 0, 211, 64, 214, 0, 0, 0,
- 0, 63, 0, 0, 0, 212, 0, 0, 0, 215,
- 216, 217, 218, 219, 220, 0, 221, 0, 0, 0,
- 0, 0, 0, 211, 0, 0, 0, 0, 0, 64,
- 0, 0, 0, 63, 0, 0, 0, 0, 212, 0,
- 0, 0, 212, 0, 0, 212, 212, 212, 212, 212,
- 212, 0, 212, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 0, 0, 212, 212, 0, 212, 0, 0,
- 0, 0, 0, 0, 200, 0, 0, 0, 0, 198,
- 196, 200, 197, 0, 199, 0, 198, 196, 193, 197,
- 0, 199, 0, 0, 0, 0, 0, 232, 212, 195,
- 0, 212, 200, 0, 194, 0, 195, 198, 196, 193,
- 197, 0, 199, 0, 200, 0, 0, 0, 0, 198,
- 196, 0, 197, 0, 199, 232, 0, 195, 0, 0,
- 212, 201, 0, 0, 0, 0, 0, 232, 201, 195,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 211, 211, 211, 211, 201,
- 0, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 211, 201, 0, 0, 0, 0, 0, 0, 0, 211,
- 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 211, 211, 211, 211, 0,
- 0, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 0, 0, 0, 0, 0,
- 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 0, 0, 211, 211, 211, 211, 0, 0, 211, 211,
- 0, 211, 0, 0, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 0, 0, 0, 211, 211,
- 211, 211, 212, 212, 212, 212, 0, 0, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 212, 0, 0,
- 0, 0, 0, 0, 0, 0, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, 212, 0, 0, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 212, 212, 0, 0, 0, 0, 0, 212, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 213, 0, 212,
- 212, 212, 212, 0, 185, 212, 212, 186, 212, 0,
- 0, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 212, 212, 0, 365, 0, 212, 212, 212, 212, 0,
- 213, 0, 0, 0, 213, 0, 0, 213, 213, 213,
- 213, 213, 213, 230, 213, 189, 190, 191, 192, 0,
- 187, 188, 189, 190, 191, 192, 213, 213, 0, 213,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 230, 231, 189, 190, 191, 192, 0, 0, 0,
- 0, 0, 0, 187, 188, 189, 190, 191, 192, 0,
- 213, 0, 0, 213, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 214, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 213, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 214, 0, 0,
- 0, 214, 0, 0, 214, 214, 214, 214, 214, 214,
- 0, 214, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 214, 214, 0, 214, 0, 0, 0,
- 0, 0, 0, 200, 0, 0, 0, 0, 198, 196,
- 200, 197, 0, 199, 0, 198, 196, 193, 197, 0,
- 199, 0, 0, 0, 0, 0, 232, 214, 195, 0,
- 214, 200, 0, 194, 0, 195, 198, 196, 0, 197,
- 0, 199, 0, 200, 0, 0, 0, 0, 198, 196,
- 0, 197, 0, 199, 232, 0, 195, 0, 0, 214,
- 201, 0, 0, 0, 0, 0, 232, 201, 195, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 213, 213, 213, 213, 201, 0,
- 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
- 201, 0, 0, 0, 0, 0, 0, 0, 213, 213,
- 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 213, 213, 213, 213, 213, 213, 0, 0,
- 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 213, 213, 0, 0, 0, 0, 0, 213,
- 213, 213, 213, 213, 213, 213, 213, 213, 213, 0,
- 0, 213, 213, 213, 213, 0, 0, 213, 213, 0,
- 213, 0, 0, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 213, 213, 0, 0, 0, 213, 213, 213,
- 213, 214, 214, 214, 214, 0, 0, 214, 214, 214,
- 214, 214, 214, 214, 214, 214, 214, 0, 14, 0,
- 0, 0, 0, 0, 0, 214, 214, 214, 214, 214,
- 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- 214, 214, 214, 214, 214, 0, 0, 214, 214, 214,
- 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- 214, 0, 0, 0, 0, 395, 214, 214, 214, 214,
- 214, 214, 214, 214, 214, 214, 209, 14, 214, 214,
- 214, 214, 0, 185, 214, 214, 186, 214, 0, 0,
- 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- 214, 0, 0, 0, 214, 214, 214, 214, 0, 209,
- 0, 14, 0, 0, 187, 0, 209, 209, 0, 209,
- 209, 209, 187, 188, 189, 190, 191, 192, 0, 230,
- 231, 189, 190, 191, 192, 209, 209, 0, 209, 0,
- 0, 0, 0, 14, 0, 0, 0, 0, 0, 0,
- 230, 231, 189, 190, 191, 192, 0, 0, 0, 0,
- 0, 0, 187, 188, 189, 190, 191, 192, 0, 209,
- 0, 0, 209, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 210, 181, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 209, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 210, 0, 0, 0,
- 0, 0, 0, 210, 210, 0, 210, 210, 210, 254,
- 255, 256, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 210, 210, 0, 210, 0, 0, 0, 0,
- 0, 0, 0, 281, 0, 0, 0, 0, 0, 202,
- 0, 0, 0, 0, 202, 202, 202, 202, 0, 202,
- 0, 0, 0, 0, 0, 187, 210, 0, 0, 210,
- 0, 187, 202, 0, 202, 0, 187, 0, 0, 0,
- 0, 0, 0, 309, 0, 0, 0, 0, 0, 0,
- 0, 317, 0, 0, 0, 0, 0, 0, 210, 0,
- 0, 0, 0, 0, 0, 0, 202, 0, 187, 0,
- 0, 0, 0, 0, 260, 0, 0, 0, 0, 0,
- 0, 0, 0, 209, 209, 209, 209, 0, 0, 209,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 0,
- 0, 0, 0, 0, 0, 0, 0, 209, 209, 209,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
- 209, 209, 209, 209, 209, 209, 209, 0, 0, 209,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
- 209, 209, 209, 0, 0, 0, 0, 361, 209, 209,
- 209, 209, 209, 209, 209, 209, 209, 209, 0, 0,
- 209, 209, 209, 209, 0, 0, 209, 209, 0, 209,
- 0, 0, 209, 209, 209, 209, 209, 209, 209, 209,
- 209, 209, 209, 0, 260, 0, 209, 209, 209, 209,
- 210, 210, 210, 210, 0, 0, 210, 210, 210, 210,
- 210, 210, 210, 210, 210, 210, 0, 0, 0, 0,
- 0, 0, 382, 383, 210, 210, 210, 210, 210, 210,
- 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
- 210, 210, 210, 210, 0, 0, 210, 210, 210, 210,
- 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
- 0, 0, 0, 0, 0, 210, 210, 210, 210, 210,
- 210, 210, 210, 210, 210, 229, 0, 210, 210, 210,
- 210, 0, 202, 210, 210, 202, 210, 0, 0, 210,
- 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
- 0, 0, 0, 210, 210, 210, 210, 0, 229, 52,
- 53, 0, 0, 0, 0, 229, 229, 0, 0, 229,
- 0, 0, 0, 0, 0, 0, 0, 0, 202, 202,
- 202, 202, 202, 202, 229, 229, 0, 229, 0, 0,
- 0, 0, 0, 0, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 229, 0,
- 0, 229, 76, 77, 78, 79, 0, 0, 0, 0,
- 0, 0, 231, 0, 0, 0, 0, 0, 0, 0,
- 80, 81, 82, 83, 84, 0, 0, 0, 0, 0,
- 229, 0, 0, 0, 0, 257, 0, 0, 0, 0,
- 0, 258, 0, 0, 0, 231, 259, 0, 0, 52,
- 53, 0, 231, 231, 0, 0, 231, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 231, 231, 0, 231, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 231, 0, 0, 231, 0,
- 0, 0, 76, 77, 78, 79, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 81, 82, 83, 84, 0, 0, 231, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 345, 0, 0, 0, 0, 0, 0,
- 0, 0, 229, 229, 229, 229, 210, 0, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 0, 0,
- 0, 0, 0, 0, 0, 0, 229, 229, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 229, 229, 229, 229, 229, 0, 0, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 229, 0, 0, 0, 0, 0, 229, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 0, 0, 229,
- 229, 229, 229, 0, 0, 229, 229, 0, 229, 0,
- 0, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 229, 0, 0, 0, 229, 229, 229, 229, 231,
- 231, 231, 231, 0, 0, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 0, 0, 0, 0, 0,
- 0, 0, 0, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 0, 0, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 0,
- 0, 0, 0, 0, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 230, 0, 231, 231, 231, 231,
- 0, 0, 231, 231, 0, 231, 0, 0, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 0,
- 0, 0, 231, 231, 231, 231, 0, 230, 52, 53,
- 0, 0, 0, 0, 230, 230, 0, 0, 230, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 230, 230, 0, 230, 0, 0, 0,
- 0, 0, 0, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 0, 0, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 230, 0, 0,
- 230, 76, 77, 78, 79, 0, 0, 0, 0, 0,
- 0, 228, 0, 0, 76, 77, 78, 79, 0, 80,
- 81, 82, 83, 84, 0, 0, 0, 0, 0, 230,
- 0, 0, 80, 81, 82, 83, 84, 0, 0, 0,
- 0, 0, 0, 0, 228, 0, 0, 0, 0, 0,
- 0, 228, 228, 0, 0, 228, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 228, 228, 0, 228, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 228, 0, 0, 228, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 228, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 230, 230, 230, 230, 0, 0, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 0, 0, 0,
- 0, 0, 0, 0, 0, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 0, 0, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 0, 0, 0, 0, 0, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 0, 0, 230, 230,
- 230, 230, 0, 0, 230, 230, 0, 230, 0, 0,
- 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 0, 0, 0, 230, 230, 230, 230, 228, 228,
- 228, 228, 0, 0, 228, 228, 228, 228, 228, 228,
- 228, 228, 228, 228, 0, 15, 0, 0, 0, 0,
- 0, 0, 228, 228, 228, 228, 228, 228, 228, 228,
- 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
- 228, 228, 0, 0, 228, 228, 228, 228, 228, 228,
- 228, 228, 228, 228, 228, 228, 228, 228, 0, 0,
- 0, 0, 0, 228, 228, 228, 228, 228, 228, 228,
- 228, 228, 228, 143, 15, 228, 228, 228, 228, 0,
- 0, 228, 228, 0, 228, 0, 0, 228, 228, 228,
- 228, 228, 228, 228, 228, 228, 228, 228, 0, 0,
- 0, 228, 228, 228, 228, 0, 143, 0, 15, 0,
- 0, 188, 0, 143, 143, 0, 143, 143, 143, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 143, 0, 0, 143, 0, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 143, 0, 0, 143,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 233, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 143, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 233, 0, 0, 0, 0, 0, 0,
- 233, 233, 0, 0, 233, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 233,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 188, 233, 0, 0, 233, 0, 188, 0,
- 0, 0, 0, 188, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 233, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 188, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 143, 143, 143, 143, 0, 0, 143, 0, 143, 143,
- 143, 143, 143, 143, 143, 143, 0, 0, 0, 0,
- 0, 0, 0, 0, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 0, 0, 0, 0, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 0, 0, 143, 143, 143,
- 143, 0, 0, 143, 143, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 143, 143, 143, 143, 143,
- 0, 0, 0, 143, 143, 143, 143, 233, 233, 233,
- 233, 0, 0, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 0, 0, 0, 0, 0, 0, 0,
- 0, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 0, 0, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 0, 0, 0,
- 0, 0, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 232, 0, 233, 233, 233, 233, 0, 0,
- 233, 233, 0, 233, 0, 0, 233, 233, 233, 233,
- 0, 0, 233, 233, 233, 233, 233, 0, 0, 0,
- 233, 233, 233, 233, 0, 232, 0, 0, 0, 0,
- 0, 0, 232, 232, 0, 0, 232, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 232, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 232, 0, 0, 232, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 144,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 232, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 144, 0, 0, 0, 0, 0, 0, 144,
- 144, 0, 144, 144, 144, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 144, 0,
- 0, 144, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 144, 0, 0, 144, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 144, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 232,
- 232, 232, 232, 0, 0, 232, 232, 232, 232, 232,
- 232, 232, 232, 232, 232, 0, 0, 0, 0, 0,
- 0, 0, 0, 232, 232, 232, 232, 232, 232, 232,
- 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
- 232, 232, 232, 0, 0, 232, 232, 232, 232, 232,
- 232, 232, 232, 232, 232, 232, 232, 232, 232, 0,
- 0, 0, 0, 0, 232, 232, 232, 232, 232, 232,
- 232, 232, 232, 232, 0, 0, 232, 232, 232, 232,
- 0, 0, 232, 232, 0, 232, 0, 0, 232, 232,
- 232, 232, 0, 0, 232, 232, 232, 232, 232, 0,
- 0, 0, 232, 232, 232, 232, 144, 144, 144, 144,
- 0, 0, 144, 0, 144, 144, 144, 144, 144, 144,
- 144, 144, 0, 0, 0, 0, 0, 0, 0, 0,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 0,
- 0, 0, 0, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 234, 0, 144, 144, 144, 144, 0, 0, 144,
- 144, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 144, 144, 144, 144, 144, 0, 0, 0, 144,
- 144, 144, 144, 0, 234, 0, 0, 0, 0, 0,
- 0, 234, 234, 0, 0, 234, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 234, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 234, 0, 0, 234, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 235, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 234, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 235, 0, 0, 0, 0, 0, 0, 235, 235,
- 0, 0, 235, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 235, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 235, 0, 0, 235, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 235, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 234, 234,
- 234, 234, 0, 0, 234, 234, 234, 234, 234, 234,
- 234, 234, 234, 234, 0, 0, 0, 0, 0, 0,
- 0, 0, 234, 234, 234, 234, 234, 234, 234, 234,
- 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
- 234, 234, 0, 0, 234, 234, 234, 234, 234, 234,
- 234, 234, 234, 234, 234, 234, 234, 234, 0, 0,
- 0, 0, 0, 234, 234, 234, 234, 234, 234, 234,
- 234, 234, 234, 0, 0, 234, 234, 234, 234, 0,
- 0, 234, 234, 0, 234, 0, 0, 234, 234, 0,
- 0, 0, 0, 234, 234, 234, 234, 234, 0, 0,
- 0, 234, 234, 234, 234, 235, 235, 235, 235, 0,
- 0, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 0, 0, 0, 0, 0, 0, 0, 0, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 0,
- 0, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 0, 0, 0, 0, 0,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 130, 0, 235, 235, 235, 235, 0, 0, 235, 235,
- 0, 235, 0, 0, 0, 235, 0, 0, 0, 0,
- 235, 235, 235, 235, 235, 0, 0, 0, 235, 235,
- 235, 235, 0, 130, 0, 0, 0, 0, 0, 0,
- 130, 130, 0, 130, 130, 130, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 130,
- 0, 0, 130, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 130, 0, 0, 130, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 135, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 130, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 135, 0, 0, 0, 0, 0, 0, 135, 135, 0,
- 0, 135, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 135, 0, 0, 135,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 135, 0, 0, 135, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 135, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 130, 130, 130,
- 130, 0, 0, 130, 0, 130, 130, 130, 130, 130,
- 130, 130, 130, 0, 0, 0, 0, 0, 0, 0,
- 0, 130, 130, 130, 130, 130, 130, 130, 130, 130,
- 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
- 0, 0, 0, 0, 130, 130, 130, 130, 130, 130,
- 130, 130, 130, 130, 130, 130, 130, 0, 0, 0,
- 0, 0, 130, 130, 130, 130, 130, 130, 130, 130,
- 130, 130, 0, 0, 130, 130, 130, 130, 0, 0,
- 130, 130, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 130, 130, 130, 130, 130, 0, 0, 0,
- 130, 130, 130, 130, 135, 135, 135, 135, 0, 0,
- 135, 0, 135, 135, 135, 135, 135, 135, 135, 135,
- 0, 0, 0, 0, 0, 0, 0, 0, 135, 135,
- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 135, 135, 135, 135, 135, 0, 0, 0,
- 0, 135, 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 135, 135, 0, 0, 0, 0, 0, 135,
- 135, 135, 135, 135, 135, 135, 135, 135, 135, 139,
- 0, 135, 135, 135, 135, 0, 0, 135, 135, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 135,
- 135, 135, 135, 135, 0, 0, 0, 135, 135, 135,
- 135, 0, 139, 0, 0, 0, 0, 0, 0, 139,
- 139, 0, 0, 139, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 139, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 139, 0, 0, 139, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 88, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 139, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,
- 0, 0, 0, 0, 0, 0, 88, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 88, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,
- 0, 0, 88, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 88, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 139, 139, 139, 139,
- 0, 0, 139, 0, 139, 139, 139, 139, 139, 139,
- 139, 139, 0, 0, 0, 0, 0, 0, 0, 0,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 0,
- 0, 0, 0, 139, 139, 139, 139, 139, 139, 139,
- 139, 139, 139, 139, 139, 139, 0, 0, 32, 0,
- 0, 139, 139, 139, 139, 139, 139, 139, 139, 139,
- 139, 0, 0, 139, 139, 139, 139, 0, 0, 139,
- 139, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 139, 139, 139, 139, 139, 0, 0, 0, 139,
- 139, 139, 139, 88, 88, 88, 88, 0, 0, 88,
- 0, 88, 88, 88, 88, 88, 88, 88, 88, 0,
- 0, 0, 0, 0, 0, 0, 0, 88, 88, 88,
- 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
- 88, 88, 88, 88, 88, 88, 0, 0, 0, 0,
- 0, 88, 88, 88, 88, 88, 88, 88, 88, 88,
- 88, 88, 88, 90, 0, 0, 0, 0, 88, 88,
- 88, 88, 88, 88, 88, 88, 88, 88, 0, 0,
- 88, 88, 88, 88, 0, 0, 88, 88, 0, 0,
- 0, 0, 0, 0, 0, 0, 90, 0, 88, 88,
- 88, 88, 88, 90, 0, 0, 88, 88, 88, 88,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 90, 0, 6, 7, 0, 8, 9, 0,
- 0, 0, 0, 0, 0, 0, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 0, 0,
- 0, 0, 0, 0, 0, 0, 90, 0, 0, 90,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 90, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,
- 0, 0, 0, 92, 0, 23, 24, 0, 0, 25,
- 92, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 27, 0, 28, 0, 0, 92,
- 29, 30, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 92, 0, 0, 92, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 92, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 90, 90, 90, 90, 0, 0, 90, 0, 90, 90,
- 90, 90, 90, 90, 90, 90, 0, 0, 0, 0,
- 0, 0, 0, 0, 90, 90, 90, 90, 90, 90,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 90, 90, 90, 0, 0, 0, 0, 0, 90, 90,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 0, 0, 6, 0, 0, 90, 90, 90, 90, 90,
- 90, 90, 90, 90, 90, 0, 0, 90, 90, 90,
- 90, 0, 0, 90, 90, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 90, 90, 90, 90, 90,
- 0, 0, 0, 90, 90, 90, 90, 92, 92, 92,
- 92, 0, 0, 92, 0, 92, 92, 92, 92, 92,
- 92, 92, 92, 0, 0, 0, 0, 0, 0, 0,
- 0, 92, 92, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
- 0, 0, 0, 0, 0, 92, 92, 92, 92, 92,
- 92, 92, 92, 92, 92, 92, 92, 96, 0, 0,
- 0, 0, 92, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 0, 0, 92, 92, 92, 92, 0, 0,
- 92, 92, 0, 0, 0, 0, 0, 0, 0, 0,
- 96, 0, 92, 92, 92, 92, 92, 96, 0, 0,
- 92, 92, 92, 92, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 0, 6, 6,
- 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 96, 0, 0, 96, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 94, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 96, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 94, 0, 6,
- 6, 0, 0, 6, 94, 6, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 0,
- 6, 0, 0, 94, 6, 6, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 94, 0, 0,
- 94, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 96, 96, 96, 96, 0, 0,
- 96, 0, 96, 96, 96, 96, 96, 96, 96, 96,
- 0, 0, 0, 0, 0, 0, 0, 0, 96, 96,
- 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 96, 96, 96, 0, 0, 0,
- 0, 0, 96, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 0, 0, 0, 0, 0, 96,
- 96, 96, 96, 96, 96, 96, 96, 96, 96, 0,
- 0, 96, 96, 96, 96, 0, 0, 96, 96, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,
- 96, 96, 96, 96, 0, 0, 0, 96, 96, 96,
- 96, 94, 94, 94, 94, 0, 0, 94, 0, 94,
- 94, 94, 94, 94, 94, 94, 94, 0, 0, 0,
- 0, 0, 0, 0, 0, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 0, 0, 0, 0, 0, 94,
- 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 84, 0, 0, 0, 0, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 0, 0, 94, 94,
- 94, 94, 0, 0, 94, 94, 0, 0, 0, 0,
- 0, 0, 0, 0, 84, 0, 94, 94, 94, 94,
- 94, 84, 0, 0, 94, 94, 94, 94, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 84, 0, 0, 84, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 85, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 84, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 85, 0, 0, 0, 0, 0, 0, 85, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 85, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 85, 0, 0, 85, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 85, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 84, 84,
- 84, 84, 0, 0, 84, 0, 84, 84, 84, 84,
- 84, 84, 84, 84, 0, 0, 0, 0, 0, 0,
- 0, 0, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 0, 0, 0, 0, 0, 84, 84, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 84, 0, 0,
- 0, 0, 0, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 0, 0, 84, 84, 84, 84, 0,
- 0, 84, 84, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 84, 84, 84, 84, 84, 0, 0,
- 0, 84, 84, 84, 84, 85, 85, 85, 85, 0,
- 0, 85, 0, 85, 85, 85, 85, 85, 85, 85,
- 85, 0, 0, 0, 0, 0, 0, 0, 0, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 0, 0,
- 0, 0, 0, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 86, 0, 0, 0, 0,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 0, 0, 85, 85, 85, 85, 0, 0, 85, 85,
- 0, 0, 0, 0, 0, 0, 0, 0, 86, 0,
- 85, 85, 85, 85, 85, 86, 0, 0, 85, 85,
- 85, 85, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 86, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 86, 0,
- 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 87, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 87, 0, 0, 0, 0,
- 0, 0, 87, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 87, 0, 0, 87, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 87, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 86, 86, 86, 86, 0, 0, 86, 0,
- 86, 86, 86, 86, 86, 86, 86, 86, 0, 0,
- 0, 0, 0, 0, 0, 0, 86, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
- 86, 86, 86, 86, 86, 0, 0, 0, 0, 0,
- 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
- 86, 86, 0, 0, 0, 0, 0, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 0, 0, 86,
- 86, 86, 86, 0, 0, 86, 86, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 86, 86, 86,
- 86, 86, 0, 0, 0, 86, 86, 86, 86, 87,
- 87, 87, 87, 0, 0, 87, 0, 87, 87, 87,
- 87, 87, 87, 87, 87, 0, 0, 0, 0, 0,
- 0, 0, 0, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 0, 0, 0, 0, 0, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 97,
- 0, 0, 0, 0, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 0, 0, 87, 87, 87, 87,
- 0, 0, 87, 87, 0, 0, 0, 0, 0, 0,
- 0, 0, 97, 0, 87, 87, 87, 87, 87, 97,
- 0, 0, 87, 87, 87, 87, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 97, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 97, 0, 0, 97, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 98, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 97, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,
- 0, 0, 0, 0, 0, 0, 98, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 98, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,
- 0, 0, 98, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 98, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 97, 97, 97, 97,
- 0, 0, 97, 0, 97, 97, 97, 97, 97, 97,
- 97, 97, 0, 0, 0, 0, 0, 0, 0, 0,
- 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 97, 97, 97, 0,
- 0, 0, 0, 0, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 0, 0, 0, 0,
- 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 0, 0, 97, 97, 97, 97, 0, 0, 97,
- 97, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 97, 97, 97, 97, 97, 0, 0, 0, 97,
- 97, 97, 97, 98, 98, 98, 98, 0, 0, 98,
- 0, 98, 98, 98, 98, 98, 98, 98, 98, 0,
- 0, 0, 0, 0, 0, 0, 0, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 0, 0, 0, 0,
- 0, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 99, 0, 0, 0, 0, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 0, 0,
- 98, 98, 98, 98, 0, 0, 98, 98, 0, 0,
- 0, 0, 0, 0, 0, 0, 99, 0, 98, 98,
- 98, 98, 98, 99, 0, 0, 98, 98, 98, 98,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 99, 0, 0, 99,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 99, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 104, 0, 0, 0, 0, 0, 0,
- 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 104,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 104, 0, 0, 104, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 104, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 99, 99, 99, 99, 0, 0, 99, 0, 99, 99,
- 99, 99, 99, 99, 99, 99, 0, 0, 0, 0,
- 0, 0, 0, 0, 99, 99, 99, 99, 99, 99,
- 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
- 99, 99, 99, 0, 0, 0, 0, 0, 99, 99,
- 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
- 0, 0, 0, 0, 0, 99, 99, 99, 99, 99,
- 99, 99, 99, 99, 99, 0, 0, 99, 99, 99,
- 99, 0, 0, 99, 99, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 99, 99, 99, 99, 99,
- 0, 0, 0, 99, 99, 99, 99, 104, 104, 104,
- 104, 0, 0, 104, 0, 104, 104, 104, 104, 104,
- 104, 104, 104, 0, 0, 0, 0, 0, 0, 0,
- 0, 104, 104, 104, 104, 104, 104, 104, 104, 104,
- 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
- 0, 0, 0, 0, 0, 104, 104, 104, 104, 104,
- 104, 104, 104, 104, 104, 104, 104, 106, 0, 0,
- 0, 0, 104, 104, 104, 104, 104, 104, 104, 104,
- 104, 104, 0, 0, 104, 104, 104, 104, 0, 0,
- 104, 104, 0, 0, 0, 0, 0, 0, 0, 0,
- 106, 0, 104, 104, 104, 104, 104, 106, 0, 0,
- 104, 104, 104, 104, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 106, 0, 0, 106, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 110, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 106, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 110, 0, 0,
- 0, 0, 0, 0, 110, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 110, 0, 0,
- 110, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 110,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 106, 106, 106, 106, 0, 0,
- 106, 0, 106, 106, 106, 106, 106, 106, 106, 106,
- 0, 0, 0, 0, 0, 0, 0, 0, 106, 106,
- 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
- 106, 106, 106, 106, 106, 106, 106, 0, 0, 0,
- 0, 0, 106, 106, 106, 106, 106, 106, 106, 106,
- 106, 106, 106, 106, 0, 0, 0, 0, 0, 106,
- 106, 106, 106, 106, 106, 106, 106, 106, 106, 0,
- 0, 106, 106, 106, 106, 0, 0, 106, 106, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 106,
- 106, 106, 106, 106, 0, 0, 0, 106, 106, 106,
- 106, 110, 110, 110, 110, 0, 0, 110, 0, 110,
- 110, 110, 110, 110, 110, 110, 110, 0, 0, 0,
- 0, 0, 0, 0, 0, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 0, 0, 0, 0, 0, 110,
- 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 123, 0, 0, 0, 0, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 0, 0, 110, 110,
- 110, 110, 0, 0, 110, 110, 0, 0, 0, 0,
- 0, 0, 0, 0, 123, 0, 110, 110, 110, 110,
- 110, 123, 0, 0, 110, 110, 110, 110, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 123, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 123, 0, 0, 123, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 108, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 123, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 108, 0, 0, 0, 0, 0, 0, 108, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 108, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 108, 0, 0, 108, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 108, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 123, 123,
- 123, 123, 0, 0, 123, 0, 123, 123, 123, 123,
- 123, 123, 123, 123, 0, 0, 0, 0, 0, 0,
- 0, 0, 123, 123, 123, 123, 123, 123, 123, 123,
- 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- 123, 0, 0, 0, 0, 0, 123, 123, 123, 123,
- 123, 123, 123, 123, 123, 123, 123, 123, 0, 0,
- 0, 0, 0, 123, 123, 123, 123, 123, 123, 123,
- 123, 123, 123, 0, 0, 123, 123, 123, 123, 0,
- 0, 123, 123, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 123, 123, 123, 123, 123, 0, 0,
- 0, 123, 123, 123, 123, 108, 108, 108, 108, 0,
- 0, 108, 0, 108, 108, 108, 108, 108, 108, 108,
- 108, 0, 0, 0, 0, 0, 0, 0, 0, 108,
- 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 108, 108, 108, 108, 0, 0,
- 0, 0, 0, 108, 108, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 108, 0, 0, 0, 0, 0,
- 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
- 141, 0, 108, 108, 108, 108, 0, 0, 108, 108,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 108, 108, 108, 108, 108, 0, 0, 0, 108, 108,
- 108, 108, 0, 141, 0, 0, 0, 0, 0, 0,
- 141, 141, 0, 141, 141, 141, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 141,
- 0, 0, 141, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 228, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 141, 0, 0, 141, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 228, 0,
- 0, 0, 0, 0, 0, 228, 228, 0, 0, 228,
- 0, 0, 0, 0, 0, 141, 0, 0, 0, 0,
- 0, 0, 0, 0, 228, 228, 0, 228, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 234, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 228, 0,
- 0, 228, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 167, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 234, 0, 0, 234, 0,
- 228, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 234, 0, 167, 0, 0, 0, 0,
- 0, 0, 167, 0, 0, 0, 0, 167, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 167, 0, 0, 0, 0, 0, 234, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 141, 141, 141,
- 141, 0, 0, 141, 0, 141, 141, 141, 141, 141,
- 141, 141, 141, 0, 0, 167, 0, 0, 167, 234,
- 0, 141, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
- 0, 0, 0, 0, 141, 141, 0, 167, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 228, 228, 228, 228, 0, 0, 228, 0,
- 141, 141, 0, 228, 104, 0, 228, 228, 0, 0,
- 0, 103, 294, 0, 0, 0, 87, 0, 0, 0,
- 141, 141, 141, 141, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
- 228, 228, 0, 0, 0, 0, 0, 228, 228, 228,
- 228, 228, 228, 228, 228, 228, 228, 86, 0, 228,
- 228, 228, 228, 0, 0, 0, 0, 0, 234, 0,
- 0, 228, 228, 228, 228, 228, 228, 228, 228, 228,
- 228, 228, 0, 0, 0, 0, 0, 0, 228, 167,
- 167, 167, 167, 0, 234, 167, 0, 167, 167, 167,
- 167, 167, 167, 0, 234, 40, 0, 234, 0, 0,
- 0, 0, 0, 167, 167, 167, 167, 167, 167, 167,
- 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
- 167, 167, 0, 0, 0, 0, 0, 167, 40, 0,
- 0, 0, 0, 0, 0, 40, 0, 0, 0, 0,
- 234, 234, 0, 0, 167, 167, 167, 167, 167, 167,
- 167, 167, 167, 167, 40, 0, 0, 0, 0, 0,
- 0, 0, 167, 167, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 167, 167, 167, 167, 0, 0, 40, 0,
- 0, 40, 0, 0, 0, 0, 42, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 47, 48,
- 49, 8, 0, 0, 50, 0, 0, 0, 0, 51,
- 40, 0, 52, 53, 0, 0, 0, 0, 0, 42,
- 0, 0, 0, 0, 0, 0, 42, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 42, 54, 55, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 0, 0,
- 0, 0, 0, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 0, 0, 76, 77, 78, 79, 42,
- 0, 0, 42, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 95, 80, 81, 82, 83, 84, 0, 0,
- 0, 0, 0, 0, 29, 0, 0, 0, 0, 0,
- 0, 42, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 40, 40, 40, 40, 0, 0, 40, 0,
- 0, 95, 0, 40, 0, 0, 40, 40, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 95, 0, 0, 0, 0,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 0, 0, 0, 0, 0, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 95, 0, 40,
- 40, 40, 40, 0, 0, 93, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 40, 40, 40,
- 40, 40, 0, 42, 42, 42, 42, 0, 40, 42,
- 0, 0, 0, 0, 42, 0, 0, 42, 42, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 93, 0, 0, 0, 0, 0,
- 0, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 0, 0, 0, 0, 0, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 93, 0,
- 42, 42, 42, 42, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 91, 0, 0, 0, 42, 42,
- 42, 42, 42, 0, 0, 0, 0, 0, 0, 42,
- 93, 0, 95, 0, 0, 0, 0, 95, 95, 95,
- 0, 95, 95, 95, 95, 0, 0, 0, 0, 0,
- 0, 0, 0, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 187, 91, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 91, 0, 0,
- 0, 0, 95, 95, 0, 0, 0, 0, 0, 103,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 95, 95, 95, 95, 0, 0, 0, 91,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 40, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 93, 0, 0, 0, 0,
- 93, 93, 93, 0, 93, 93, 93, 93, 103, 0,
- 0, 0, 0, 32, 0, 0, 93, 93, 93, 93,
- 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 93, 93, 188, 0, 0, 0, 0,
- 0, 0, 103, 0, 0, 31, 0, 0, 0, 0,
- 0, 0, 0, 105, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 103, 93, 93, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 93, 93, 93, 93, 0,
- 0, 0, 0, 0, 91, 0, 0, 0, 0, 91,
- 91, 91, 105, 91, 91, 91, 91, 0, 0, 0,
- 0, 0, 0, 0, 0, 91, 91, 91, 91, 91,
- 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
- 91, 91, 91, 91, 0, 0, 105, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 109, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 105, 6,
- 7, 0, 8, 9, 91, 91, 0, 0, 0, 0,
- 0, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 0, 91, 91, 91, 91, 0, 103,
- 0, 0, 0, 0, 103, 103, 103, 109, 103, 103,
- 103, 103, 0, 0, 0, 0, 0, 0, 0, 0,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 0,
- 0, 109, 0, 0, 22, 0, 0, 0, 0, 0,
- 23, 24, 107, 0, 25, 0, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,
- 0, 28, 0, 109, 0, 29, 30, 0, 0, 103,
- 103, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
- 103, 103, 103, 105, 0, 0, 0, 0, 105, 105,
- 105, 107, 105, 105, 105, 105, 0, 0, 0, 0,
- 0, 0, 0, 0, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 0, 0, 107, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 107, 0, 0,
- 0, 0, 0, 105, 105, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 80, 105, 105, 105, 105, 0, 109, 0,
- 0, 0, 0, 109, 109, 109, 0, 109, 109, 109,
- 109, 80, 0, 0, 0, 0, 0, 0, 0, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 0, 0,
- 0, 0, 0, 0, 0, 80, 0, 0, 80, 0,
- 0, 146, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 80, 109, 109,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 146, 0, 146, 146, 109, 109,
- 109, 109, 107, 0, 0, 0, 0, 107, 107, 107,
- 146, 107, 107, 107, 107, 0, 0, 0, 0, 0,
- 0, 0, 0, 107, 107, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
- 107, 107, 0, 0, 146, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 146, 0, 0, 0,
- 0, 0, 107, 107, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 107, 107, 107, 107, 0, 0, 0, 80,
- 80, 80, 0, 0, 0, 80, 0, 80, 80, 80,
- 80, 80, 80, 80, 80, 0, 0, 0, 0, 0,
- 0, 0, 0, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 0, 0, 0, 0, 0, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 0,
- 0, 0, 0, 0, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 236, 0, 80, 80, 80, 80,
- 0, 0, 80, 80, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 80, 80, 80, 80, 80, 0,
- 0, 0, 80, 80, 80, 0, 0, 0, 0, 0,
- 0, 236, 146, 146, 0, 236, 236, 236, 236, 236,
- 0, 236, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 236, 236, 0, 236, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 0, 0, 0, 0, 236, 0, 0,
- 0, 0, 88, 0, 0, 146, 146, 146, 146, 85,
- 0, 0, 0, 0, 87, 0, 0, 0, 0, 0,
- 0, 0, 0, 146, 146, 146, 146, 146, 0, 236,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 0, 0, 0, 0, 86, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 31, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 236, 6,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 236, 0, 0, 0, 0, 0,
- 0, 6, 0, 0, 236, 0, 0, 236, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 88, 0, 274, 275, 49, 8,
- 9, 103, 50, 0, 0, 0, 87, 51, 10, 11,
- 276, 277, 14, 15, 16, 17, 18, 19, 20, 21,
- 236, 236, 236, 236, 236, 236, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 0, 86, 0, 0,
- 0, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 22, 0, 76, 77, 78, 79, 23, 24, 0,
- 0, 25, 0, 26, 0, 0, 0, 0, 0, 0,
- 0, 80, 81, 82, 83, 84, 27, 0, 28, 0,
- 0, 0, 29, 30, 0, 6, 6, 6, 6, 6,
- 0, 6, 0, 0, 0, 0, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
- 88, 0, 0, 0, 0, 0, 0, 85, 0, 0,
- 0, 0, 87, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 0, 6, 6, 6, 6, 6, 6, 0, 0,
- 6, 0, 6, 86, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 0, 6, 0, 0,
- 0, 6, 6, 0, 0, 0, 0, 0, 47, 48,
- 49, 8, 0, 0, 50, 0, 119, 120, 121, 51,
- 122, 123, 124, 125, 0, 0, 0, 0, 0, 0,
- 0, 0, 126, 127, 128, 129, 130, 131, 132, 133,
- 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 0, 0, 0, 0, 0, 54, 55, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 0, 0,
- 0, 0, 0, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 0, 0, 76, 77, 78, 79, 104,
- 0, 145, 146, 0, 0, 0, 103, 0, 0, 0,
- 0, 87, 0, 80, 81, 82, 83, 84, 0, 0,
- 0, 147, 148, 149, 29, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 47, 48, 49, 8, 0, 0,
- 50, 0, 86, 0, 0, 51, 0, 0, 52, 53,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 0, 0, 0, 0, 0, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 104,
- 0, 76, 77, 78, 79, 0, 85, 0, 0, 0,
- 0, 87, 0, 0, 0, 0, 0, 0, 0, 80,
- 81, 82, 83, 84, 0, 0, 0, 0, 0, 0,
- 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 86, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 47, 48, 49, 8, 0, 0, 50,
- 0, 0, 0, 0, 51, 0, 104, 52, 53, 0,
- 0, 0, 0, 265, 0, 0, 0, 0, 87, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 0, 0, 0, 0, 0, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 0, 86,
- 76, 77, 78, 79, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 80, 81,
- 82, 83, 84, 0, 0, 0, 0, 0, 0, 29,
- 0, 0, 0, 0, 0, 0, 0, 88, 0, 0,
- 0, 0, 0, 0, 103, 0, 397, 0, 0, 87,
- 0, 0, 0, 47, 48, 49, 8, 0, 0, 50,
- 0, 0, 0, 0, 51, 0, 0, 52, 53, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 0, 0, 0, 0, 0, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 0, 0,
- 76, 77, 78, 79, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 80, 81,
- 82, 83, 84, 0, 0, 0, 0, 88, 0, 29,
- 47, 48, 49, 8, 103, 0, 50, 0, 0, 87,
- 0, 51, 0, 0, 52, 53, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 86, 0, 0, 0, 0, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 0, 0, 76, 77, 78,
- 79, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 80, 81, 82, 83, 84,
- 0, 47, 48, 49, 0, 0, 29, 50, 0, 0,
- 0, 0, 51, 88, 0, 52, 53, 0, 0, 0,
- 85, 0, 0, 0, 0, 87, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 0, 0, 0, 0, 0, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 86, 0, 76, 77,
- 78, 79, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 80, 81, 82, 83,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
- 0, 47, 48, 49, 0, 265, 0, 50, 0, 0,
- 87, 0, 51, 0, 0, 52, 53, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 86, 0, 0, 0, 0, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 0, 0, 76, 77,
- 78, 79, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 80, 81, 82, 83,
- 84, 88, 0, 0, 0, 0, 0, 0, 103, 0,
- 0, 0, 0, 87, 0, 0, 0, 47, 48, 49,
- 0, 0, 0, 50, 0, 0, 0, 0, 51, 0,
- 0, 52, 53, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 86, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 0, 0, 0,
- 0, 0, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 0, 0, 76, 77, 78, 79, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 80, 81, 82, 83, 84, 0, 0, 0,
- 0, 0, 47, 48, 49, 0, 0, 0, 50, 0,
- 0, 0, 0, 51, 0, 0, 52, 53, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 0, 0, 0, 0, 0, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 0, 0, 76,
- 77, 78, 79, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 80, 81, 82,
- 83, 84, 0, 0, 0, 47, 48, 49, 0, 0,
- 0, 50, 0, 0, 0, 0, 51, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 0, 0, 0, 0, 0,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- 0, 0, 76, 77, 78, 79, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 81, 82, 83, 84,
-};
-short yycheck[] = { 24,
- 118, 44, 37, 28, 104, 30, 59, 42, 43, 37,
- 45, 36, 47, 0, 42, 43, 260, 45, 93, 47,
- 43, 0, 45, 43, 98, 45, 0, 0, 85, 4,
- 260, 100, 60, 59, 62, 95, 154, 37, 43, 44,
- 45, 257, 42, 43, 113, 45, 58, 47, 35, 24,
- 96, 258, 96, 258, 41, 30, 0, 0, 40, 94,
- 85, 36, 87, 88, 0, 0, 94, 41, 41, 345,
- 44, 44, 43, 133, 45, 100, 61, 134, 58, 104,
- 59, 61, 43, 44, 45, 59, 59, 41, 113, 333,
- 44, 62, 41, 333, 94, 44, 262, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 0, 134,
- 40, 136, 137, 138, 93, 59, 59, 346, 347, 93,
- 93, 0, 147, 148, 59, 100, 342, 343, 203, 154,
- 230, 231, 40, 363, 234, 235, 111, 40, 113, 0,
- 41, 33, 43, 118, 45, 40, 125, 40, 40, 93,
- 93, 125, 125, 45, 370, 212, 213, 93, 93, 40,
- 271, 272, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 40, 154,
- 41, 125, 125, 44, 258, 259, 40, 212, 213, 125,
- 125, 37, 40, 0, 0, 40, 42, 257, 59, 91,
- 290, 47, 227, 263, 96, 230, 231, 232, 265, 234,
- 235, 257, 61, 257, 93, 258, 258, 263, 0, 263,
- 37, 260, 268, 41, 268, 42, 43, 41, 45, 262,
- 47, 123, 93, 264, 41, 41, 94, 44, 44, 257,
- 265, 352, 353, 60, 46, 62, 125, 301, 94, 348,
- 349, 369, 59, 59, 300, 317, 318, 319, 320, 321,
- 93, 236, 237, 93, 125, 300, 241, 341, 303, 43,
- 44, 45, 125, 298, 114, 115, 262, 94, 262, 257,
- 41, 304, 342, 343, 41, 44, 93, 93, 37, 41,
- 264, 264, 302, 42, 43, 41, 45, 41, 47, 44,
- 41, 44, 41, 262, 257, 346, 358, 303, 260, 91,
- 370, 60, 41, 62, 271, 272, 290, 290, 125, 125,
- 348, 349, 350, 351, 41, 260, 300, 41, 343, 303,
- 265, 266, 267, 262, 269, 270, 271, 272, 363, 364,
- 365, 123, 367, 0, 41, 94, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 257, 258, 259, 260, 261,
- 395, 263, 397, 347, 347, 343, 268, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, 0,
- 154, 374, 343, 343, 369, 352, 353, 30, 35, -1,
- -1, -1, 91, 264, -1, 340, 341, -1, -1, -1,
- 0, 0, -1, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, 360, 361, 362, 363, 290,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 332, -1, 334, 335, 336, 337, 338, 339, 59, -1,
- 342, 41, 344, -1, 44, -1, -1, 264, 264, -1,
- 352, 353, 354, 355, 356, 357, -1, 359, 0, 59,
- 59, 363, 364, -1, -1, 257, 258, -1, 260, 261,
- -1, -1, 93, 290, 290, 346, 347, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, 0,
- -1, 33, -1, 93, 93, 37, -1, 0, 40, 41,
- 42, 43, 44, 45, 125, 47, -1, -1, -1, -1,
- -1, -1, -1, 26, -1, -1, -1, 59, 60, 346,
- 62, 348, 349, 350, 351, 125, 125, -1, 24, 42,
- 347, 347, -1, -1, 30, -1, 0, -1, -1, -1,
- 332, -1, -1, -1, -1, -1, 338, 339, 59, -1,
- 342, 93, 344, 0, 96, -1, 59, -1, -1, -1,
- -1, 260, -1, -1, 0, 357, 0, 359, -1, 268,
- -1, 363, 364, 86, 273, 274, 275, 276, 277, 278,
- -1, 280, 93, 125, -1, -1, -1, -1, -1, 85,
- 93, 350, 351, -1, 41, 59, -1, 44, -1, 33,
- -1, -1, -1, 37, 100, -1, 40, 41, 42, 43,
- 44, 45, 59, 47, 125, -1, -1, 113, -1, -1,
- -1, -1, 125, 59, -1, 59, 60, -1, 62, 93,
- -1, -1, -1, -1, 130, 131, 132, -1, -1, -1,
- -1, -1, -1, 156, -1, -1, 93, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 93, 154, 93,
- -1, 125, 96, 37, 264, -1, -1, -1, 42, 43,
- -1, 45, -1, 47, 37, -1, -1, -1, 125, 42,
- 43, 44, 45, -1, 47, -1, 60, -1, 62, 125,
- 290, 125, -1, -1, -1, -1, -1, 60, 194, 62,
- -1, -1, -1, -1, -1, -1, 202, -1, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, -1,
- 94, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 94, -1, -1, -1, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, -1,
- -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, 91,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- -1, -1, 334, 335, 336, 337, -1, -1, 340, 341,
- -1, 343, 298, -1, 346, 347, 348, 349, 350, 351,
- 352, 353, 354, 355, 356, -1, -1, 264, 360, 361,
- 362, 363, -1, 257, 258, 259, 260, 91, -1, 263,
- 264, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- 353, -1, -1, 290, 357, 358, -1, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, 298, 299, 300, 363, 364, 303,
- 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, 260, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 0, -1,
- 334, 335, 336, 337, -1, -1, 340, 341, 0, 343,
- -1, -1, 346, 347, 348, 349, 350, 351, 352, 353,
- 354, 355, 356, -1, -1, -1, 360, 361, 362, 363,
- -1, 33, -1, -1, -1, 37, 0, -1, 40, 41,
- 42, 43, 44, 45, -1, 47, -1, -1, 260, -1,
- -1, 43, -1, 45, -1, -1, 268, 59, 60, -1,
- 62, 273, 274, 275, 276, 277, 278, 59, 280, -1,
- -1, -1, 346, 347, 348, 349, 350, 351, -1, 43,
- -1, 45, -1, 346, 347, 348, 349, 350, 351, 363,
- -1, 93, -1, -1, 96, 59, 260, -1, -1, -1,
- -1, 93, -1, -1, -1, 0, -1, -1, -1, 273,
- 274, 275, 276, 277, 278, -1, 280, -1, -1, -1,
- -1, -1, -1, 125, -1, -1, -1, -1, -1, 93,
- -1, -1, -1, 125, -1, -1, -1, -1, 33, -1,
- -1, -1, 37, -1, -1, 40, 41, 42, 43, 44,
- 45, -1, 47, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, 59, 60, -1, 62, -1, -1,
- -1, -1, -1, -1, 37, -1, -1, -1, -1, 42,
- 43, 37, 45, -1, 47, -1, 42, 43, 44, 45,
- -1, 47, -1, -1, -1, -1, -1, 60, 93, 62,
- -1, 96, 37, -1, 60, -1, 62, 42, 43, 44,
- 45, -1, 47, -1, 37, -1, -1, -1, -1, 42,
- 43, -1, 45, -1, 47, 60, -1, 62, -1, -1,
- 125, 94, -1, -1, -1, -1, -1, 60, 94, 62,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, 94,
- -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 94, -1, -1, -1, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, -1,
- -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- -1, -1, 334, 335, 336, 337, -1, -1, 340, 341,
- -1, 343, -1, -1, 346, 347, 348, 349, 350, 351,
- 352, 353, 354, 355, 356, -1, -1, -1, 360, 361,
- 362, 363, 257, 258, 259, 260, -1, -1, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, -1, -1,
- -1, -1, -1, -1, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, -1, -1, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 0, -1, 334,
- 335, 336, 337, -1, 300, 340, 341, 303, 343, -1,
- -1, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, -1, 286, -1, 360, 361, 362, 363, -1,
- 33, -1, -1, -1, 37, -1, -1, 40, 41, 42,
- 43, 44, 45, 346, 47, 348, 349, 350, 351, -1,
- 346, 347, 348, 349, 350, 351, 59, 60, -1, 62,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 346, 347, 348, 349, 350, 351, -1, -1, -1,
- -1, -1, -1, 346, 347, 348, 349, 350, 351, -1,
- 93, -1, -1, 96, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
- -1, 37, -1, -1, 40, 41, 42, 43, 44, 45,
- -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, 60, -1, 62, -1, -1, -1,
- -1, -1, -1, 37, -1, -1, -1, -1, 42, 43,
- 37, 45, -1, 47, -1, 42, 43, 44, 45, -1,
- 47, -1, -1, -1, -1, -1, 60, 93, 62, -1,
- 96, 37, -1, 60, -1, 62, 42, 43, -1, 45,
- -1, 47, -1, 37, -1, -1, -1, -1, 42, 43,
- -1, 45, -1, 47, 60, -1, 62, -1, -1, 125,
- 94, -1, -1, -1, -1, -1, 60, 94, 62, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 257, 258, 259, 260, 94, -1,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 94, -1, -1, -1, -1, -1, -1, -1, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, -1, -1,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, -1, -1, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, -1,
- -1, 334, 335, 336, 337, -1, -1, 340, 341, -1,
- 343, -1, -1, 346, 347, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, -1, -1, -1, 360, 361, 362,
- 363, 257, 258, 259, 260, -1, -1, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, 0, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, 300, -1, -1, 303, 304, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, 289, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 0, 59, 334, 335,
- 336, 337, -1, 300, 340, 341, 303, 343, -1, -1,
- 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
- 356, -1, -1, -1, 360, 361, 362, 363, -1, 33,
- -1, 93, -1, -1, 96, -1, 40, 41, -1, 43,
- 44, 45, 346, 347, 348, 349, 350, 351, -1, 346,
- 347, 348, 349, 350, 351, 59, 60, -1, 62, -1,
- -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
- 346, 347, 348, 349, 350, 351, -1, -1, -1, -1,
- -1, -1, 346, 347, 348, 349, 350, 351, -1, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 0, 85, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 33, -1, -1, -1,
- -1, -1, -1, 40, 41, -1, 43, 44, 45, 130,
- 131, 132, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, 60, -1, 62, -1, -1, -1, -1,
- -1, -1, -1, 154, -1, -1, -1, -1, -1, 37,
- -1, -1, -1, -1, 42, 43, 44, 45, -1, 47,
- -1, -1, -1, -1, -1, 257, 93, -1, -1, 96,
- -1, 263, 60, -1, 62, -1, 268, -1, -1, -1,
- -1, -1, -1, 194, -1, -1, -1, -1, -1, -1,
- -1, 202, -1, -1, -1, -1, -1, -1, 125, -1,
- -1, -1, -1, -1, -1, -1, 94, -1, 300, -1,
- -1, -1, -1, -1, 46, -1, -1, -1, -1, -1,
- -1, -1, -1, 257, 258, 259, 260, -1, -1, 263,
- 264, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, 298, 299, 300, -1, -1, 303,
- 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, 298, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, -1,
- 334, 335, 336, 337, -1, -1, 340, 341, -1, 343,
- -1, -1, 346, 347, 348, 349, 350, 351, 352, 353,
- 354, 355, 356, -1, 46, -1, 360, 361, 362, 363,
- 257, 258, 259, 260, -1, -1, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, 363, 364, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, -1, -1, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- -1, -1, -1, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 0, -1, 334, 335, 336,
- 337, -1, 300, 340, 341, 303, 343, -1, -1, 346,
- 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
- -1, -1, -1, 360, 361, 362, 363, -1, 33, 271,
- 272, -1, -1, -1, -1, 40, 41, -1, -1, 44,
- -1, -1, -1, -1, -1, -1, -1, -1, 346, 347,
- 348, 349, 350, 351, 59, 60, -1, 62, -1, -1,
- -1, -1, -1, -1, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
- -1, 96, 334, 335, 336, 337, -1, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
- 352, 353, 354, 355, 356, -1, -1, -1, -1, -1,
- 125, -1, -1, -1, -1, 257, -1, -1, -1, -1,
- -1, 263, -1, -1, -1, 33, 268, -1, -1, 271,
- 272, -1, 40, 41, -1, -1, 44, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, 60, -1, 62, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
- -1, -1, 334, 335, 336, 337, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 352, 353, 354, 355, 356, -1, -1, 125, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 46, -1, -1, -1, -1, -1, -1,
- -1, -1, 257, 258, 259, 260, 46, -1, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, -1, -1,
- -1, -1, -1, -1, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, -1, -1, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, -1, -1, 334,
- 335, 336, 337, -1, -1, 340, 341, -1, 343, -1,
- -1, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, -1, -1, -1, 360, 361, 362, 363, 257,
- 258, 259, 260, -1, -1, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
- -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 300, -1, -1, 303, 304, 305, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
- -1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 0, -1, 334, 335, 336, 337,
- -1, -1, 340, 341, -1, 343, -1, -1, 346, 347,
- 348, 349, 350, 351, 352, 353, 354, 355, 356, -1,
- -1, -1, 360, 361, 362, 363, -1, 33, 271, 272,
- -1, -1, -1, -1, 40, 41, -1, -1, 44, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, 60, -1, 62, -1, -1, -1,
- -1, -1, -1, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 93, -1, -1,
- 96, 334, 335, 336, 337, -1, -1, -1, -1, -1,
- -1, 0, -1, -1, 334, 335, 336, 337, -1, 352,
- 353, 354, 355, 356, -1, -1, -1, -1, -1, 125,
- -1, -1, 352, 353, 354, 355, 356, -1, -1, -1,
- -1, -1, -1, -1, 33, -1, -1, -1, -1, -1,
- -1, 40, 41, -1, -1, 44, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, 60, -1, 62, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, 259, 260, -1, -1, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, 300, -1, -1, 303, 304, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, -1, -1, 340, 341, -1, 343, -1, -1,
- 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
- 356, -1, -1, -1, 360, 361, 362, 363, 257, 258,
- 259, 260, -1, -1, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, 0, -1, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, -1, -1, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 0, 59, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, 343, -1, -1, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, -1, -1,
- -1, 360, 361, 362, 363, -1, 33, -1, 93, -1,
- -1, 96, -1, 40, 41, -1, 43, 44, 45, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, 62, -1, -1, -1, -1,
- 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
- 40, 41, -1, -1, 44, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 257, 93, -1, -1, 96, -1, 263, -1,
- -1, -1, -1, 268, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 300, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, -1, -1, 263, -1, 265, 266,
- 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, -1, -1, -1, -1, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, -1, -1, 334, 335, 336,
- 337, -1, -1, 340, 341, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 352, 353, 354, 355, 356,
- -1, -1, -1, 360, 361, 362, 363, 257, 258, 259,
- 260, -1, -1, 263, 264, 265, 266, 267, 268, 269,
- 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- 300, -1, -1, 303, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
- -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 0, -1, 334, 335, 336, 337, -1, -1,
- 340, 341, -1, 343, -1, -1, 346, 347, 348, 349,
- -1, -1, 352, 353, 354, 355, 356, -1, -1, -1,
- 360, 361, 362, 363, -1, 33, -1, -1, -1, -1,
- -1, -1, 40, 41, -1, -1, 44, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 33, -1, -1, -1, -1, -1, -1, 40,
- 41, -1, 43, 44, 45, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
- -1, 62, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, 96, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
- 258, 259, 260, -1, -1, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
- -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 300, -1, -1, 303, 304, 305, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
- -1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, -1, -1, 334, 335, 336, 337,
- -1, -1, 340, 341, -1, 343, -1, -1, 346, 347,
- 348, 349, -1, -1, 352, 353, 354, 355, 356, -1,
- -1, -1, 360, 361, 362, 363, 257, 258, 259, 260,
- -1, -1, 263, -1, 265, 266, 267, 268, 269, 270,
- 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
- -1, -1, -1, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
- 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 0, -1, 334, 335, 336, 337, -1, -1, 340,
- 341, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 352, 353, 354, 355, 356, -1, -1, -1, 360,
- 361, 362, 363, -1, 33, -1, -1, -1, -1, -1,
- -1, 40, 41, -1, -1, 44, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, -1, -1, -1, -1, -1, -1, 40, 41,
- -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, -1, -1, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, -1, -1, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, 343, -1, -1, 346, 347, -1,
- -1, -1, -1, 352, 353, 354, 355, 356, -1, -1,
- -1, 360, 361, 362, 363, 257, 258, 259, 260, -1,
- -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, -1,
- -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 0, -1, 334, 335, 336, 337, -1, -1, 340, 341,
- -1, 343, -1, -1, -1, 347, -1, -1, -1, -1,
- 352, 353, 354, 355, 356, -1, -1, -1, 360, 361,
- 362, 363, -1, 33, -1, -1, -1, -1, -1, -1,
- 40, 41, -1, 43, 44, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, 62, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 33, -1, -1, -1, -1, -1, -1, 40, 41, -1,
- -1, 44, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, -1, -1, 62,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 93, -1, -1, 96, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
- 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- -1, -1, -1, -1, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
- -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, -1, -1, 334, 335, 336, 337, -1, -1,
- 340, 341, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 352, 353, 354, 355, 356, -1, -1, -1,
- 360, 361, 362, 363, 257, 258, 259, 260, -1, -1,
- 263, -1, 265, 266, 267, 268, 269, 270, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, -1, -1, -1,
- -1, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, -1, -1, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, 0,
- -1, 334, 335, 336, 337, -1, -1, 340, 341, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 352,
- 353, 354, 355, 356, -1, -1, -1, 360, 361, 362,
- 363, -1, 33, -1, -1, -1, -1, -1, -1, 40,
- 41, -1, -1, 44, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, 96, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
- -1, -1, -1, -1, -1, -1, 40, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
- -1, -1, 263, -1, 265, 266, 267, 268, 269, 270,
- 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
- -1, -1, -1, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, -1, 91, -1,
- -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, -1, -1, 334, 335, 336, 337, -1, -1, 340,
- 341, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 123, 352, 353, 354, 355, 356, -1, -1, -1, 360,
- 361, 362, 363, 257, 258, 259, 260, -1, -1, 263,
- -1, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, 298, 299, -1, -1, -1, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 0, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, -1,
- 334, 335, 336, 337, -1, -1, 340, 341, -1, -1,
- -1, -1, -1, -1, -1, -1, 33, -1, 352, 353,
- 354, 355, 356, 40, -1, -1, 360, 361, 362, 363,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, 257, 258, -1, 260, 261, -1,
- -1, -1, -1, -1, -1, -1, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 332,
- -1, -1, -1, 33, -1, 338, 339, -1, -1, 342,
- 40, 344, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 357, -1, 359, -1, -1, 59,
- 363, 364, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, -1, -1, 263, -1, 265, 266,
- 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, -1, -1, -1, -1, -1, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- -1, -1, 91, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, -1, -1, 334, 335, 336,
- 337, -1, -1, 340, 341, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 123, 352, 353, 354, 355, 356,
- -1, -1, -1, 360, 361, 362, 363, 257, 258, 259,
- 260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
- 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- -1, -1, -1, -1, -1, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 0, -1, -1,
- -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, -1, -1, 334, 335, 336, 337, -1, -1,
- 340, 341, -1, -1, -1, -1, -1, -1, -1, -1,
- 33, -1, 352, 353, 354, 355, 356, 40, -1, -1,
- 360, 361, 362, 363, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, -1, 257, 258,
- -1, 260, 261, -1, -1, -1, -1, -1, -1, -1,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, -1, -1, -1, -1, -1, -1, -1, -1,
- 93, -1, -1, 96, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 332, -1, -1, -1, 33, -1, 338,
- 339, -1, -1, 342, 40, 344, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 357, -1,
- 359, -1, -1, 59, 363, 364, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 257, 258, 259, 260, -1, -1,
- 263, -1, 265, 266, 267, 268, 269, 270, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, -1, -1, -1,
- -1, -1, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, -1, -1, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, -1,
- -1, 334, 335, 336, 337, -1, -1, 340, 341, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 352,
- 353, 354, 355, 356, -1, -1, -1, 360, 361, 362,
- 363, 257, 258, 259, 260, -1, -1, 263, -1, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, -1, -1, -1, -1, -1, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 0, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, -1, -1, 340, 341, -1, -1, -1, -1,
- -1, -1, -1, -1, 33, -1, 352, 353, 354, 355,
- 356, 40, -1, -1, 360, 361, 362, 363, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, -1, -1, -1, -1, -1, -1, 40, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, -1, -1, 263, -1, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, -1, -1, -1, -1, -1, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 352, 353, 354, 355, 356, -1, -1,
- -1, 360, 361, 362, 363, 257, 258, 259, 260, -1,
- -1, 263, -1, 265, 266, 267, 268, 269, 270, 271,
- 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, -1, -1,
- -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, 0, -1, -1, -1, -1,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- -1, -1, 334, 335, 336, 337, -1, -1, 340, 341,
- -1, -1, -1, -1, -1, -1, -1, -1, 33, -1,
- 352, 353, 354, 355, 356, 40, -1, -1, 360, 361,
- 362, 363, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
- -1, 96, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 33, -1, -1, -1, -1,
- -1, -1, 40, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 257, 258, 259, 260, -1, -1, 263, -1,
- 265, 266, 267, 268, 269, 270, 271, 272, -1, -1,
- -1, -1, -1, -1, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, -1, -1, -1, -1, -1,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, -1, -1, 334,
- 335, 336, 337, -1, -1, 340, 341, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 352, 353, 354,
- 355, 356, -1, -1, -1, 360, 361, 362, 363, 257,
- 258, 259, 260, -1, -1, 263, -1, 265, 266, 267,
- 268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
- -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, -1, -1, -1, -1, -1, 305, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, 0,
- -1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, -1, -1, 334, 335, 336, 337,
- -1, -1, 340, 341, -1, -1, -1, -1, -1, -1,
- -1, -1, 33, -1, 352, 353, 354, 355, 356, 40,
- -1, -1, 360, 361, 362, 363, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, 96, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
- -1, -1, -1, -1, -1, -1, 40, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
- -1, -1, 263, -1, 265, 266, 267, 268, 269, 270,
- 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
- -1, -1, -1, -1, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, -1, -1, -1,
- -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, -1, -1, 334, 335, 336, 337, -1, -1, 340,
- 341, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 352, 353, 354, 355, 356, -1, -1, -1, 360,
- 361, 362, 363, 257, 258, 259, 260, -1, -1, 263,
- -1, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, 298, 299, -1, -1, -1, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 0, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, -1,
- 334, 335, 336, 337, -1, -1, 340, 341, -1, -1,
- -1, -1, -1, -1, -1, -1, 33, -1, 352, 353,
- 354, 355, 356, 40, -1, -1, 360, 361, 362, 363,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
- 40, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, -1, -1, 263, -1, 265, 266,
- 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, -1, -1, -1, -1, -1, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- -1, -1, -1, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, -1, -1, 334, 335, 336,
- 337, -1, -1, 340, 341, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 352, 353, 354, 355, 356,
- -1, -1, -1, 360, 361, 362, 363, 257, 258, 259,
- 260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
- 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- -1, -1, -1, -1, -1, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 0, -1, -1,
- -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, -1, -1, 334, 335, 336, 337, -1, -1,
- 340, 341, -1, -1, -1, -1, -1, -1, -1, -1,
- 33, -1, 352, 353, 354, 355, 356, 40, -1, -1,
- 360, 361, 362, 363, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 93, -1, -1, 96, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
- -1, -1, -1, -1, 40, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 257, 258, 259, 260, -1, -1,
- 263, -1, 265, 266, 267, 268, 269, 270, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, -1, -1, -1,
- -1, -1, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, -1, -1, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, -1,
- -1, 334, 335, 336, 337, -1, -1, 340, 341, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 352,
- 353, 354, 355, 356, -1, -1, -1, 360, 361, 362,
- 363, 257, 258, 259, 260, -1, -1, 263, -1, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, -1, -1, -1, -1, -1, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 0, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, -1, -1, 340, 341, -1, -1, -1, -1,
- -1, -1, -1, -1, 33, -1, 352, 353, 354, 355,
- 356, 40, -1, -1, 360, 361, 362, 363, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, -1, -1, -1, -1, -1, -1, 40, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, -1, -1, 263, -1, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, -1, -1, -1, -1, -1, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 352, 353, 354, 355, 356, -1, -1,
- -1, 360, 361, 362, 363, 257, 258, 259, 260, -1,
- -1, 263, -1, 265, 266, 267, 268, 269, 270, 271,
- 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, -1, -1,
- -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 0, -1, 334, 335, 336, 337, -1, -1, 340, 341,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 352, 353, 354, 355, 356, -1, -1, -1, 360, 361,
- 362, 363, -1, 33, -1, -1, -1, -1, -1, -1,
- 40, 41, -1, 43, 44, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, 62, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 33, -1,
- -1, -1, -1, -1, -1, 40, 41, -1, -1, 44,
- -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, 60, -1, 62, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
- -1, 96, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 41, -1, -1, 44, -1,
- 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, -1, 33, -1, -1, -1, -1,
- -1, -1, 40, -1, -1, -1, -1, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, -1, 93, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
- 270, 271, 272, -1, -1, 93, -1, -1, 96, 125,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- -1, -1, -1, -1, 304, 305, -1, 125, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 317, 318, 319,
- 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 257, 258, 259, 260, -1, -1, 263, -1,
- 340, 341, -1, 268, 33, -1, 271, 272, -1, -1,
- -1, 40, 41, -1, -1, -1, 45, -1, -1, -1,
- 360, 361, 362, 363, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 96, -1, 334,
- 335, 336, 337, -1, -1, -1, -1, -1, 264, -1,
- -1, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, -1, -1, -1, -1, -1, -1, 363, 257,
- 258, 259, 260, -1, 290, 263, -1, 265, 266, 267,
- 268, 269, 270, -1, 300, 0, -1, 303, -1, -1,
- -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, -1, -1, -1, -1, -1, 305, 33, -1,
- -1, -1, -1, -1, -1, 40, -1, -1, -1, -1,
- 346, 347, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 59, -1, -1, -1, -1, -1,
- -1, -1, 340, 341, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 360, 361, 362, 363, -1, -1, 93, -1,
- -1, 96, -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, -1, -1, 263, -1, -1, -1, -1, 268,
- 125, -1, 271, 272, -1, -1, -1, -1, -1, 33,
- -1, -1, -1, -1, -1, -1, 40, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, 352, 353, 354, 355, 356, -1, -1,
- -1, -1, -1, -1, 363, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 257, 258, 259, 260, -1, -1, 263, -1,
- -1, 59, -1, 268, -1, -1, 271, 272, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 93, -1, -1, -1, -1,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 125, -1, 334,
- 335, 336, 337, -1, -1, 0, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 352, 353, 354,
- 355, 356, -1, 257, 258, 259, 260, -1, 363, 263,
- -1, -1, -1, -1, 268, -1, -1, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -1, -1, -1, -1, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 93, -1,
- 334, 335, 336, 337, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 0, -1, -1, -1, 352, 353,
- 354, 355, 356, -1, -1, -1, -1, -1, -1, 363,
- 125, -1, 260, -1, -1, -1, -1, 265, 266, 267,
- -1, 269, 270, 271, 272, -1, -1, -1, -1, -1,
- -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 300, 59, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- -1, -1, 340, 341, -1, -1, -1, -1, -1, 0,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 360, 361, 362, 363, -1, -1, -1, 125,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 260, -1, -1, -1, -1,
- 265, 266, 267, -1, 269, 270, 271, 272, 59, -1,
- -1, -1, -1, 91, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, 123, -1, -1, -1, -1,
- -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 125, 340, 341, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 360, 361, 362, 363, -1,
- -1, -1, -1, -1, 260, -1, -1, -1, -1, 265,
- 266, 267, 59, 269, 270, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, -1, -1, 93, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 125, 257,
- 258, -1, 260, 261, 340, 341, -1, -1, -1, -1,
- -1, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, 280, -1, 360, 361, 362, 363, -1, 260,
- -1, -1, -1, -1, 265, 266, 267, 59, 269, 270,
- 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
- -1, 93, -1, -1, 332, -1, -1, -1, -1, -1,
- 338, 339, 0, -1, 342, -1, 344, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 357,
- -1, 359, -1, 125, -1, 363, 364, -1, -1, 340,
- 341, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 360,
- 361, 362, 363, 260, -1, -1, -1, -1, 265, 266,
- 267, 59, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, -1, -1, 93, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
- -1, -1, -1, 340, 341, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 33, -1, -1, -1, -1,
- -1, -1, 40, 360, 361, 362, 363, -1, 260, -1,
- -1, -1, -1, 265, 266, 267, -1, 269, 270, 271,
- 272, 59, -1, -1, -1, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, -1, -1,
- -1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
- -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 125, 340, 341,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 43, -1, 45, 46, 360, 361,
- 362, 363, 260, -1, -1, -1, -1, 265, 266, 267,
- 59, 269, 270, 271, 272, -1, -1, -1, -1, -1,
- -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, -1, -1, 93, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
- -1, -1, 340, 341, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 360, 361, 362, 363, -1, -1, -1, 257,
- 258, 259, -1, -1, -1, 263, -1, 265, 266, 267,
- 268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
- -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, -1, -1, -1, -1, -1, 305, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
- -1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 0, -1, 334, 335, 336, 337,
- -1, -1, 340, 341, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 352, 353, 354, 355, 356, -1,
- -1, -1, 360, 361, 362, -1, -1, -1, -1, -1,
- -1, 37, 271, 272, -1, 41, 42, 43, 44, 45,
- -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, 60, -1, 62, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
- 319, 320, 321, -1, -1, -1, -1, 93, -1, -1,
- -1, -1, 33, -1, -1, 334, 335, 336, 337, 40,
- -1, -1, -1, -1, 45, -1, -1, -1, -1, -1,
- -1, -1, -1, 352, 353, 354, 355, 356, -1, 125,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 91, -1, -1, -1, -1, 96, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 123, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, -1, -1, -1, -1, -1, -1, 40, -1,
- -1, -1, -1, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 264, 91,
- -1, -1, -1, -1, 96, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 290, -1, -1, -1, -1, -1,
- -1, 123, -1, -1, 300, -1, -1, 303, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 33, -1, 257, 258, 259, 260,
- 261, 40, 263, -1, -1, -1, 45, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 346, 347, 348, 349, 350, 351, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, 96, -1, -1,
- -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 332, -1, 334, 335, 336, 337, 338, 339, -1,
- -1, 342, -1, 344, -1, -1, -1, -1, -1, -1,
- -1, 352, 353, 354, 355, 356, 357, -1, 359, -1,
- -1, -1, 363, 364, -1, 257, 258, 259, 260, 261,
- -1, 263, -1, -1, -1, -1, 268, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, -1,
- 33, -1, -1, -1, -1, -1, -1, 40, -1, -1,
- -1, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 332, -1, 334, 335, 336, 337, 338, 339, -1, -1,
- 342, -1, 344, 96, -1, -1, -1, -1, -1, -1,
- 352, 353, 354, 355, 356, 357, -1, 359, -1, -1,
- -1, 363, 364, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, -1, -1, 263, -1, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, -1, -1, -1, -1, -1, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, 33,
- -1, 340, 341, -1, -1, -1, 40, -1, -1, -1,
- -1, 45, -1, 352, 353, 354, 355, 356, -1, -1,
- -1, 360, 361, 362, 363, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 257, 258, 259, 260, -1, -1,
- 263, -1, 96, -1, -1, 268, -1, -1, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, -1, -1, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, 33,
- -1, 334, 335, 336, 337, -1, 40, -1, -1, -1,
- -1, 45, -1, -1, -1, -1, -1, -1, -1, 352,
- 353, 354, 355, 356, -1, -1, -1, -1, -1, -1,
- 363, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 257, 258, 259, 260, -1, -1, 263,
- -1, -1, -1, -1, 268, -1, 33, 271, 272, -1,
- -1, -1, -1, 40, -1, -1, -1, -1, 45, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, 96,
- 334, 335, 336, 337, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 352, 353,
- 354, 355, 356, -1, -1, -1, -1, -1, -1, 363,
- -1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
- -1, -1, -1, -1, 40, -1, 42, -1, -1, 45,
- -1, -1, -1, 257, 258, 259, 260, -1, -1, 263,
- -1, -1, -1, -1, 268, -1, -1, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 96, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, -1,
- 334, 335, 336, 337, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 352, 353,
- 354, 355, 356, -1, -1, -1, -1, 33, -1, 363,
- 257, 258, 259, 260, 40, -1, 263, -1, -1, 45,
- -1, 268, -1, -1, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 96, -1, -1, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, -1, -1, 334, 335, 336,
- 337, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 352, 353, 354, 355, 356,
- -1, 257, 258, 259, -1, -1, 363, 263, -1, -1,
- -1, -1, 268, 33, -1, 271, 272, -1, -1, -1,
- 40, -1, -1, -1, -1, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 96, -1, 334, 335,
- 336, 337, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 352, 353, 354, 355,
- 356, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 33, -1,
- -1, 257, 258, 259, -1, 40, -1, 263, -1, -1,
- 45, -1, 268, -1, -1, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 96, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 352, 353, 354, 355,
- 356, 33, -1, -1, -1, -1, -1, -1, 40, -1,
- -1, -1, -1, 45, -1, -1, -1, 257, 258, 259,
- -1, -1, -1, 263, -1, -1, -1, -1, 268, -1,
- -1, 271, 272, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 96, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
- -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, -1, -1, 334, 335, 336, 337, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 352, 353, 354, 355, 356, -1, -1, -1,
- -1, -1, 257, 258, 259, -1, -1, -1, 263, -1,
- -1, -1, -1, 268, -1, -1, 271, 272, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, -1, -1, 334,
- 335, 336, 337, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 352, 353, 354,
- 355, 356, -1, -1, -1, 257, 258, 259, -1, -1,
- -1, 263, -1, -1, -1, -1, 268, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- -1, -1, 334, 335, 336, 337, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 352, 353, 354, 355, 356,
-};
-#define YYFINAL 2
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 366
-#if YYDEBUG
-char *yyname[] = {
-"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-"'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,
-0,0,0,0,0,"':'","';'","'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,"'['",0,"']'","'^'",0,"'`'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"LABEL","VARIABLE","NUMBER",
-"TEXT","COMMAND_LINE","DELIMITED","ORDINAL","TH","LEFT_ARROW_HEAD",
-"RIGHT_ARROW_HEAD","DOUBLE_ARROW_HEAD","LAST","UP","DOWN","LEFT","RIGHT","BOX",
-"CIRCLE","ELLIPSE","ARC","LINE","ARROW","MOVE","SPLINE","HEIGHT","RADIUS",
-"WIDTH","DIAMETER","FROM","TO","AT","WITH","BY","THEN","DOTTED","DASHED","CHOP",
-"SAME","INVISIBLE","LJUST","RJUST","ABOVE","BELOW","OF","THE","WAY","BETWEEN",
-"AND","HERE","DOT_N","DOT_E","DOT_W","DOT_S","DOT_NE","DOT_SE","DOT_NW",
-"DOT_SW","DOT_C","DOT_START","DOT_END","DOT_X","DOT_Y","DOT_HT","DOT_WID",
-"DOT_RAD","SIN","COS","ATAN2","LOG","EXP","SQRT","K_MAX","K_MIN","INT","RAND",
-"COPY","THRU","TOP","BOTTOM","UPPER","LOWER","SH","PRINT","CW","CCW","FOR","DO",
-"IF","ELSE","ANDAND","OROR","NOTEQUAL","EQUALEQUAL","LESSEQUAL","GREATEREQUAL",
-"LEFT_CORNER","RIGHT_CORNER","CENTER","END","START","RESET","UNTIL","PLOT",
-"THICKNESS","FILL","ALIGNED","SPRINTF","COMMAND","DEFINE","UNDEF",
-};
-char *yyrule[] = {
-"$accept : top",
-"top : optional_separator",
-"top : element_list",
-"element_list : optional_separator middle_element_list optional_separator",
-"middle_element_list : element",
-"middle_element_list : middle_element_list separator element",
-"optional_separator :",
-"optional_separator : separator",
-"separator : ';'",
-"separator : separator ';'",
-"placeless_element : VARIABLE '=' any_expr",
-"placeless_element : VARIABLE ':' '=' any_expr",
-"placeless_element : UP",
-"placeless_element : DOWN",
-"placeless_element : LEFT",
-"placeless_element : RIGHT",
-"placeless_element : COMMAND_LINE",
-"placeless_element : COMMAND print_args",
-"placeless_element : PRINT print_args",
-"$$1 :",
-"placeless_element : SH $$1 DELIMITED",
-"placeless_element : COPY TEXT",
-"$$2 :",
-"$$3 :",
-"placeless_element : COPY TEXT THRU $$2 DELIMITED $$3 until",
-"$$4 :",
-"$$5 :",
-"placeless_element : COPY THRU $$4 DELIMITED $$5 until",
-"$$6 :",
-"placeless_element : FOR VARIABLE '=' expr TO expr optional_by DO $$6 DELIMITED",
-"placeless_element : simple_if",
-"$$7 :",
-"placeless_element : simple_if ELSE $$7 DELIMITED",
-"placeless_element : reset_variables",
-"placeless_element : RESET",
-"reset_variables : RESET VARIABLE",
-"reset_variables : reset_variables VARIABLE",
-"reset_variables : reset_variables ',' VARIABLE",
-"print_args : print_arg",
-"print_args : print_args print_arg",
-"print_arg : expr",
-"print_arg : text",
-"print_arg : position",
-"$$8 :",
-"simple_if : IF any_expr THEN $$8 DELIMITED",
-"until :",
-"until : UNTIL TEXT",
-"any_expr : expr",
-"any_expr : text_expr",
-"text_expr : text EQUALEQUAL text",
-"text_expr : text NOTEQUAL text",
-"text_expr : text_expr ANDAND text_expr",
-"text_expr : text_expr ANDAND expr",
-"text_expr : expr ANDAND text_expr",
-"text_expr : text_expr OROR text_expr",
-"text_expr : text_expr OROR expr",
-"text_expr : expr OROR text_expr",
-"text_expr : '!' text_expr",
-"optional_by :",
-"optional_by : BY expr",
-"optional_by : BY '*' expr",
-"element : object_spec",
-"element : LABEL ':' optional_separator element",
-"element : LABEL ':' optional_separator position_not_place",
-"element : LABEL ':' optional_separator place",
-"$$9 :",
-"$$10 :",
-"element : '{' $$9 element_list '}' $$10 optional_element",
-"element : placeless_element",
-"optional_element :",
-"optional_element : element",
-"object_spec : BOX",
-"object_spec : CIRCLE",
-"object_spec : ELLIPSE",
-"object_spec : ARC",
-"object_spec : LINE",
-"object_spec : ARROW",
-"object_spec : MOVE",
-"object_spec : SPLINE",
-"object_spec : text",
-"object_spec : PLOT expr",
-"object_spec : PLOT expr text",
-"$$11 :",
-"object_spec : '[' $$11 element_list ']'",
-"object_spec : object_spec HEIGHT expr",
-"object_spec : object_spec RADIUS expr",
-"object_spec : object_spec WIDTH expr",
-"object_spec : object_spec DIAMETER expr",
-"object_spec : object_spec expr",
-"object_spec : object_spec UP",
-"object_spec : object_spec UP expr",
-"object_spec : object_spec DOWN",
-"object_spec : object_spec DOWN expr",
-"object_spec : object_spec RIGHT",
-"object_spec : object_spec RIGHT expr",
-"object_spec : object_spec LEFT",
-"object_spec : object_spec LEFT expr",
-"object_spec : object_spec FROM position",
-"object_spec : object_spec TO position",
-"object_spec : object_spec AT position",
-"object_spec : object_spec WITH path",
-"object_spec : object_spec BY expr_pair",
-"object_spec : object_spec THEN",
-"object_spec : object_spec DOTTED",
-"object_spec : object_spec DOTTED expr",
-"object_spec : object_spec DASHED",
-"object_spec : object_spec DASHED expr",
-"object_spec : object_spec FILL",
-"object_spec : object_spec FILL expr",
-"object_spec : object_spec CHOP",
-"object_spec : object_spec CHOP expr",
-"object_spec : object_spec SAME",
-"object_spec : object_spec INVISIBLE",
-"object_spec : object_spec LEFT_ARROW_HEAD",
-"object_spec : object_spec RIGHT_ARROW_HEAD",
-"object_spec : object_spec DOUBLE_ARROW_HEAD",
-"object_spec : object_spec CW",
-"object_spec : object_spec CCW",
-"object_spec : object_spec text",
-"object_spec : object_spec LJUST",
-"object_spec : object_spec RJUST",
-"object_spec : object_spec ABOVE",
-"object_spec : object_spec BELOW",
-"object_spec : object_spec THICKNESS expr",
-"object_spec : object_spec ALIGNED",
-"text : TEXT",
-"text : SPRINTF '(' TEXT sprintf_args ')'",
-"sprintf_args :",
-"sprintf_args : sprintf_args ',' expr",
-"position : position_not_place",
-"position : place",
-"position_not_place : expr_pair",
-"position_not_place : position '+' expr_pair",
-"position_not_place : position '-' expr_pair",
-"position_not_place : '(' position ',' position ')'",
-"position_not_place : expr between position AND position",
-"position_not_place : expr '<' position ',' position '>'",
-"between : BETWEEN",
-"between : OF THE WAY BETWEEN",
-"expr_pair : expr ',' expr",
-"expr_pair : '(' expr_pair ')'",
-"place : label",
-"place : label corner",
-"place : corner label",
-"place : corner OF label",
-"place : HERE",
-"label : LABEL",
-"label : nth_primitive",
-"label : label '.' LABEL",
-"ordinal : ORDINAL",
-"ordinal : '`' any_expr TH",
-"optional_ordinal_last : LAST",
-"optional_ordinal_last : ordinal LAST",
-"nth_primitive : ordinal object_type",
-"nth_primitive : optional_ordinal_last object_type",
-"object_type : BOX",
-"object_type : CIRCLE",
-"object_type : ELLIPSE",
-"object_type : ARC",
-"object_type : LINE",
-"object_type : ARROW",
-"object_type : SPLINE",
-"object_type : '[' ']'",
-"object_type : TEXT",
-"label_path : '.' LABEL",
-"label_path : label_path '.' LABEL",
-"relative_path : corner",
-"relative_path : label_path",
-"relative_path : label_path corner",
-"path : relative_path",
-"path : ORDINAL LAST object_type relative_path",
-"path : LAST object_type relative_path",
-"path : ORDINAL object_type relative_path",
-"path : LABEL relative_path",
-"corner : DOT_N",
-"corner : DOT_E",
-"corner : DOT_W",
-"corner : DOT_S",
-"corner : DOT_NE",
-"corner : DOT_SE",
-"corner : DOT_NW",
-"corner : DOT_SW",
-"corner : DOT_C",
-"corner : DOT_START",
-"corner : DOT_END",
-"corner : TOP",
-"corner : BOTTOM",
-"corner : LEFT",
-"corner : RIGHT",
-"corner : UPPER LEFT",
-"corner : LOWER LEFT",
-"corner : UPPER RIGHT",
-"corner : LOWER RIGHT",
-"corner : LEFT_CORNER",
-"corner : RIGHT_CORNER",
-"corner : UPPER LEFT_CORNER",
-"corner : LOWER LEFT_CORNER",
-"corner : UPPER RIGHT_CORNER",
-"corner : LOWER RIGHT_CORNER",
-"corner : CENTER",
-"corner : START",
-"corner : END",
-"expr : VARIABLE",
-"expr : NUMBER",
-"expr : place DOT_X",
-"expr : place DOT_Y",
-"expr : place DOT_HT",
-"expr : place DOT_WID",
-"expr : place DOT_RAD",
-"expr : expr '+' expr",
-"expr : expr '-' expr",
-"expr : expr '*' expr",
-"expr : expr '/' expr",
-"expr : expr '%' expr",
-"expr : expr '^' expr",
-"expr : '-' expr",
-"expr : '(' any_expr ')'",
-"expr : SIN '(' any_expr ')'",
-"expr : COS '(' any_expr ')'",
-"expr : ATAN2 '(' any_expr ',' any_expr ')'",
-"expr : LOG '(' any_expr ')'",
-"expr : EXP '(' any_expr ')'",
-"expr : SQRT '(' any_expr ')'",
-"expr : K_MAX '(' any_expr ',' any_expr ')'",
-"expr : K_MIN '(' any_expr ',' any_expr ')'",
-"expr : INT '(' any_expr ')'",
-"expr : RAND '(' any_expr ')'",
-"expr : RAND '(' ')'",
-"expr : expr '<' expr",
-"expr : expr LESSEQUAL expr",
-"expr : expr '>' expr",
-"expr : expr GREATEREQUAL expr",
-"expr : expr EQUALEQUAL expr",
-"expr : expr NOTEQUAL expr",
-"expr : expr ANDAND expr",
-"expr : expr OROR expr",
-"expr : '!' expr",
-};
-#endif
-#define yyclearin (yychar=(-1))
-#define yyerrok (yyerrflag=0)
-#ifdef YYSTACKSIZE
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#endif
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH 500
-#endif
-#endif
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short yyss[YYSTACKSIZE];
-YYSTYPE yyvs[YYSTACKSIZE];
-#define yystacksize YYSTACKSIZE
-#line 1514 "/u/jjc/groff/pic/pic.y"
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-static struct {
- const char *name;
- double val;
- int scaled; // non-zero if val should be multiplied by scale
-} defaults_table[] = {
- { "arcrad", .25, 1 },
- { "arrowht", .1, 1 },
- { "arrowwid", .05, 1 },
- { "circlerad", .25, 1 },
- { "boxht", .5, 1 },
- { "boxwid", .75, 1 },
- { "boxrad", 0.0, 1 },
- { "dashwid", .05, 1 },
- { "ellipseht", .5, 1 },
- { "ellipsewid", .75, 1 },
- { "moveht", .5, 1 },
- { "movewid", .5, 1 },
- { "lineht", .5, 1 },
- { "linewid", .5, 1 },
- { "textht", 0.0, 1 },
- { "textwid", 0.0, 1 },
- { "scale", 1.0, 0 },
- { "linethick", -1.0, 0 }, // in points
- { "fillval", .5, 0 },
- { "arrowhead", 1.0, 0 },
- { "maxpswid", 8.5, 0 },
- { "maxpsht", 11.0, 0 },
-};
-
-place *lookup_label(const char *label)
-{
- saved_state *state = current_saved_state;
- PTABLE(place) *tbl = current_table;
- for (;;) {
- place *pl = tbl->lookup(label);
- if (pl)
- return pl;
- if (!state)
- return 0;
- tbl = state->tbl;
- state = state->prev;
- }
-}
-
-void define_label(const char *label, const place *pl)
-{
- place *p = new place;
- *p = *pl;
- current_table->define(label, p);
-}
-
-int lookup_variable(const char *name, double *val)
-{
- place *pl = lookup_label(name);
- if (pl) {
- *val = pl->x;
- return 1;
- }
- return 0;
-}
-
-void define_variable(const char *name, double val)
-{
- place *p = new place;
- p->obj = 0;
- p->x = val;
- p->y = 0.0;
- current_table->define(name, p);
- if (strcmp(name, "scale") == 0) {
- // When the scale changes, reset all scaled pre-defined variables to
- // their default values.
- for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
- if (defaults_table[i].scaled)
- define_variable(defaults_table[i].name, val*defaults_table[i].val);
- }
-}
-
-// called once only (not once per parse)
-
-void parse_init()
-{
- current_direction = RIGHT_DIRECTION;
- current_position.x = 0.0;
- current_position.y = 0.0;
- // This resets everything to its default value.
- reset_all();
-}
-
-void reset(const char *nm)
-{
- for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
- if (strcmp(nm, defaults_table[i].name) == 0) {
- double val = defaults_table[i].val;
- if (defaults_table[i].scaled) {
- double scale;
- lookup_variable("scale", &scale);
- val *= scale;
- }
- define_variable(defaults_table[i].name, val);
- return;
- }
- lex_error("`%1' is not a predefined variable", nm);
-}
-
-void reset_all()
-{
- // We only have to explicitly reset the pre-defined variables that
- // aren't scaled because `scale' is not scaled, and changing the
- // value of `scale' will reset all the pre-defined variables that
- // are scaled.
- for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
- if (!defaults_table[i].scaled)
- define_variable(defaults_table[i].name, defaults_table[i].val);
-}
-
-// called after each parse
-
-void parse_cleanup()
-{
- while (current_saved_state != 0) {
- delete current_table;
- current_table = current_saved_state->tbl;
- saved_state *tem = current_saved_state;
- current_saved_state = current_saved_state->prev;
- delete tem;
- }
- assert(current_table == &top_table);
- PTABLE_ITERATOR(place) iter(current_table);
- const char *key;
- place *pl;
- while (iter.next(&key, &pl))
- if (pl->obj != 0) {
- position pos = pl->obj->origin();
- pl->obj = 0;
- pl->x = pos.x;
- pl->y = pos.y;
- }
- while (olist.head != 0) {
- object *tem = olist.head;
- olist.head = olist.head->next;
- delete tem;
- }
- olist.tail = 0;
- current_direction = RIGHT_DIRECTION;
- current_position.x = 0.0;
- current_position.y = 0.0;
-}
-
-const char *ordinal_postfix(int n)
-{
- if (n < 10 || n > 20)
- switch (n % 10) {
- case 1:
- return "st";
- case 2:
- return "nd";
- case 3:
- return "rd";
- }
- return "th";
-}
-
-const char *object_type_name(object_type type)
-{
- switch (type) {
- case BOX_OBJECT:
- return "box";
- case CIRCLE_OBJECT:
- return "circle";
- case ELLIPSE_OBJECT:
- return "ellipse";
- case ARC_OBJECT:
- return "arc";
- case SPLINE_OBJECT:
- return "spline";
- case LINE_OBJECT:
- return "line";
- case ARROW_OBJECT:
- return "arrow";
- case MOVE_OBJECT:
- return "move";
- case TEXT_OBJECT:
- return "\"\"";
- case BLOCK_OBJECT:
- return "[]";
- case OTHER_OBJECT:
- case MARK_OBJECT:
- default:
- break;
- }
- return "object";
-}
-
-static char sprintf_buf[1024];
-
-char *format_number(const char *form, double n)
-{
- if (form == 0)
- form = "%g";
- else {
- // this is a fairly feeble attempt at validation of the format
- int nspecs = 0;
- for (const char *p = form; *p != '\0'; p++)
- if (*p == '%') {
- if (p[1] == '%')
- p++;
- else
- nspecs++;
- }
- if (nspecs > 1) {
- lex_error("bad format `%1'", form);
- return strsave(form);
- }
- }
- sprintf(sprintf_buf, form, n);
- return strsave(sprintf_buf);
-}
-
-char *do_sprintf(const char *form, const double *v, int nv)
-{
- string result;
- int i = 0;
- string one_format;
- while (*form) {
- if (*form == '%') {
- one_format += *form++;
- for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++)
- one_format += *form;
- if (*form == '\0' || strchr("eEfgG%", *form) == 0) {
- lex_error("bad sprintf format");
- result += one_format;
- result += form;
- break;
- }
- if (*form == '%') {
- one_format += *form++;
- one_format += '\0';
- sprintf(sprintf_buf, one_format.contents());
- }
- else {
- if (i >= nv) {
- lex_error("too few arguments to sprintf");
- result += one_format;
- result += form;
- break;
- }
- one_format += *form++;
- one_format += '\0';
- sprintf(sprintf_buf, one_format.contents(), v[i++]);
- }
- one_format.clear();
- result += sprintf_buf;
- }
- else
- result += *form++;
- }
- result += '\0';
- return strsave(result.contents());
-}
-#line 3387 "y.tab.c"
-#define YYABORT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-int
-yyparse()
-{
- register int yym, yyn, yystate;
-#if YYDEBUG
- register char *yys;
- extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
-yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
-#ifdef lint
- goto yynewerror;
-#endif
-yynewerror:
- yyerror("syntax error");
-#ifdef lint
- goto yyerrlab;
-#endif
-yyerrlab:
- ++yynerrs;
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
-#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
- }
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
-case 2:
-#line 272 "/u/jjc/groff/pic/pic.y"
-{
- if (olist.head)
- print_picture(olist.head);
- }
-break;
-case 3:
-#line 281 "/u/jjc/groff/pic/pic.y"
-{ yyval.pl = yyvsp[-1].pl; }
-break;
-case 4:
-#line 286 "/u/jjc/groff/pic/pic.y"
-{ yyval.pl = yyvsp[0].pl; }
-break;
-case 5:
-#line 288 "/u/jjc/groff/pic/pic.y"
-{ yyval.pl = yyvsp[-2].pl; }
-break;
-case 10:
-#line 303 "/u/jjc/groff/pic/pic.y"
-{
- define_variable(yyvsp[-2].str, yyvsp[0].x);
- a_delete yyvsp[-2].str;
- }
-break;
-case 11:
-#line 308 "/u/jjc/groff/pic/pic.y"
-{
- place *p = lookup_label(yyvsp[-3].str);
- if (!p) {
- lex_error("variable `%1' not defined", yyvsp[-3].str);
- YYABORT;
- }
- p->obj = 0;
- p->x = yyvsp[0].x;
- p->y = 0.0;
- a_delete yyvsp[-3].str;
- }
-break;
-case 12:
-#line 320 "/u/jjc/groff/pic/pic.y"
-{ current_direction = UP_DIRECTION; }
-break;
-case 13:
-#line 322 "/u/jjc/groff/pic/pic.y"
-{ current_direction = DOWN_DIRECTION; }
-break;
-case 14:
-#line 324 "/u/jjc/groff/pic/pic.y"
-{ current_direction = LEFT_DIRECTION; }
-break;
-case 15:
-#line 326 "/u/jjc/groff/pic/pic.y"
-{ current_direction = RIGHT_DIRECTION; }
-break;
-case 16:
-#line 328 "/u/jjc/groff/pic/pic.y"
-{
- olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename,
- yyvsp[0].lstr.lineno));
- }
-break;
-case 17:
-#line 333 "/u/jjc/groff/pic/pic.y"
-{
- olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename,
- yyvsp[0].lstr.lineno));
- }
-break;
-case 18:
-#line 338 "/u/jjc/groff/pic/pic.y"
-{
- fprintf(stderr, "%s\n", yyvsp[0].lstr.str);
- a_delete yyvsp[0].lstr.str;
- fflush(stderr);
- }
-break;
-case 19:
-#line 344 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 1; }
-break;
-case 20:
-#line 346 "/u/jjc/groff/pic/pic.y"
-{
- delim_flag = 0;
- system(yyvsp[0].str);
- a_delete yyvsp[0].str;
- }
-break;
-case 21:
-#line 352 "/u/jjc/groff/pic/pic.y"
-{
- if (yychar < 0)
- do_lookahead();
- do_copy(yyvsp[0].lstr.str);
- /* do not delete the filename*/
- }
-break;
-case 22:
-#line 359 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 2; }
-break;
-case 23:
-#line 361 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 0; }
-break;
-case 24:
-#line 363 "/u/jjc/groff/pic/pic.y"
-{
- if (yychar < 0)
- do_lookahead();
- copy_file_thru(yyvsp[-5].lstr.str, yyvsp[-2].str, yyvsp[0].str);
- /* do not delete the filename*/
- a_delete yyvsp[-2].str;
- a_delete yyvsp[0].str;
- }
-break;
-case 25:
-#line 372 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 2; }
-break;
-case 26:
-#line 374 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 0; }
-break;
-case 27:
-#line 376 "/u/jjc/groff/pic/pic.y"
-{
- if (yychar < 0)
- do_lookahead();
- copy_rest_thru(yyvsp[-2].str, yyvsp[0].str);
- a_delete yyvsp[-2].str;
- a_delete yyvsp[0].str;
- }
-break;
-case 28:
-#line 384 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 1; }
-break;
-case 29:
-#line 386 "/u/jjc/groff/pic/pic.y"
-{
- delim_flag = 0;
- if (yychar < 0)
- do_lookahead();
- do_for(yyvsp[-8].str, yyvsp[-6].x, yyvsp[-4].x, yyvsp[-3].by.is_multiplicative, yyvsp[-3].by.val, yyvsp[0].str);
- }
-break;
-case 30:
-#line 393 "/u/jjc/groff/pic/pic.y"
-{
- if (yychar < 0)
- do_lookahead();
- if (yyvsp[0].if_data.x != 0.0)
- push_body(yyvsp[0].if_data.body);
- a_delete yyvsp[0].if_data.body;
- }
-break;
-case 31:
-#line 401 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 1; }
-break;
-case 32:
-#line 403 "/u/jjc/groff/pic/pic.y"
-{
- delim_flag = 0;
- if (yychar < 0)
- do_lookahead();
- if (yyvsp[-3].if_data.x != 0.0)
- push_body(yyvsp[-3].if_data.body);
- else
- push_body(yyvsp[0].str);
- a_delete yyvsp[-3].if_data.body;
- a_delete yyvsp[0].str;
- }
-break;
-case 34:
-#line 416 "/u/jjc/groff/pic/pic.y"
-{ define_variable("scale", 1.0); }
-break;
-case 35:
-#line 421 "/u/jjc/groff/pic/pic.y"
-{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
-break;
-case 36:
-#line 423 "/u/jjc/groff/pic/pic.y"
-{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
-break;
-case 37:
-#line 425 "/u/jjc/groff/pic/pic.y"
-{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
-break;
-case 38:
-#line 430 "/u/jjc/groff/pic/pic.y"
-{ yyval.lstr = yyvsp[0].lstr; }
-break;
-case 39:
-#line 432 "/u/jjc/groff/pic/pic.y"
-{
- yyval.lstr.str = new char[strlen(yyvsp[-1].lstr.str) + strlen(yyvsp[0].lstr.str) + 1];
- strcpy(yyval.lstr.str, yyvsp[-1].lstr.str);
- strcat(yyval.lstr.str, yyvsp[0].lstr.str);
- a_delete yyvsp[-1].lstr.str;
- a_delete yyvsp[0].lstr.str;
- if (yyvsp[-1].lstr.filename) {
- yyval.lstr.filename = yyvsp[-1].lstr.filename;
- yyval.lstr.lineno = yyvsp[-1].lstr.lineno;
- }
- else if (yyvsp[0].lstr.filename) {
- yyval.lstr.filename = yyvsp[0].lstr.filename;
- yyval.lstr.lineno = yyvsp[0].lstr.lineno;
- }
- }
-break;
-case 40:
-#line 451 "/u/jjc/groff/pic/pic.y"
-{
- yyval.lstr.str = new char[GDIGITS + 1];
- sprintf(yyval.lstr.str, "%g", yyvsp[0].x);
- yyval.lstr.filename = 0;
- yyval.lstr.lineno = 0;
- }
-break;
-case 41:
-#line 458 "/u/jjc/groff/pic/pic.y"
-{ yyval.lstr = yyvsp[0].lstr; }
-break;
-case 42:
-#line 460 "/u/jjc/groff/pic/pic.y"
-{
- yyval.lstr.str = new char[GDIGITS + 2 + GDIGITS + 1];
- sprintf(yyval.lstr.str, "%g, %g", yyvsp[0].pair.x, yyvsp[0].pair.y);
- yyval.lstr.filename = 0;
- yyval.lstr.lineno = 0;
- }
-break;
-case 43:
-#line 469 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 1; }
-break;
-case 44:
-#line 471 "/u/jjc/groff/pic/pic.y"
-{ delim_flag = 0; yyval.if_data.x = yyvsp[-3].x; yyval.if_data.body = yyvsp[0].str; }
-break;
-case 45:
-#line 476 "/u/jjc/groff/pic/pic.y"
-{ yyval.str = 0; }
-break;
-case 46:
-#line 478 "/u/jjc/groff/pic/pic.y"
-{ yyval.str = yyvsp[0].lstr.str; }
-break;
-case 47:
-#line 483 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[0].x; }
-break;
-case 48:
-#line 485 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[0].x; }
-break;
-case 49:
-#line 490 "/u/jjc/groff/pic/pic.y"
-{
- yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) == 0;
- a_delete yyvsp[-2].lstr.str;
- a_delete yyvsp[0].lstr.str;
- }
-break;
-case 50:
-#line 496 "/u/jjc/groff/pic/pic.y"
-{
- yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) != 0;
- a_delete yyvsp[-2].lstr.str;
- a_delete yyvsp[0].lstr.str;
- }
-break;
-case 51:
-#line 502 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
-break;
-case 52:
-#line 504 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
-break;
-case 53:
-#line 506 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
-break;
-case 54:
-#line 508 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
-break;
-case 55:
-#line 510 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
-break;
-case 56:
-#line 512 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
-break;
-case 57:
-#line 514 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[0].x == 0.0); }
-break;
-case 58:
-#line 520 "/u/jjc/groff/pic/pic.y"
-{ yyval.by.val = 1.0; yyval.by.is_multiplicative = 0; }
-break;
-case 59:
-#line 522 "/u/jjc/groff/pic/pic.y"
-{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 0; }
-break;
-case 60:
-#line 524 "/u/jjc/groff/pic/pic.y"
-{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 1; }
-break;
-case 61:
-#line 529 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pl.obj = yyvsp[0].spec->make_object(&current_position,
- &current_direction);
- if (yyval.pl.obj == 0)
- YYABORT;
- delete yyvsp[0].spec;
- if (yyval.pl.obj)
- olist.append(yyval.pl.obj);
- else {
- yyval.pl.x = current_position.x;
- yyval.pl.y = current_position.y;
- }
- }
-break;
-case 62:
-#line 543 "/u/jjc/groff/pic/pic.y"
-{ yyval.pl = yyvsp[0].pl; define_label(yyvsp[-3].str, & yyval.pl); a_delete yyvsp[-3].str; }
-break;
-case 63:
-#line 545 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pl.obj = 0;
- yyval.pl.x = yyvsp[0].pair.x;
- yyval.pl.y = yyvsp[0].pair.y;
- define_label(yyvsp[-3].str, & yyval.pl);
- a_delete yyvsp[-3].str;
- }
-break;
-case 64:
-#line 553 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pl = yyvsp[0].pl;
- define_label(yyvsp[-3].str, & yyval.pl);
- a_delete yyvsp[-3].str;
- }
-break;
-case 65:
-#line 559 "/u/jjc/groff/pic/pic.y"
-{
- yyval.state.x = current_position.x;
- yyval.state.y = current_position.y;
- yyval.state.dir = current_direction;
- }
-break;
-case 66:
-#line 565 "/u/jjc/groff/pic/pic.y"
-{
- current_position.x = yyvsp[-2].state.x;
- current_position.y = yyvsp[-2].state.y;
- current_direction = yyvsp[-2].state.dir;
- }
-break;
-case 67:
-#line 571 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pl = yyvsp[-3].pl;
- }
-break;
-case 68:
-#line 575 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pl.obj = 0;
- yyval.pl.x = current_position.x;
- yyval.pl.y = current_position.y;
- }
-break;
-case 69:
-#line 584 "/u/jjc/groff/pic/pic.y"
-{}
-break;
-case 70:
-#line 586 "/u/jjc/groff/pic/pic.y"
-{}
-break;
-case 71:
-#line 591 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(BOX_OBJECT);
- }
-break;
-case 72:
-#line 595 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(CIRCLE_OBJECT);
- }
-break;
-case 73:
-#line 599 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(ELLIPSE_OBJECT);
- }
-break;
-case 74:
-#line 603 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(ARC_OBJECT);
- yyval.spec->dir = current_direction;
- }
-break;
-case 75:
-#line 608 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(LINE_OBJECT);
- lookup_variable("lineht", & yyval.spec->segment_height);
- lookup_variable("linewid", & yyval.spec->segment_width);
- yyval.spec->dir = current_direction;
- }
-break;
-case 76:
-#line 615 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(ARROW_OBJECT);
- lookup_variable("lineht", & yyval.spec->segment_height);
- lookup_variable("linewid", & yyval.spec->segment_width);
- yyval.spec->dir = current_direction;
- }
-break;
-case 77:
-#line 622 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(MOVE_OBJECT);
- lookup_variable("moveht", & yyval.spec->segment_height);
- lookup_variable("movewid", & yyval.spec->segment_width);
- yyval.spec->dir = current_direction;
- }
-break;
-case 78:
-#line 629 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(SPLINE_OBJECT);
- lookup_variable("lineht", & yyval.spec->segment_height);
- lookup_variable("linewid", & yyval.spec->segment_width);
- yyval.spec->dir = current_direction;
- }
-break;
-case 79:
-#line 636 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(TEXT_OBJECT);
- yyval.spec->text = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno);
- }
-break;
-case 80:
-#line 641 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(TEXT_OBJECT);
- yyval.spec->text = new text_item(format_number(0, yyvsp[0].x), 0, -1);
- }
-break;
-case 81:
-#line 646 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = new object_spec(TEXT_OBJECT);
- yyval.spec->text = new text_item(format_number(yyvsp[0].lstr.str, yyvsp[-1].x),
- yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno);
- a_delete yyvsp[0].lstr.str;
- }
-break;
-case 82:
-#line 653 "/u/jjc/groff/pic/pic.y"
-{
- saved_state *p = new saved_state;
- yyval.pstate = p;
- p->x = current_position.x;
- p->y = current_position.y;
- p->dir = current_direction;
- p->tbl = current_table;
- p->prev = current_saved_state;
- current_position.x = 0.0;
- current_position.y = 0.0;
- current_table = new PTABLE(place);
- current_saved_state = p;
- olist.append(make_mark_object());
- }
-break;
-case 83:
-#line 668 "/u/jjc/groff/pic/pic.y"
-{
- current_position.x = yyvsp[-2].pstate->x;
- current_position.y = yyvsp[-2].pstate->y;
- current_direction = yyvsp[-2].pstate->dir;
- yyval.spec = new object_spec(BLOCK_OBJECT);
- olist.wrap_up_block(& yyval.spec->oblist);
- yyval.spec->tbl = current_table;
- current_table = yyvsp[-2].pstate->tbl;
- current_saved_state = yyvsp[-2].pstate->prev;
- delete yyvsp[-2].pstate;
- }
-break;
-case 84:
-#line 680 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->height = yyvsp[0].x;
- yyval.spec->flags |= HAS_HEIGHT;
- }
-break;
-case 85:
-#line 686 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->radius = yyvsp[0].x;
- yyval.spec->flags |= HAS_RADIUS;
- }
-break;
-case 86:
-#line 692 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->width = yyvsp[0].x;
- yyval.spec->flags |= HAS_WIDTH;
- }
-break;
-case 87:
-#line 698 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->radius = yyvsp[0].x/2.0;
- yyval.spec->flags |= HAS_RADIUS;
- }
-break;
-case 88:
-#line 704 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= HAS_SEGMENT;
- switch (yyval.spec->dir) {
- case UP_DIRECTION:
- yyval.spec->segment_pos.y += yyvsp[0].x;
- break;
- case DOWN_DIRECTION:
- yyval.spec->segment_pos.y -= yyvsp[0].x;
- break;
- case RIGHT_DIRECTION:
- yyval.spec->segment_pos.x += yyvsp[0].x;
- break;
- case LEFT_DIRECTION:
- yyval.spec->segment_pos.x -= yyvsp[0].x;
- break;
- }
- }
-break;
-case 89:
-#line 723 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->dir = UP_DIRECTION;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.y += yyval.spec->segment_height;
- }
-break;
-case 90:
-#line 730 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->dir = UP_DIRECTION;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.y += yyvsp[0].x;
- }
-break;
-case 91:
-#line 737 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->dir = DOWN_DIRECTION;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.y -= yyval.spec->segment_height;
- }
-break;
-case 92:
-#line 744 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->dir = DOWN_DIRECTION;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.y -= yyvsp[0].x;
- }
-break;
-case 93:
-#line 751 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->dir = RIGHT_DIRECTION;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.x += yyval.spec->segment_width;
- }
-break;
-case 94:
-#line 758 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->dir = RIGHT_DIRECTION;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.x += yyvsp[0].x;
- }
-break;
-case 95:
-#line 765 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->dir = LEFT_DIRECTION;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.x -= yyval.spec->segment_width;
- }
-break;
-case 96:
-#line 772 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->dir = LEFT_DIRECTION;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.x -= yyvsp[0].x;
- }
-break;
-case 97:
-#line 779 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->flags |= HAS_FROM;
- yyval.spec->from.x = yyvsp[0].pair.x;
- yyval.spec->from.y = yyvsp[0].pair.y;
- }
-break;
-case 98:
-#line 786 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- if (yyval.spec->flags & HAS_SEGMENT)
- yyval.spec->segment_list = new segment(yyval.spec->segment_pos,
- yyval.spec->segment_is_absolute,
- yyval.spec->segment_list);
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.x = yyvsp[0].pair.x;
- yyval.spec->segment_pos.y = yyvsp[0].pair.y;
- yyval.spec->segment_is_absolute = 1;
- yyval.spec->flags |= HAS_TO;
- yyval.spec->to.x = yyvsp[0].pair.x;
- yyval.spec->to.y = yyvsp[0].pair.y;
- }
-break;
-case 99:
-#line 801 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->flags |= HAS_AT;
- yyval.spec->at.x = yyvsp[0].pair.x;
- yyval.spec->at.y = yyvsp[0].pair.y;
- if (yyval.spec->type != ARC_OBJECT) {
- yyval.spec->flags |= HAS_FROM;
- yyval.spec->from.x = yyvsp[0].pair.x;
- yyval.spec->from.y = yyvsp[0].pair.y;
- }
- }
-break;
-case 100:
-#line 813 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->flags |= HAS_WITH;
- yyval.spec->with = yyvsp[0].pth;
- }
-break;
-case 101:
-#line 819 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->flags |= HAS_SEGMENT;
- yyval.spec->segment_pos.x += yyvsp[0].pair.x;
- yyval.spec->segment_pos.y += yyvsp[0].pair.y;
- }
-break;
-case 102:
-#line 826 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- if (yyval.spec->flags & HAS_SEGMENT) {
- yyval.spec->segment_list = new segment(yyval.spec->segment_pos,
- yyval.spec->segment_is_absolute,
- yyval.spec->segment_list);
- yyval.spec->flags &= ~HAS_SEGMENT;
- yyval.spec->segment_pos.x = yyval.spec->segment_pos.y = 0.0;
- yyval.spec->segment_is_absolute = 0;
- }
- }
-break;
-case 103:
-#line 838 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= IS_DOTTED;
- lookup_variable("dashwid", & yyval.spec->dash_width);
- }
-break;
-case 104:
-#line 844 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->flags |= IS_DOTTED;
- yyval.spec->dash_width = yyvsp[0].x;
- }
-break;
-case 105:
-#line 850 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= IS_DASHED;
- lookup_variable("dashwid", & yyval.spec->dash_width);
- }
-break;
-case 106:
-#line 856 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->flags |= IS_DASHED;
- yyval.spec->dash_width = yyvsp[0].x;
- }
-break;
-case 107:
-#line 862 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= IS_DEFAULT_FILLED;
- }
-break;
-case 108:
-#line 867 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->flags |= IS_FILLED;
- yyval.spec->fill = yyvsp[0].x;
- }
-break;
-case 109:
-#line 873 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- /* line chop chop means line chop 0 chop 0*/
- if (yyval.spec->flags & IS_DEFAULT_CHOPPED) {
- yyval.spec->flags |= IS_CHOPPED;
- yyval.spec->flags &= ~IS_DEFAULT_CHOPPED;
- yyval.spec->start_chop = yyval.spec->end_chop = 0.0;
- }
- else if (yyval.spec->flags & IS_CHOPPED) {
- yyval.spec->end_chop = 0.0;
- }
- else {
- yyval.spec->flags |= IS_DEFAULT_CHOPPED;
- }
- }
-break;
-case 110:
-#line 889 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- if (yyval.spec->flags & IS_DEFAULT_CHOPPED) {
- yyval.spec->flags |= IS_CHOPPED;
- yyval.spec->flags &= ~IS_DEFAULT_CHOPPED;
- yyval.spec->start_chop = 0.0;
- yyval.spec->end_chop = yyvsp[0].x;
- }
- else if (yyval.spec->flags & IS_CHOPPED) {
- yyval.spec->end_chop = yyvsp[0].x;
- }
- else {
- yyval.spec->start_chop = yyval.spec->end_chop = yyvsp[0].x;
- yyval.spec->flags |= IS_CHOPPED;
- }
- }
-break;
-case 111:
-#line 906 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= IS_SAME;
- }
-break;
-case 112:
-#line 911 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= IS_INVISIBLE;
- }
-break;
-case 113:
-#line 916 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= HAS_LEFT_ARROW_HEAD;
- }
-break;
-case 114:
-#line 921 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= HAS_RIGHT_ARROW_HEAD;
- }
-break;
-case 115:
-#line 926 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
- }
-break;
-case 116:
-#line 931 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= IS_CLOCKWISE;
- }
-break;
-case 117:
-#line 936 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags &= ~IS_CLOCKWISE;
- }
-break;
-case 118:
-#line 941 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- for (text_item **p = & yyval.spec->text; *p; p = &(*p)->next)
- ;
- *p = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno);
- }
-break;
-case 119:
-#line 948 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- if (yyval.spec->text) {
- for (text_item *p = yyval.spec->text; p->next; p = p->next)
- ;
- p->adj.h = LEFT_ADJUST;
- }
- }
-break;
-case 120:
-#line 957 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- if (yyval.spec->text) {
- for (text_item *p = yyval.spec->text; p->next; p = p->next)
- ;
- p->adj.h = RIGHT_ADJUST;
- }
- }
-break;
-case 121:
-#line 966 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- if (yyval.spec->text) {
- for (text_item *p = yyval.spec->text; p->next; p = p->next)
- ;
- p->adj.v = ABOVE_ADJUST;
- }
- }
-break;
-case 122:
-#line 975 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- if (yyval.spec->text) {
- for (text_item *p = yyval.spec->text; p->next; p = p->next)
- ;
- p->adj.v = BELOW_ADJUST;
- }
- }
-break;
-case 123:
-#line 984 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-2].spec;
- yyval.spec->flags |= HAS_THICKNESS;
- yyval.spec->thickness = yyvsp[0].x;
- }
-break;
-case 124:
-#line 990 "/u/jjc/groff/pic/pic.y"
-{
- yyval.spec = yyvsp[-1].spec;
- yyval.spec->flags |= IS_ALIGNED;
- }
-break;
-case 125:
-#line 998 "/u/jjc/groff/pic/pic.y"
-{
- yyval.lstr = yyvsp[0].lstr;
- }
-break;
-case 126:
-#line 1002 "/u/jjc/groff/pic/pic.y"
-{
- yyval.lstr.filename = yyvsp[-2].lstr.filename;
- yyval.lstr.lineno = yyvsp[-2].lstr.lineno;
- yyval.lstr.str = do_sprintf(yyvsp[-2].lstr.str, yyvsp[-1].dv.v, yyvsp[-1].dv.nv);
- a_delete yyvsp[-1].dv.v;
- a_delete yyvsp[-2].lstr.str;
- }
-break;
-case 127:
-#line 1013 "/u/jjc/groff/pic/pic.y"
-{
- yyval.dv.v = 0;
- yyval.dv.nv = 0;
- yyval.dv.maxv = 0;
- }
-break;
-case 128:
-#line 1019 "/u/jjc/groff/pic/pic.y"
-{
- yyval.dv = yyvsp[-2].dv;
- if (yyval.dv.nv >= yyval.dv.maxv) {
- if (yyval.dv.nv == 0) {
- yyval.dv.v = new double[4];
- yyval.dv.maxv = 4;
- }
- else {
- double *oldv = yyval.dv.v;
- yyval.dv.maxv *= 2;
- yyval.dv.v = new double[yyval.dv.maxv];
- memcpy(yyval.dv.v, oldv, yyval.dv.nv*sizeof(double));
- a_delete oldv;
- }
- }
- yyval.dv.v[yyval.dv.nv] = yyvsp[0].x;
- yyval.dv.nv += 1;
- }
-break;
-case 129:
-#line 1041 "/u/jjc/groff/pic/pic.y"
-{ yyval.pair = yyvsp[0].pair; }
-break;
-case 130:
-#line 1043 "/u/jjc/groff/pic/pic.y"
-{
- position pos = yyvsp[0].pl;
- yyval.pair.x = pos.x;
- yyval.pair.y = pos.y;
- }
-break;
-case 131:
-#line 1052 "/u/jjc/groff/pic/pic.y"
-{ yyval.pair = yyvsp[0].pair; }
-break;
-case 132:
-#line 1054 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pair.x = yyvsp[-2].pair.x + yyvsp[0].pair.x;
- yyval.pair.y = yyvsp[-2].pair.y + yyvsp[0].pair.y;
- }
-break;
-case 133:
-#line 1059 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pair.x = yyvsp[-2].pair.x - yyvsp[0].pair.x;
- yyval.pair.y = yyvsp[-2].pair.y - yyvsp[0].pair.y;
- }
-break;
-case 134:
-#line 1064 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pair.x = yyvsp[-3].pair.x;
- yyval.pair.y = yyvsp[-1].pair.y;
- }
-break;
-case 135:
-#line 1069 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pair.x = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.x + yyvsp[-4].x*yyvsp[0].pair.x;
- yyval.pair.y = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.y + yyvsp[-4].x*yyvsp[0].pair.y;
- }
-break;
-case 136:
-#line 1074 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pair.x = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.x + yyvsp[-5].x*yyvsp[-1].pair.x;
- yyval.pair.y = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.y + yyvsp[-5].x*yyvsp[-1].pair.y;
- }
-break;
-case 139:
-#line 1087 "/u/jjc/groff/pic/pic.y"
-{ yyval.pair.x = yyvsp[-2].x; yyval.pair.y = yyvsp[0].x; }
-break;
-case 140:
-#line 1089 "/u/jjc/groff/pic/pic.y"
-{ yyval.pair = yyvsp[-1].pair; }
-break;
-case 141:
-#line 1094 "/u/jjc/groff/pic/pic.y"
-{ yyval.pl = yyvsp[0].pl; }
-break;
-case 142:
-#line 1096 "/u/jjc/groff/pic/pic.y"
-{
- path pth(yyvsp[0].crn);
- if (!pth.follow(yyvsp[-1].pl, & yyval.pl))
- YYABORT;
- }
-break;
-case 143:
-#line 1102 "/u/jjc/groff/pic/pic.y"
-{
- path pth(yyvsp[-1].crn);
- if (!pth.follow(yyvsp[0].pl, & yyval.pl))
- YYABORT;
- }
-break;
-case 144:
-#line 1108 "/u/jjc/groff/pic/pic.y"
-{
- path pth(yyvsp[-2].crn);
- if (!pth.follow(yyvsp[0].pl, & yyval.pl))
- YYABORT;
- }
-break;
-case 145:
-#line 1114 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pl.x = current_position.x;
- yyval.pl.y = current_position.y;
- yyval.pl.obj = 0;
- }
-break;
-case 146:
-#line 1123 "/u/jjc/groff/pic/pic.y"
-{
- place *p = lookup_label(yyvsp[0].str);
- if (!p) {
- lex_error("there is no place `%1'", yyvsp[0].str);
- YYABORT;
- }
- yyval.pl = *p;
- a_delete yyvsp[0].str;
- }
-break;
-case 147:
-#line 1133 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pl.obj = yyvsp[0].obj;
- }
-break;
-case 148:
-#line 1137 "/u/jjc/groff/pic/pic.y"
-{
- path pth(yyvsp[0].str);
- if (!pth.follow(yyvsp[-2].pl, & yyval.pl))
- YYABORT;
- }
-break;
-case 149:
-#line 1146 "/u/jjc/groff/pic/pic.y"
-{ yyval.n = yyvsp[0].n; }
-break;
-case 150:
-#line 1148 "/u/jjc/groff/pic/pic.y"
-{
- /* XXX Check for overflow (and non-integers?).*/
- yyval.n = (int)yyvsp[-1].x;
- }
-break;
-case 151:
-#line 1156 "/u/jjc/groff/pic/pic.y"
-{ yyval.n = 1; }
-break;
-case 152:
-#line 1158 "/u/jjc/groff/pic/pic.y"
-{ yyval.n = yyvsp[-1].n; }
-break;
-case 153:
-#line 1163 "/u/jjc/groff/pic/pic.y"
-{
- int count = 0;
- for (object *p = olist.head; p != 0; p = p->next)
- if (p->type() == yyvsp[0].obtype && ++count == yyvsp[-1].n) {
- yyval.obj = p;
- break;
- }
- if (p == 0) {
- lex_error("there is no %1%2 %3", yyvsp[-1].n, ordinal_postfix(yyvsp[-1].n),
- object_type_name(yyvsp[0].obtype));
- YYABORT;
- }
- }
-break;
-case 154:
-#line 1177 "/u/jjc/groff/pic/pic.y"
-{
- int count = 0;
- for (object *p = olist.tail; p != 0; p = p->prev)
- if (p->type() == yyvsp[0].obtype && ++count == yyvsp[-1].n) {
- yyval.obj = p;
- break;
- }
- if (p == 0) {
- lex_error("there is no %1%2 last %3", yyvsp[-1].n,
- ordinal_postfix(yyvsp[-1].n), object_type_name(yyvsp[0].obtype));
- YYABORT;
- }
- }
-break;
-case 155:
-#line 1194 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = BOX_OBJECT; }
-break;
-case 156:
-#line 1196 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = CIRCLE_OBJECT; }
-break;
-case 157:
-#line 1198 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = ELLIPSE_OBJECT; }
-break;
-case 158:
-#line 1200 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = ARC_OBJECT; }
-break;
-case 159:
-#line 1202 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = LINE_OBJECT; }
-break;
-case 160:
-#line 1204 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = ARROW_OBJECT; }
-break;
-case 161:
-#line 1206 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = SPLINE_OBJECT; }
-break;
-case 162:
-#line 1208 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = BLOCK_OBJECT; }
-break;
-case 163:
-#line 1210 "/u/jjc/groff/pic/pic.y"
-{ yyval.obtype = TEXT_OBJECT; }
-break;
-case 164:
-#line 1215 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pth = new path(yyvsp[0].str);
- }
-break;
-case 165:
-#line 1219 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pth = yyvsp[-2].pth;
- yyval.pth->append(yyvsp[0].str);
- }
-break;
-case 166:
-#line 1227 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pth = new path(yyvsp[0].crn);
- }
-break;
-case 167:
-#line 1234 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pth = yyvsp[0].pth;
- }
-break;
-case 168:
-#line 1238 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pth = yyvsp[-1].pth;
- yyval.pth->append(yyvsp[0].crn);
- }
-break;
-case 169:
-#line 1246 "/u/jjc/groff/pic/pic.y"
-{
- yyval.pth = yyvsp[0].pth;
- }
-break;
-case 170:
-#line 1251 "/u/jjc/groff/pic/pic.y"
-{
- lex_warning("`%1%2 last %3' in `with' argument ignored",
- yyvsp[-3].n, ordinal_postfix(yyvsp[-3].n), object_type_name(yyvsp[-1].obtype));
- yyval.pth = yyvsp[0].pth;
- }
-break;
-case 171:
-#line 1257 "/u/jjc/groff/pic/pic.y"
-{
- lex_warning("`last %1' in `with' argument ignored",
- object_type_name(yyvsp[-1].obtype));
- yyval.pth = yyvsp[0].pth;
- }
-break;
-case 172:
-#line 1263 "/u/jjc/groff/pic/pic.y"
-{
- lex_warning("`%1%2 %3' in `with' argument ignored",
- yyvsp[-2].n, ordinal_postfix(yyvsp[-2].n), object_type_name(yyvsp[-1].obtype));
- yyval.pth = yyvsp[0].pth;
- }
-break;
-case 173:
-#line 1269 "/u/jjc/groff/pic/pic.y"
-{
- lex_warning("initial `%1' in `with' argument ignored", yyvsp[-1].str);
- a_delete yyvsp[-1].str;
- yyval.pth = yyvsp[0].pth;
- }
-break;
-case 174:
-#line 1278 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::north; }
-break;
-case 175:
-#line 1280 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::east; }
-break;
-case 176:
-#line 1282 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::west; }
-break;
-case 177:
-#line 1284 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::south; }
-break;
-case 178:
-#line 1286 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::north_east; }
-break;
-case 179:
-#line 1288 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object:: south_east; }
-break;
-case 180:
-#line 1290 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::north_west; }
-break;
-case 181:
-#line 1292 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::south_west; }
-break;
-case 182:
-#line 1294 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::center; }
-break;
-case 183:
-#line 1296 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::start; }
-break;
-case 184:
-#line 1298 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::end; }
-break;
-case 185:
-#line 1300 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::north; }
-break;
-case 186:
-#line 1302 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::south; }
-break;
-case 187:
-#line 1304 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::west; }
-break;
-case 188:
-#line 1306 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::east; }
-break;
-case 189:
-#line 1308 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::north_west; }
-break;
-case 190:
-#line 1310 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::south_west; }
-break;
-case 191:
-#line 1312 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::north_east; }
-break;
-case 192:
-#line 1314 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::south_east; }
-break;
-case 193:
-#line 1316 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::west; }
-break;
-case 194:
-#line 1318 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::east; }
-break;
-case 195:
-#line 1320 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::north_west; }
-break;
-case 196:
-#line 1322 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::south_west; }
-break;
-case 197:
-#line 1324 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::north_east; }
-break;
-case 198:
-#line 1326 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::south_east; }
-break;
-case 199:
-#line 1328 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::center; }
-break;
-case 200:
-#line 1330 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::start; }
-break;
-case 201:
-#line 1332 "/u/jjc/groff/pic/pic.y"
-{ yyval.crn = &object::end; }
-break;
-case 202:
-#line 1337 "/u/jjc/groff/pic/pic.y"
-{
- if (!lookup_variable(yyvsp[0].str, & yyval.x)) {
- lex_error("there is no variable `%1'", yyvsp[0].str);
- YYABORT;
- }
- a_delete yyvsp[0].str;
- }
-break;
-case 203:
-#line 1345 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[0].x; }
-break;
-case 204:
-#line 1347 "/u/jjc/groff/pic/pic.y"
-{
- if (yyvsp[-1].pl.obj != 0)
- yyval.x = yyvsp[-1].pl.obj->origin().x;
- else
- yyval.x = yyvsp[-1].pl.x;
- }
-break;
-case 205:
-#line 1354 "/u/jjc/groff/pic/pic.y"
-{
- if (yyvsp[-1].pl.obj != 0)
- yyval.x = yyvsp[-1].pl.obj->origin().y;
- else
- yyval.x = yyvsp[-1].pl.y;
- }
-break;
-case 206:
-#line 1361 "/u/jjc/groff/pic/pic.y"
-{
- if (yyvsp[-1].pl.obj != 0)
- yyval.x = yyvsp[-1].pl.obj->height();
- else
- yyval.x = 0.0;
- }
-break;
-case 207:
-#line 1368 "/u/jjc/groff/pic/pic.y"
-{
- if (yyvsp[-1].pl.obj != 0)
- yyval.x = yyvsp[-1].pl.obj->width();
- else
- yyval.x = 0.0;
- }
-break;
-case 208:
-#line 1375 "/u/jjc/groff/pic/pic.y"
-{
- if (yyvsp[-1].pl.obj != 0)
- yyval.x = yyvsp[-1].pl.obj->radius();
- else
- yyval.x = 0.0;
- }
-break;
-case 209:
-#line 1382 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[-2].x + yyvsp[0].x; }
-break;
-case 210:
-#line 1384 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[-2].x - yyvsp[0].x; }
-break;
-case 211:
-#line 1386 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[-2].x * yyvsp[0].x; }
-break;
-case 212:
-#line 1388 "/u/jjc/groff/pic/pic.y"
-{
- if (yyvsp[0].x == 0.0) {
- lex_error("division by zero");
- YYABORT;
- }
- yyval.x = yyvsp[-2].x/yyvsp[0].x;
- }
-break;
-case 213:
-#line 1396 "/u/jjc/groff/pic/pic.y"
-{
- if (yyvsp[0].x == 0.0) {
- lex_error("modulus by zero");
- YYABORT;
- }
- yyval.x = fmod(yyvsp[-2].x, yyvsp[0].x);
- }
-break;
-case 214:
-#line 1404 "/u/jjc/groff/pic/pic.y"
-{
- errno = 0;
- yyval.x = pow(yyvsp[-2].x, yyvsp[0].x);
- if (errno == EDOM) {
- lex_error("arguments to `^' operator out of domain");
- YYABORT;
- }
- if (errno == ERANGE) {
- lex_error("result of `^' operator out of range");
- YYABORT;
- }
- }
-break;
-case 215:
-#line 1417 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = -yyvsp[0].x; }
-break;
-case 216:
-#line 1419 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[-1].x; }
-break;
-case 217:
-#line 1421 "/u/jjc/groff/pic/pic.y"
-{
- errno = 0;
- yyval.x = sin(yyvsp[-1].x);
- if (errno == ERANGE) {
- lex_error("sin result out of range");
- YYABORT;
- }
- }
-break;
-case 218:
-#line 1430 "/u/jjc/groff/pic/pic.y"
-{
- errno = 0;
- yyval.x = cos(yyvsp[-1].x);
- if (errno == ERANGE) {
- lex_error("cos result out of range");
- YYABORT;
- }
- }
-break;
-case 219:
-#line 1439 "/u/jjc/groff/pic/pic.y"
-{
- errno = 0;
- yyval.x = atan2(yyvsp[-3].x, yyvsp[-1].x);
- if (errno == EDOM) {
- lex_error("atan2 argument out of domain");
- YYABORT;
- }
- if (errno == ERANGE) {
- lex_error("atan2 result out of range");
- YYABORT;
- }
- }
-break;
-case 220:
-#line 1452 "/u/jjc/groff/pic/pic.y"
-{
- errno = 0;
- yyval.x = log10(yyvsp[-1].x);
- if (errno == ERANGE) {
- lex_error("log result out of range");
- YYABORT;
- }
- }
-break;
-case 221:
-#line 1461 "/u/jjc/groff/pic/pic.y"
-{
- errno = 0;
- yyval.x = pow(10.0, yyvsp[-1].x);
- if (errno == ERANGE) {
- lex_error("exp result out of range");
- YYABORT;
- }
- }
-break;
-case 222:
-#line 1470 "/u/jjc/groff/pic/pic.y"
-{
- errno = 0;
- yyval.x = sqrt(yyvsp[-1].x);
- if (errno == EDOM) {
- lex_error("sqrt argument out of domain");
- YYABORT;
- }
- }
-break;
-case 223:
-#line 1479 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[-3].x > yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; }
-break;
-case 224:
-#line 1481 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = yyvsp[-3].x < yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; }
-break;
-case 225:
-#line 1483 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = floor(yyvsp[-1].x); }
-break;
-case 226:
-#line 1485 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*yyvsp[-1].x); }
-break;
-case 227:
-#line 1487 "/u/jjc/groff/pic/pic.y"
-{
- /* return a random number in the range [0,1) */
- /* portable, but not very random */
- yyval.x = (rand() & 0x7fff) / double(0x8000);
- }
-break;
-case 228:
-#line 1493 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x < yyvsp[0].x); }
-break;
-case 229:
-#line 1495 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x <= yyvsp[0].x); }
-break;
-case 230:
-#line 1497 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x > yyvsp[0].x); }
-break;
-case 231:
-#line 1499 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x >= yyvsp[0].x); }
-break;
-case 232:
-#line 1501 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x == yyvsp[0].x); }
-break;
-case 233:
-#line 1503 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != yyvsp[0].x); }
-break;
-case 234:
-#line 1505 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
-break;
-case 235:
-#line 1507 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
-break;
-case 236:
-#line 1509 "/u/jjc/groff/pic/pic.y"
-{ yyval.x = (yyvsp[0].x == 0.0); }
-break;
-#line 5111 "y.tab.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
- }
-#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
-to state %d\n", *yyssp, yystate);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- return (1);
-yyaccept:
- return (0);
-}
diff --git a/gnu/usr.bin/groff/pic/pic.tab.h b/gnu/usr.bin/groff/pic/pic.tab.h
deleted file mode 100644
index c71bdfd..0000000
--- a/gnu/usr.bin/groff/pic/pic.tab.h
+++ /dev/null
@@ -1,129 +0,0 @@
-#define LABEL 257
-#define VARIABLE 258
-#define NUMBER 259
-#define TEXT 260
-#define COMMAND_LINE 261
-#define DELIMITED 262
-#define ORDINAL 263
-#define TH 264
-#define LEFT_ARROW_HEAD 265
-#define RIGHT_ARROW_HEAD 266
-#define DOUBLE_ARROW_HEAD 267
-#define LAST 268
-#define UP 269
-#define DOWN 270
-#define LEFT 271
-#define RIGHT 272
-#define BOX 273
-#define CIRCLE 274
-#define ELLIPSE 275
-#define ARC 276
-#define LINE 277
-#define ARROW 278
-#define MOVE 279
-#define SPLINE 280
-#define HEIGHT 281
-#define RADIUS 282
-#define WIDTH 283
-#define DIAMETER 284
-#define FROM 285
-#define TO 286
-#define AT 287
-#define WITH 288
-#define BY 289
-#define THEN 290
-#define DOTTED 291
-#define DASHED 292
-#define CHOP 293
-#define SAME 294
-#define INVISIBLE 295
-#define LJUST 296
-#define RJUST 297
-#define ABOVE 298
-#define BELOW 299
-#define OF 300
-#define THE 301
-#define WAY 302
-#define BETWEEN 303
-#define AND 304
-#define HERE 305
-#define DOT_N 306
-#define DOT_E 307
-#define DOT_W 308
-#define DOT_S 309
-#define DOT_NE 310
-#define DOT_SE 311
-#define DOT_NW 312
-#define DOT_SW 313
-#define DOT_C 314
-#define DOT_START 315
-#define DOT_END 316
-#define DOT_X 317
-#define DOT_Y 318
-#define DOT_HT 319
-#define DOT_WID 320
-#define DOT_RAD 321
-#define SIN 322
-#define COS 323
-#define ATAN2 324
-#define LOG 325
-#define EXP 326
-#define SQRT 327
-#define K_MAX 328
-#define K_MIN 329
-#define INT 330
-#define RAND 331
-#define COPY 332
-#define THRU 333
-#define TOP 334
-#define BOTTOM 335
-#define UPPER 336
-#define LOWER 337
-#define SH 338
-#define PRINT 339
-#define CW 340
-#define CCW 341
-#define FOR 342
-#define DO 343
-#define IF 344
-#define ELSE 345
-#define ANDAND 346
-#define OROR 347
-#define NOTEQUAL 348
-#define EQUALEQUAL 349
-#define LESSEQUAL 350
-#define GREATEREQUAL 351
-#define LEFT_CORNER 352
-#define RIGHT_CORNER 353
-#define CENTER 354
-#define END 355
-#define START 356
-#define RESET 357
-#define UNTIL 358
-#define PLOT 359
-#define THICKNESS 360
-#define FILL 361
-#define ALIGNED 362
-#define SPRINTF 363
-#define COMMAND 364
-#define DEFINE 365
-#define UNDEF 366
-typedef union {
- char *str;
- int n;
- double x;
- struct { double x, y; } pair;
- struct { double x; char *body; } if_data;
- struct { char *str; const char *filename; int lineno; } lstr;
- struct { double *v; int nv; int maxv; } dv;
- struct { double val; int is_multiplicative; } by;
- place pl;
- object *obj;
- corner crn;
- path *pth;
- object_spec *spec;
- saved_state *pstate;
- graphics_state state;
- object_type obtype;
-} YYSTYPE;
-extern YYSTYPE yylval;
diff --git a/gnu/usr.bin/groff/refer/label.cc b/gnu/usr.bin/groff/refer/label.cc
deleted file mode 100644
index 4425465..0000000
--- a/gnu/usr.bin/groff/refer/label.cc
+++ /dev/null
@@ -1,1593 +0,0 @@
-#ifndef lint
-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/90";
-#endif
-#define YYBYACC 1
-#line 22 "/u/jjc/groff/refer/label.y"
-
-#include "refer.h"
-#include "refid.h"
-#include "ref.h"
-#include "token.h"
-
-int yylex();
-void yyerror(const char *);
-int yyparse();
-
-static const char *format_serial(char c, int n);
-
-struct label_info {
- int start;
- int length;
- int count;
- int total;
- label_info(const string &);
-};
-
-label_info *lookup_label(const string &label);
-
-struct expression {
- enum {
- /* Does the tentative label depend on the reference?*/
- CONTAINS_VARIABLE = 01,
- CONTAINS_STAR = 02,
- CONTAINS_FORMAT = 04,
- CONTAINS_AT = 010
- };
- virtual ~expression() { }
- virtual void evaluate(int, const reference &, string &,
- substring_position &) = 0;
- virtual unsigned analyze() { return 0; }
-};
-
-class at_expr : public expression {
-public:
- at_expr() { }
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() { return CONTAINS_VARIABLE|CONTAINS_AT; }
-};
-
-class format_expr : public expression {
- char type;
- int width;
- int first_number;
-public:
- format_expr(char c, int w = 0, int f = 1)
- : type(c), width(w), first_number(f) { }
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() { return CONTAINS_FORMAT; }
-};
-
-class field_expr : public expression {
- int number;
- char name;
-public:
- field_expr(char nm, int num) : name(nm), number(num) { }
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() { return CONTAINS_VARIABLE; }
-};
-
-class literal_expr : public expression {
- string s;
-public:
- literal_expr(const char *ptr, int len) : s(ptr, len) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class unary_expr : public expression {
-protected:
- expression *expr;
-public:
- unary_expr(expression *e) : expr(e) { }
- ~unary_expr() { delete expr; }
- void evaluate(int, const reference &, string &, substring_position &) = 0;
- unsigned analyze() { return expr ? expr->analyze() : 0; }
-};
-
-/* This caches the analysis of an expression.*/
-
-class analyzed_expr : public unary_expr {
- unsigned flags;
-public:
- analyzed_expr(expression *);
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() { return flags; }
-};
-
-class star_expr : public unary_expr {
-public:
- star_expr(expression *e) : unary_expr(e) { }
- void evaluate(int, const reference &, string &, substring_position &);
- unsigned analyze() {
- return ((expr ? (expr->analyze() & ~CONTAINS_VARIABLE) : 0)
- | CONTAINS_STAR);
- }
-};
-
-typedef void map_func(const char *, const char *, string &);
-
-class map_expr : public unary_expr {
- map_func *func;
-public:
- map_expr(expression *e, map_func *f) : unary_expr(e), func(f) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-typedef const char *extractor_func(const char *, const char *, const char **);
-
-class extractor_expr : public unary_expr {
- int part;
- extractor_func *func;
-public:
- enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
- extractor_expr(expression *e, extractor_func *f, int pt)
- : unary_expr(e), func(f), part(pt) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class truncate_expr : public unary_expr {
- int n;
-public:
- truncate_expr(expression *e, int i) : n(i), unary_expr(e) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class separator_expr : public unary_expr {
-public:
- separator_expr(expression *e) : unary_expr(e) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class binary_expr : public expression {
-protected:
- expression *expr1;
- expression *expr2;
-public:
- binary_expr(expression *e1, expression *e2) : expr1(e1), expr2(e2) { }
- ~binary_expr() { delete expr1; delete expr2; }
- void evaluate(int, const reference &, string &, substring_position &) = 0;
- unsigned analyze() {
- return (expr1 ? expr1->analyze() : 0) | (expr2 ? expr2->analyze() : 0);
- }
-};
-
-class alternative_expr : public binary_expr {
-public:
- alternative_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class list_expr : public binary_expr {
-public:
- list_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class substitute_expr : public binary_expr {
-public:
- substitute_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class ternary_expr : public expression {
-protected:
- expression *expr1;
- expression *expr2;
- expression *expr3;
-public:
- ternary_expr(expression *e1, expression *e2, expression *e3)
- : expr1(e1), expr2(e2), expr3(e3) { }
- ~ternary_expr() { delete expr1; delete expr2; delete expr3; }
- void evaluate(int, const reference &, string &, substring_position &) = 0;
- unsigned analyze() {
- return ((expr1 ? expr1->analyze() : 0)
- | (expr2 ? expr2->analyze() : 0)
- | (expr3 ? expr3->analyze() : 0));
- }
-};
-
-class conditional_expr : public ternary_expr {
-public:
- conditional_expr(expression *e1, expression *e2, expression *e3)
- : ternary_expr(e1, e2, e3) { }
- void evaluate(int, const reference &, string &, substring_position &);
-};
-
-static expression *parsed_label = 0;
-static expression *parsed_date_label = 0;
-static expression *parsed_short_label = 0;
-
-static expression *parse_result;
-
-string literals;
-
-#line 221 "/u/jjc/groff/refer/label.y"
-typedef union {
- int num;
- expression *expr;
- struct { int ndigits; int val; } dig;
- struct { int start; int len; } str;
-} YYSTYPE;
-#line 211 "y.tab.c"
-#define TOKEN_LETTER 257
-#define TOKEN_LITERAL 258
-#define TOKEN_DIGIT 259
-#define YYERRCODE 256
-short yylhs[] = { -1,
- 0, 1, 1, 6, 6, 2, 2, 2, 3, 3,
- 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 9, 9, 7, 7, 8, 8,
- 10, 10, 10,
-};
-short yylen[] = { 2,
- 1, 1, 5, 0, 1, 1, 3, 3, 1, 2,
- 1, 3, 1, 1, 1, 2, 2, 2, 5, 3,
- 3, 2, 3, 3, 0, 1, 1, 2, 1, 2,
- 0, 1, 1,
-};
-short yydefred[] = { 0,
- 0, 14, 13, 0, 0, 0, 0, 5, 0, 0,
- 0, 0, 1, 27, 0, 17, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 22, 0, 28,
- 30, 23, 24, 0, 0, 0, 32, 33, 0, 0,
- 0, 0, 0, 0, 3, 0, 19,
-};
-short yydgoto[] = { 7,
- 8, 9, 10, 11, 12, 13, 15, 18, 47, 39,
-};
-short yysindex[] = { -32,
- -257, 0, 0, -240, -32, -32, 0, 0, -18, -32,
- -36, -114, 0, 0, -246, 0, 0, -241, -14, -39,
- -32, -32, -32, -114, -21, -257, -257, 0, -32, 0,
- 0, 0, 0, -25, -32, -32, 0, 0, -223, -246,
- -246, -36, -32, -257, 0, -246, 0,
-};
-short yyrindex[] = { 35,
- 1, 0, 0, 0, -5, -4, 0, 0, 14, 208,
- 159, 224, 0, 0, 11, 0, 0, 40, 0, 0,
- 2, 0, 0, 253, -220, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 263, 281, 0, 0, 0, 50,
- 105, 214, 0, 115, 0, 149, 0,
-};
-short yygindex[] = { 0,
- 19, 0, 7, 37, -10, 10, -23, 0, 0, 0,
-};
-#define YYTABLESIZE 511
-short yytable[] = { 24,
- 15, 14, 40, 41, 4, 28, 26, 5, 27, 25,
- 16, 29, 30, 2, 19, 20, 16, 31, 17, 23,
- 46, 37, 33, 38, 24, 24, 32, 6, 35, 36,
- 34, 3, 43, 44, 4, 4, 31, 15, 15, 18,
- 15, 15, 15, 15, 21, 15, 15, 16, 16, 20,
- 16, 16, 16, 16, 2, 16, 16, 4, 15, 4,
- 15, 45, 15, 15, 15, 42, 0, 0, 16, 0,
- 16, 2, 16, 16, 16, 2, 18, 18, 0, 18,
- 18, 18, 18, 0, 18, 18, 20, 20, 0, 20,
- 20, 20, 20, 0, 20, 20, 0, 18, 0, 18,
- 0, 18, 18, 18, 21, 22, 0, 20, 0, 20,
- 0, 20, 20, 20, 25, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 15, 0, 15, 0, 0, 0,
- 0, 0, 0, 0, 16, 0, 16, 0, 0, 0,
- 0, 21, 21, 0, 21, 21, 21, 21, 26, 21,
- 21, 25, 25, 0, 25, 25, 25, 25, 11, 25,
- 25, 0, 21, 18, 21, 18, 21, 21, 21, 0,
- 0, 0, 25, 20, 25, 20, 25, 25, 25, 0,
- 0, 0, 0, 0, 0, 26, 26, 0, 26, 26,
- 26, 26, 0, 26, 26, 11, 11, 0, 11, 11,
- 0, 0, 0, 0, 0, 0, 26, 6, 26, 0,
- 26, 26, 26, 12, 0, 0, 11, 0, 11, 0,
- 11, 11, 11, 9, 1, 2, 0, 0, 21, 0,
- 21, 0, 0, 0, 0, 0, 0, 0, 25, 0,
- 25, 0, 0, 0, 0, 6, 0, 0, 6, 0,
- 12, 12, 10, 12, 12, 0, 0, 15, 15, 0,
- 9, 9, 7, 9, 9, 6, 0, 16, 16, 6,
- 6, 12, 26, 12, 26, 12, 12, 12, 0, 0,
- 8, 9, 11, 9, 11, 9, 9, 9, 0, 10,
- 10, 0, 10, 10, 0, 0, 18, 18, 0, 0,
- 7, 0, 0, 7, 0, 0, 20, 20, 0, 0,
- 10, 0, 10, 0, 10, 10, 10, 0, 8, 0,
- 7, 8, 0, 0, 7, 7, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 12, 8, 12,
- 0, 0, 8, 8, 0, 0, 0, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 21, 21, 0, 0, 0, 0, 0, 0, 0,
- 0, 25, 25, 0, 0, 0, 10, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 26, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 11, 11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 12, 12, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
- 10,
-};
-short yycheck[] = { 10,
- 0, 259, 26, 27, 37, 42, 43, 40, 45, 46,
- 0, 126, 259, 0, 5, 6, 257, 259, 259, 38,
- 44, 43, 62, 45, 35, 36, 41, 60, 22, 23,
- 21, 64, 58, 257, 0, 41, 257, 37, 38, 0,
- 40, 41, 42, 43, 63, 45, 46, 37, 38, 0,
- 40, 41, 42, 43, 41, 45, 46, 62, 58, 58,
- 60, 43, 62, 63, 64, 29, -1, -1, 58, -1,
- 60, 58, 62, 63, 64, 62, 37, 38, -1, 40,
- 41, 42, 43, -1, 45, 46, 37, 38, -1, 40,
- 41, 42, 43, -1, 45, 46, -1, 58, -1, 60,
- -1, 62, 63, 64, 0, 124, -1, 58, -1, 60,
- -1, 62, 63, 64, 0, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 124, -1, 126, -1, -1, -1,
- -1, -1, -1, -1, 124, -1, 126, -1, -1, -1,
- -1, 37, 38, -1, 40, 41, 42, 43, 0, 45,
- 46, 37, 38, -1, 40, 41, 42, 43, 0, 45,
- 46, -1, 58, 124, 60, 126, 62, 63, 64, -1,
- -1, -1, 58, 124, 60, 126, 62, 63, 64, -1,
- -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
- 42, 43, -1, 45, 46, 37, 38, -1, 40, 41,
- -1, -1, -1, -1, -1, -1, 58, 0, 60, -1,
- 62, 63, 64, 0, -1, -1, 58, -1, 60, -1,
- 62, 63, 64, 0, 257, 258, -1, -1, 124, -1,
- 126, -1, -1, -1, -1, -1, -1, -1, 124, -1,
- 126, -1, -1, -1, -1, 38, -1, -1, 41, -1,
- 37, 38, 0, 40, 41, -1, -1, 257, 258, -1,
- 37, 38, 0, 40, 41, 58, -1, 257, 258, 62,
- 63, 58, 124, 60, 126, 62, 63, 64, -1, -1,
- 0, 58, 124, 60, 126, 62, 63, 64, -1, 37,
- 38, -1, 40, 41, -1, -1, 257, 258, -1, -1,
- 38, -1, -1, 41, -1, -1, 257, 258, -1, -1,
- 58, -1, 60, -1, 62, 63, 64, -1, 38, -1,
- 58, 41, -1, -1, 62, 63, -1, -1, -1, -1,
- -1, 124, -1, -1, -1, -1, -1, 124, 58, 126,
- -1, -1, 62, 63, -1, -1, -1, 124, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, -1, -1, -1, 124, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 124, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 124, 257, 258, -1, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
- 258,
-};
-#define YYFINAL 7
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 259
-#if YYDEBUG
-char *yyname[] = {
-"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'","'.'",0,0,0,0,0,0,0,0,0,0,0,
-"':'",0,"'<'",0,"'>'","'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,
-"'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,"TOKEN_LETTER","TOKEN_LITERAL","TOKEN_DIGIT",
-};
-char *yyrule[] = {
-"$accept : expr",
-"expr : optional_conditional",
-"conditional : alternative",
-"conditional : alternative '?' optional_conditional ':' conditional",
-"optional_conditional :",
-"optional_conditional : conditional",
-"alternative : list",
-"alternative : alternative '|' list",
-"alternative : alternative '&' list",
-"list : substitute",
-"list : list substitute",
-"substitute : string",
-"substitute : substitute '~' string",
-"string : '@'",
-"string : TOKEN_LITERAL",
-"string : TOKEN_LETTER",
-"string : TOKEN_LETTER number",
-"string : '%' TOKEN_LETTER",
-"string : '%' digits",
-"string : string '.' flag TOKEN_LETTER optional_number",
-"string : string '+' number",
-"string : string '-' number",
-"string : string '*'",
-"string : '(' optional_conditional ')'",
-"string : '<' optional_conditional '>'",
-"optional_number :",
-"optional_number : number",
-"number : TOKEN_DIGIT",
-"number : number TOKEN_DIGIT",
-"digits : TOKEN_DIGIT",
-"digits : digits TOKEN_DIGIT",
-"flag :",
-"flag : '+'",
-"flag : '-'",
-};
-#endif
-#define yyclearin (yychar=(-1))
-#define yyerrok (yyerrflag=0)
-#ifdef YYSTACKSIZE
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#endif
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH 500
-#endif
-#endif
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short yyss[YYSTACKSIZE];
-YYSTYPE yyvs[YYSTACKSIZE];
-#define yystacksize YYSTACKSIZE
-#line 397 "/u/jjc/groff/refer/label.y"
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-const char *spec_ptr;
-const char *spec_end;
-const char *spec_cur;
-
-int yylex()
-{
- while (spec_ptr < spec_end && csspace(*spec_ptr))
- spec_ptr++;
- spec_cur = spec_ptr;
- if (spec_ptr >= spec_end)
- return 0;
- unsigned char c = *spec_ptr++;
- if (csalpha(c)) {
- yylval.num = c;
- return TOKEN_LETTER;
- }
- if (csdigit(c)) {
- yylval.num = c - '0';
- return TOKEN_DIGIT;
- }
- if (c == '\'') {
- yylval.str.start = literals.length();
- for (; spec_ptr < spec_end; spec_ptr++) {
- if (*spec_ptr == '\'') {
- if (++spec_ptr < spec_end && *spec_ptr == '\'')
- literals += '\'';
- else {
- yylval.str.len = literals.length() - yylval.str.start;
- return TOKEN_LITERAL;
- }
- }
- else
- literals += *spec_ptr;
- }
- yylval.str.len = literals.length() - yylval.str.start;
- return TOKEN_LITERAL;
- }
- return c;
-}
-
-int set_label_spec(const char *label_spec)
-{
- spec_cur = spec_ptr = label_spec;
- spec_end = strchr(label_spec, '\0');
- literals.clear();
- if (yyparse())
- return 0;
- delete parsed_label;
- parsed_label = parse_result;
- return 1;
-}
-
-int set_date_label_spec(const char *label_spec)
-{
- spec_cur = spec_ptr = label_spec;
- spec_end = strchr(label_spec, '\0');
- literals.clear();
- if (yyparse())
- return 0;
- delete parsed_date_label;
- parsed_date_label = parse_result;
- return 1;
-}
-
-int set_short_label_spec(const char *label_spec)
-{
- spec_cur = spec_ptr = label_spec;
- spec_end = strchr(label_spec, '\0');
- literals.clear();
- if (yyparse())
- return 0;
- delete parsed_short_label;
- parsed_short_label = parse_result;
- return 1;
-}
-
-void yyerror(const char *message)
-{
- if (spec_cur < spec_end)
- command_error("label specification %1 before `%2'", message, spec_cur);
- else
- command_error("label specification %1 at end of string",
- message, spec_cur);
-}
-
-void at_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (tentative)
- ref.canonicalize_authors(result);
- else {
- const char *end, *start = ref.get_authors(&end);
- if (start)
- result.append(start, end - start);
- }
-}
-
-void format_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (tentative)
- return;
- const label_info *lp = ref.get_label_ptr();
- int num = lp == 0 ? ref.get_number() : lp->count;
- if (type != '0')
- result += format_serial(type, num + 1);
- else {
- const char *ptr = itoa(num + first_number);
- int pad = width - strlen(ptr);
- while (--pad >= 0)
- result += '0';
- result += ptr;
- }
-}
-
-static const char *format_serial(char c, int n)
-{
- assert(n > 0);
- static char buf[128]; // more than enough.
- switch (c) {
- case 'i':
- case 'I':
- {
- char *p = buf;
- // troff uses z and w to represent 10000 and 5000 in Roman
- // numerals; I can find no historical basis for this usage
- const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
- if (n >= 40000)
- return itoa(n);
- while (n >= 10000) {
- *p++ = s[0];
- n -= 10000;
- }
- for (int i = 1000; i > 0; i /= 10, s += 2) {
- int m = n/i;
- n -= m*i;
- switch (m) {
- case 3:
- *p++ = s[2];
- /* falls through */
- case 2:
- *p++ = s[2];
- /* falls through */
- case 1:
- *p++ = s[2];
- break;
- case 4:
- *p++ = s[2];
- *p++ = s[1];
- break;
- case 8:
- *p++ = s[1];
- *p++ = s[2];
- *p++ = s[2];
- *p++ = s[2];
- break;
- case 7:
- *p++ = s[1];
- *p++ = s[2];
- *p++ = s[2];
- break;
- case 6:
- *p++ = s[1];
- *p++ = s[2];
- break;
- case 5:
- *p++ = s[1];
- break;
- case 9:
- *p++ = s[2];
- *p++ = s[0];
- }
- }
- *p = 0;
- break;
- }
- case 'a':
- case 'A':
- {
- char *p = buf;
- // this is derived from troff/reg.c
- while (n > 0) {
- int d = n % 26;
- if (d == 0)
- d = 26;
- n -= d;
- n /= 26;
- *p++ = c + d - 1; // ASCII dependent
- }
- *p-- = 0;
- // Reverse it.
- char *q = buf;
- while (q < p) {
- char temp = *q;
- *q = *p;
- *p = temp;
- --p;
- ++q;
- }
- break;
- }
- default:
- assert(0);
- }
- return buf;
-}
-
-void field_expr::evaluate(int, const reference &ref,
- string &result, substring_position &)
-{
- const char *end;
- const char *start = ref.get_field(name, &end);
- if (start) {
- start = nth_field(number, start, &end);
- if (start)
- result.append(start, end - start);
- }
-}
-
-void literal_expr::evaluate(int, const reference &,
- string &result, substring_position &)
-{
- result += s;
-}
-
-analyzed_expr::analyzed_expr(expression *e)
-: unary_expr(e), flags(e ? e->analyze() : 0)
-{
-}
-
-void analyzed_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- if (expr)
- expr->evaluate(tentative, ref, result, pos);
-}
-
-void star_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- const label_info *lp = ref.get_label_ptr();
- if (!tentative
- && (lp == 0 || lp->total > 1)
- && expr)
- expr->evaluate(tentative, ref, result, pos);
-}
-
-void separator_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- int start_length = result.length();
- int is_first = pos.start < 0;
- if (expr)
- expr->evaluate(tentative, ref, result, pos);
- if (is_first) {
- pos.start = start_length;
- pos.length = result.length() - start_length;
- }
-}
-
-void map_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (expr) {
- string temp;
- substring_position temp_pos;
- expr->evaluate(tentative, ref, temp, temp_pos);
- (*func)(temp.contents(), temp.contents() + temp.length(), result);
- }
-}
-
-void extractor_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (expr) {
- string temp;
- substring_position temp_pos;
- expr->evaluate(tentative, ref, temp, temp_pos);
- const char *end, *start = (*func)(temp.contents(),
- temp.contents() + temp.length(),
- &end);
- switch (part) {
- case BEFORE:
- if (start)
- result.append(temp.contents(), start - temp.contents());
- else
- result += temp;
- break;
- case MATCH:
- if (start)
- result.append(start, end - start);
- break;
- case AFTER:
- if (start)
- result.append(end, temp.contents() + temp.length() - end);
- break;
- default:
- assert(0);
- }
- }
-}
-
-static void first_part(int len, const char *ptr, const char *end,
- string &result)
-{
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, end))
- break;
- const token_info *ti = lookup_token(token_start, ptr);
- int counts = ti->sortify_non_empty(token_start, ptr);
- if (counts && --len < 0)
- break;
- if (counts || ti->is_accent())
- result.append(token_start, ptr - token_start);
- }
-}
-
-static void last_part(int len, const char *ptr, const char *end,
- string &result)
-{
- const char *start = ptr;
- int count = 0;
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, end))
- break;
- const token_info *ti = lookup_token(token_start, ptr);
- if (ti->sortify_non_empty(token_start, ptr))
- count++;
- }
- ptr = start;
- int skip = count - len;
- if (skip > 0) {
- for (;;) {
- const char *token_start = ptr;
- if (!get_token(&ptr, end))
- assert(0);
- const token_info *ti = lookup_token(token_start, ptr);
- if (ti->sortify_non_empty(token_start, ptr) && --skip < 0) {
- ptr = token_start;
- break;
- }
- }
- }
- first_part(len, ptr, end, result);
-}
-
-void truncate_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &)
-{
- if (expr) {
- string temp;
- substring_position temp_pos;
- expr->evaluate(tentative, ref, temp, temp_pos);
- const char *start = temp.contents();
- const char *end = start + temp.length();
- if (n > 0)
- first_part(n, start, end, result);
- else if (n < 0)
- last_part(-n, start, end, result);
- }
-}
-
-void alternative_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- int start_length = result.length();
- if (expr1)
- expr1->evaluate(tentative, ref, result, pos);
- if (result.length() == start_length && expr2)
- expr2->evaluate(tentative, ref, result, pos);
-}
-
-void list_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- if (expr1)
- expr1->evaluate(tentative, ref, result, pos);
- if (expr2)
- expr2->evaluate(tentative, ref, result, pos);
-}
-
-void substitute_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- int start_length = result.length();
- if (expr1)
- expr1->evaluate(tentative, ref, result, pos);
- if (result.length() > start_length && result[result.length() - 1] == '-') {
- // ought to see if pos covers the -
- result.set_length(result.length() - 1);
- if (expr2)
- expr2->evaluate(tentative, ref, result, pos);
- }
-}
-
-void conditional_expr::evaluate(int tentative, const reference &ref,
- string &result, substring_position &pos)
-{
- string temp;
- substring_position temp_pos;
- if (expr1)
- expr1->evaluate(tentative, ref, temp, temp_pos);
- if (temp.length() > 0) {
- if (expr2)
- expr2->evaluate(tentative, ref, result, pos);
- }
- else {
- if (expr3)
- expr3->evaluate(tentative, ref, result, pos);
- }
-}
-
-void reference::pre_compute_label()
-{
- if (parsed_label != 0
- && (parsed_label->analyze() & expression::CONTAINS_VARIABLE)) {
- label.clear();
- substring_position temp_pos;
- parsed_label->evaluate(1, *this, label, temp_pos);
- label_ptr = lookup_label(label);
- }
-}
-
-void reference::compute_label()
-{
- label.clear();
- if (parsed_label)
- parsed_label->evaluate(0, *this, label, separator_pos);
- if (short_label_flag && parsed_short_label)
- parsed_short_label->evaluate(0, *this, short_label, short_separator_pos);
- if (date_as_label) {
- string new_date;
- if (parsed_date_label) {
- substring_position temp_pos;
- parsed_date_label->evaluate(0, *this, new_date, temp_pos);
- }
- set_date(new_date);
- }
- if (label_ptr)
- label_ptr->count += 1;
-}
-
-void reference::immediate_compute_label()
-{
- if (label_ptr)
- label_ptr->total = 2; // force use of disambiguator
- compute_label();
-}
-
-int reference::merge_labels(reference **v, int n, label_type type,
- string &result)
-{
- if (abbreviate_label_ranges)
- return merge_labels_by_number(v, n, type, result);
- else
- return merge_labels_by_parts(v, n, type, result);
-}
-
-int reference::merge_labels_by_number(reference **v, int n, label_type type,
- string &result)
-{
- if (n <= 1)
- return 0;
- int num = get_number();
- // Only merge three or more labels.
- if (v[0]->get_number() != num + 1
- || v[1]->get_number() != num + 2)
- return 0;
- for (int i = 2; i < n; i++)
- if (v[i]->get_number() != num + i + 1)
- break;
- result = get_label(type);
- result += label_range_indicator;
- result += v[i - 1]->get_label(type);
- return i;
-}
-
-const substring_position &reference::get_separator_pos(label_type type) const
-{
- if (type == SHORT_LABEL && short_label_flag)
- return short_separator_pos;
- else
- return separator_pos;
-}
-
-const string &reference::get_label(label_type type) const
-{
- if (type == SHORT_LABEL && short_label_flag)
- return short_label;
- else
- return label;
-}
-
-int reference::merge_labels_by_parts(reference **v, int n, label_type type,
- string &result)
-{
- if (n <= 0)
- return 0;
- const string &lb = get_label(type);
- const substring_position &sp = get_separator_pos(type);
- if (sp.start < 0
- || sp.start != v[0]->get_separator_pos(type).start
- || memcmp(lb.contents(), v[0]->get_label(type).contents(),
- sp.start) != 0)
- return 0;
- result = lb;
- int i = 0;
- do {
- result += separate_label_second_parts;
- const substring_position &s = v[i]->get_separator_pos(type);
- int sep_end_pos = s.start + s.length;
- result.append(v[i]->get_label(type).contents() + sep_end_pos,
- v[i]->get_label(type).length() - sep_end_pos);
- } while (++i < n
- && sp.start == v[i]->get_separator_pos(type).start
- && memcmp(lb.contents(), v[i]->get_label(type).contents(),
- sp.start) == 0);
- return i;
-}
-
-string label_pool;
-
-label_info::label_info(const string &s)
-: count(0), total(1), length(s.length()), start(label_pool.length())
-{
- label_pool += s;
-}
-
-static label_info **label_table = 0;
-static int label_table_size = 0;
-static int label_table_used = 0;
-
-label_info *lookup_label(const string &label)
-{
- if (label_table == 0) {
- label_table = new label_info *[17];
- label_table_size = 17;
- for (int i = 0; i < 17; i++)
- label_table[i] = 0;
- }
- unsigned h = hash_string(label.contents(), label.length()) % label_table_size;
- for (label_info **ptr = label_table + h;
- *ptr != 0;
- (ptr == label_table)
- ? (ptr = label_table + label_table_size - 1)
- : ptr--)
- if ((*ptr)->length == label.length()
- && memcmp(label_pool.contents() + (*ptr)->start, label.contents(),
- label.length()) == 0) {
- (*ptr)->total += 1;
- return *ptr;
- }
- label_info *result = *ptr = new label_info(label);
- if (++label_table_used * 2 > label_table_size) {
- // Rehash the table.
- label_info **old_table = label_table;
- int old_size = label_table_size;
- label_table_size = next_size(label_table_size);
- label_table = new label_info *[label_table_size];
- int i;
- for (i = 0; i < label_table_size; i++)
- label_table[i] = 0;
- for (i = 0; i < old_size; i++)
- if (old_table[i]) {
- unsigned h = hash_string(label_pool.contents() + old_table[i]->start,
- old_table[i]->length);
- for (label_info **p = label_table + (h % label_table_size);
- *p != 0;
- (p == label_table)
- ? (p = label_table + label_table_size - 1)
- : --p)
- ;
- *p = old_table[i];
- }
- a_delete old_table;
- }
- return result;
-}
-
-void clear_labels()
-{
- for (int i = 0; i < label_table_size; i++) {
- delete label_table[i];
- label_table[i] = 0;
- }
- label_table_used = 0;
- label_pool.clear();
-}
-
-static void consider_authors(reference **start, reference **end, int i);
-
-void compute_labels(reference **v, int n)
-{
- if (parsed_label
- && (parsed_label->analyze() & expression::CONTAINS_AT)
- && sort_fields.length() >= 2
- && sort_fields[0] == 'A'
- && sort_fields[1] == '+')
- consider_authors(v, v + n, 0);
- for (int i = 0; i < n; i++)
- v[i]->compute_label();
-}
-
-
-/* A reference with a list of authors <A0,A1,...,AN> _needs_ author i
-where 0 <= i <= N if there exists a reference with a list of authors
-<B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i
-and Aj = Bj for 0 <= j < i. In this case if we can't say ``A0,
-A1,...,A(i-1) et al'' because this would match both <A0,A1,...,AN> and
-<B0,B1,...,BM>. If a reference needs author i we only have to call
-need_author(j) for some j >= i such that the reference also needs
-author j. */
-
-/* This function handles 2 tasks:
-determine which authors are needed (cannot be elided with et al.);
-determine which authors can have only last names in the labels.
-
-References >= start and < end have the same first i author names.
-Also they're sorted by A+. */
-
-static void consider_authors(reference **start, reference **end, int i)
-{
- if (start >= end)
- return;
- reference **p = start;
- if (i >= (*p)->get_nauthors()) {
- for (++p; p < end && i >= (*p)->get_nauthors(); p++)
- ;
- if (p < end && i > 0) {
- // If we have an author list <A B C> and an author list <A B C D>,
- // then both lists need C.
- for (reference **q = start; q < end; q++)
- (*q)->need_author(i - 1);
- }
- start = p;
- }
- while (p < end) {
- reference **last_name_start = p;
- reference **name_start = p;
- for (++p;
- p < end && i < (*p)->get_nauthors()
- && same_author_last_name(**last_name_start, **p, i);
- p++) {
- if (!same_author_name(**name_start, **p, i)) {
- consider_authors(name_start, p, i + 1);
- name_start = p;
- }
- }
- consider_authors(name_start, p, i + 1);
- if (last_name_start == name_start) {
- for (reference **q = last_name_start; q < p; q++)
- (*q)->set_last_name_unambiguous(i);
- }
- // If we have an author list <A B C D> and <A B C E>, then the lists
- // need author D and E respectively.
- if (name_start > start || p < end) {
- for (reference **q = last_name_start; q < p; q++)
- (*q)->need_author(i);
- }
- }
-}
-
-int same_author_last_name(const reference &r1, const reference &r2, int n)
-{
- const char *ae1;
- const char *as1 = r1.get_sort_field(0, n, 0, &ae1);
- assert(as1 != 0);
- const char *ae2;
- const char *as2 = r2.get_sort_field(0, n, 0, &ae2);
- assert(as2 != 0);
- return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-int same_author_name(const reference &r1, const reference &r2, int n)
-{
- const char *ae1;
- const char *as1 = r1.get_sort_field(0, n, -1, &ae1);
- assert(as1 != 0);
- const char *ae2;
- const char *as2 = r2.get_sort_field(0, n, -1, &ae2);
- assert(as2 != 0);
- return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-
-void int_set::set(int i)
-{
- assert(i >= 0);
- int bytei = i >> 3;
- if (bytei >= v.length()) {
- int old_length = v.length();
- v.set_length(bytei + 1);
- for (int j = old_length; j <= bytei; j++)
- v[j] = 0;
- }
- v[bytei] |= 1 << (i & 7);
-}
-
-int int_set::get(int i) const
-{
- assert(i >= 0);
- int bytei = i >> 3;
- return bytei >= v.length() ? 0 : (v[bytei] & (1 << (i & 7))) != 0;
-}
-
-void reference::set_last_name_unambiguous(int i)
-{
- last_name_unambiguous.set(i);
-}
-
-void reference::need_author(int n)
-{
- if (n > last_needed_author)
- last_needed_author = n;
-}
-
-const char *reference::get_authors(const char **end) const
-{
- if (!computed_authors) {
- ((reference *)this)->computed_authors = 1;
- string &result = ((reference *)this)->authors;
- int na = get_nauthors();
- result.clear();
- for (int i = 0; i < na; i++) {
- if (last_name_unambiguous.get(i)) {
- const char *e, *start = get_author_last_name(i, &e);
- assert(start != 0);
- result.append(start, e - start);
- }
- else {
- const char *e, *start = get_author(i, &e);
- assert(start != 0);
- result.append(start, e - start);
- }
- if (i == last_needed_author
- && et_al.length() > 0
- && et_al_min_elide > 0
- && last_needed_author + et_al_min_elide < na
- && na >= et_al_min_total) {
- result += et_al;
- break;
- }
- if (i < na - 1) {
- if (na == 2)
- result += join_authors_exactly_two;
- else if (i < na - 2)
- result += join_authors_default;
- else
- result += join_authors_last_two;
- }
- }
- }
- const char *start = authors.contents();
- *end = start + authors.length();
- return start;
-}
-
-int reference::get_nauthors() const
-{
- if (nauthors < 0) {
- const char *dummy;
- for (int na = 0; get_author(na, &dummy) != 0; na++)
- ;
- ((reference *)this)->nauthors = na;
- }
- return nauthors;
-}
-#line 1220 "y.tab.c"
-#define YYABORT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-int
-yyparse()
-{
- register int yym, yyn, yystate;
-#if YYDEBUG
- register char *yys;
- extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
-yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
-#ifdef lint
- goto yynewerror;
-#endif
-yynewerror:
- yyerror("syntax error");
-#ifdef lint
- goto yyerrlab;
-#endif
-yyerrlab:
- ++yynerrs;
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
-#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
- }
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
-case 1:
-#line 250 "/u/jjc/groff/refer/label.y"
-{ parse_result = (yyvsp[0].expr ? new analyzed_expr(yyvsp[0].expr) : 0); }
-break;
-case 2:
-#line 255 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = yyvsp[0].expr; }
-break;
-case 3:
-#line 257 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new conditional_expr(yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].expr); }
-break;
-case 4:
-#line 262 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = 0; }
-break;
-case 5:
-#line 264 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = yyvsp[0].expr; }
-break;
-case 6:
-#line 269 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = yyvsp[0].expr; }
-break;
-case 7:
-#line 271 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new alternative_expr(yyvsp[-2].expr, yyvsp[0].expr); }
-break;
-case 8:
-#line 273 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new conditional_expr(yyvsp[-2].expr, yyvsp[0].expr, 0); }
-break;
-case 9:
-#line 278 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = yyvsp[0].expr; }
-break;
-case 10:
-#line 280 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new list_expr(yyvsp[-1].expr, yyvsp[0].expr); }
-break;
-case 11:
-#line 285 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = yyvsp[0].expr; }
-break;
-case 12:
-#line 287 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new substitute_expr(yyvsp[-2].expr, yyvsp[0].expr); }
-break;
-case 13:
-#line 292 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new at_expr; }
-break;
-case 14:
-#line 294 "/u/jjc/groff/refer/label.y"
-{
- yyval.expr = new literal_expr(literals.contents() + yyvsp[0].str.start,
- yyvsp[0].str.len);
- }
-break;
-case 15:
-#line 299 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new field_expr(yyvsp[0].num, 0); }
-break;
-case 16:
-#line 301 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new field_expr(yyvsp[-1].num, yyvsp[0].num - 1); }
-break;
-case 17:
-#line 303 "/u/jjc/groff/refer/label.y"
-{
- switch (yyvsp[0].num) {
- case 'I':
- case 'i':
- case 'A':
- case 'a':
- yyval.expr = new format_expr(yyvsp[0].num);
- break;
- default:
- command_error("unrecognized format `%1'", char(yyvsp[0].num));
- yyval.expr = new format_expr('a');
- break;
- }
- }
-break;
-case 18:
-#line 319 "/u/jjc/groff/refer/label.y"
-{
- yyval.expr = new format_expr('0', yyvsp[0].dig.ndigits, yyvsp[0].dig.val);
- }
-break;
-case 19:
-#line 323 "/u/jjc/groff/refer/label.y"
-{
- switch (yyvsp[-1].num) {
- case 'l':
- yyval.expr = new map_expr(yyvsp[-4].expr, lowercase);
- break;
- case 'u':
- yyval.expr = new map_expr(yyvsp[-4].expr, uppercase);
- break;
- case 'c':
- yyval.expr = new map_expr(yyvsp[-4].expr, capitalize);
- break;
- case 'r':
- yyval.expr = new map_expr(yyvsp[-4].expr, reverse_name);
- break;
- case 'a':
- yyval.expr = new map_expr(yyvsp[-4].expr, abbreviate_name);
- break;
- case 'y':
- yyval.expr = new extractor_expr(yyvsp[-4].expr, find_year, yyvsp[-2].num);
- break;
- case 'n':
- yyval.expr = new extractor_expr(yyvsp[-4].expr, find_last_name, yyvsp[-2].num);
- break;
- default:
- yyval.expr = yyvsp[-4].expr;
- command_error("unknown function `%1'", char(yyvsp[-1].num));
- break;
- }
- }
-break;
-case 20:
-#line 354 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new truncate_expr(yyvsp[-2].expr, yyvsp[0].num); }
-break;
-case 21:
-#line 356 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new truncate_expr(yyvsp[-2].expr, -yyvsp[0].num); }
-break;
-case 22:
-#line 358 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new star_expr(yyvsp[-1].expr); }
-break;
-case 23:
-#line 360 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = yyvsp[-1].expr; }
-break;
-case 24:
-#line 362 "/u/jjc/groff/refer/label.y"
-{ yyval.expr = new separator_expr(yyvsp[-1].expr); }
-break;
-case 25:
-#line 367 "/u/jjc/groff/refer/label.y"
-{ yyval.num = -1; }
-break;
-case 26:
-#line 369 "/u/jjc/groff/refer/label.y"
-{ yyval.num = yyvsp[0].num; }
-break;
-case 27:
-#line 374 "/u/jjc/groff/refer/label.y"
-{ yyval.num = yyvsp[0].num; }
-break;
-case 28:
-#line 376 "/u/jjc/groff/refer/label.y"
-{ yyval.num = yyvsp[-1].num*10 + yyvsp[0].num; }
-break;
-case 29:
-#line 381 "/u/jjc/groff/refer/label.y"
-{ yyval.dig.ndigits = 1; yyval.dig.val = yyvsp[0].num; }
-break;
-case 30:
-#line 383 "/u/jjc/groff/refer/label.y"
-{ yyval.dig.ndigits = yyvsp[-1].dig.ndigits + 1; yyval.dig.val = yyvsp[-1].dig.val*10 + yyvsp[0].num; }
-break;
-case 31:
-#line 389 "/u/jjc/groff/refer/label.y"
-{ yyval.num = 0; }
-break;
-case 32:
-#line 391 "/u/jjc/groff/refer/label.y"
-{ yyval.num = 1; }
-break;
-case 33:
-#line 393 "/u/jjc/groff/refer/label.y"
-{ yyval.num = -1; }
-break;
-#line 1538 "y.tab.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
- }
-#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
-to state %d\n", *yyssp, yystate);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- return (1);
-yyaccept:
- return (0);
-}
diff --git a/gnu/usr.bin/gzip/zcmp b/gnu/usr.bin/gzip/zcmp
deleted file mode 100644
index c21e7ef..0000000
--- a/gnu/usr.bin/gzip/zcmp
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh
-
-# Zcmp and zdiff are used to invoke the cmp or the diff pro-
-# gram on compressed files. All options specified are passed
-# directly to cmp or diff. If only 1 file is specified, then
-# the files compared are file1 and an uncompressed file1.gz.
-# If two files are specified, then they are uncompressed (if
-# necessary) and fed to cmp or diff. The exit status from cmp
-# or diff is preserved.
-
-prog=`echo $0 | sed 's|.*/||'`
-case "$prog" in
- *cmp) comp=${CMP-cmp} ;;
- *) comp=${DIFF-diff} ;;
-esac
-
-OPTIONS=
-FILES=
-for ARG
-do
- case "$ARG" in
- -*) OPTIONS="$OPTIONS $ARG";;
- *) if test -f "$ARG"; then
- FILES="$FILES $ARG"
- else
- echo "${prog}: $ARG not found or not a regular file"
- exit 1
- fi ;;
- esac
-done
-if test -z "$FILES"; then
- echo "Usage: $prog [${comp}_options] file [file]"
- exit 1
-fi
-set $FILES
-if test $# -eq 1; then
- FILE=`echo "$1" | sed 's/[-.][zZtga]*$//'`
- gzip -cd "$1" | $comp $OPTIONS - "$FILE"
- STAT="$?"
-
-elif test $# -eq 2; then
- case "$1" in
- *[-.]gz | *[-.][zZ] | *.t[ga]z)
- case "$2" in
- *[-.]gz | *[-.][zZ] | *.t[ga]z)
- F=`echo "$2" | sed 's|.*/||;s|[-.][zZtga]*$||'`
- gzip -cd "$2" > /tmp/"$F".$$
- gzip -cd "$1" | $comp $OPTIONS - /tmp/"$F".$$
- STAT="$?"
- /bin/rm -f /tmp/"$F".$$;;
-
- *) gzip -cd "$1" | $comp $OPTIONS - "$2"
- STAT="$?";;
- esac;;
- *) case "$2" in
- *[-.]gz | *[-.][zZ] | *.t[ga]z)
- gzip -cd "$2" | $comp $OPTIONS "$1" -
- STAT="$?";;
- *) $comp $OPTIONS "$1" "$2"
- STAT="$?";;
- esac;;
- esac
- exit "$STAT"
-else
- echo "Usage: $prog [${comp}_options] file [file]"
- exit 1
-fi
diff --git a/gnu/usr.bin/man/apropos/apropos b/gnu/usr.bin/man/apropos/apropos
deleted file mode 100644
index 8735e5f..0000000
--- a/gnu/usr.bin/man/apropos/apropos
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/sh
-#
-# apropos -- search the whatis database for keywords.
-#
-# Copyright (c) 1990, 1991, John W. Eaton.
-#
-# You may distribute under the terms of the GNU General Public
-# License as specified in the README file that comes with the man
-# distribution.
-#
-# John W. Eaton
-# jwe@che.utexas.edu
-# Department of Chemical Engineering
-# The University of Texas at Austin
-# Austin, Texas 78712
-
-PATH=/usr/local/bin:/bin:/usr/ucb:/usr/bin
-
-libdir=/etc
-
-if [ $# = 0 ]
-then
- echo "usage: `basename $0` keyword ..."
- exit 1
-fi
-
-manpath=`/usr/bin/manpath -q | tr : '\040'`
-
-if [ "$manpath" = "" ]
-then
- echo "whatis: manpath is null"
- exit 1
-fi
-
-if [ "$PAGER" = "" ]
-then
- PAGER="/usr/gnu/bin/less -sC"
-fi
-
-while [ $1 ]
-do
- found=0
- for d in $manpath /usr/lib
- do
- if [ -f $d/whatis ]
- then
- grep -i "$1" $d/whatis
- status=$?
- if [ "$status" = "0" ]
- then
- found=1
- fi
- fi
- done
-
- if [ "$found" = "0" ]
- then
- echo "$1: nothing appropriate"
- fi
-
- shift
-done | $PAGER
-
-exit
diff --git a/gnu/usr.bin/man/apropos/apropos.1 b/gnu/usr.bin/man/apropos/apropos.1
deleted file mode 100644
index 3bb3e17..0000000
--- a/gnu/usr.bin/man/apropos/apropos.1
+++ /dev/null
@@ -1,27 +0,0 @@
-.\" Man page for apropos
-.\"
-.\" Copyright (c) 1990, 1991, John W. Eaton.
-.\"
-.\" You may distribute under the terms of the GNU General Public
-.\" License as specified in the README file that comes with the man 1.0
-.\" distribution.
-.\"
-.\" John W. Eaton
-.\" jwe@che.utexas.edu
-.\" Department of Chemical Engineering
-.\" The University of Texas at Austin
-.\" Austin, Texas 78712
-.\"
-.TH apropos 1 "Jan 15, 1991"
-.LO 1
-.SH NAME
-apropos \- search the whatis database for strings
-.SH SYNOPSIS
-.BI apropos
-keyword ...
-.SH DESCRIPTION
-apropos searches a set of database files containing short descriptions
-of system commands for keywords and displays the result on the
-standard output.
-.SH "SEE ALSO"
-whatis(1), man(1).
diff --git a/gnu/usr.bin/man/lib/config.h b/gnu/usr.bin/man/lib/config.h
deleted file mode 100644
index 2c23168..0000000
--- a/gnu/usr.bin/man/lib/config.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * config.h
- *
- * If you haven't read the README file, now might be a good time.
- *
- * This file is edited by configure, so you shouldn't have to.
- * If that doesn't work, edit this file to match your site.
- *
- * Sorry it's so long, but there are lots of things you might want to
- * customize for your site.
- *
- * Copyright (c) 1990, 1991, John W. Eaton.
- *
- * You may distribute under the terms of the GNU General Public
- * License as specified in the file COPYING that comes with the man
- * distribution.
- *
- * John W. Eaton
- * jwe@che.utexas.edu
- * Department of Chemical Engineering
- * The University of Texas at Austin
- * Austin, Texas 78712
- */
-
-#ifdef COMPRESS
-#define DO_COMPRESS
-#define DO_UNCOMPRESS
-#endif
-
-/*
- * This is the size of a number of internal buffers. It should
- * probably not be less than 512.
- */
-#ifndef BUFSIZ
-#define BUFSIZ 1024
-#endif
-
-/*
- * This should be at least the size of the longest path.
- */
-#ifndef MAXPATHLEN
-#define MAXPATHLEN 1024
-#endif
-
-/*
- * This is the maximum number of directories expected in the manpath.
- */
-#ifndef MAXDIRS
-#define MAXDIRS 64
-#endif
-
-/*
- * This is the name of the group that owns the preformatted man pages.
- * If you are running man as a setgid program, you should make sure
- * that all of the preformatted man pages and the directories that
- * they live in are readable and writeable and owned by this group.
- */
-#ifdef SECURE_MAN_UID
-#define MAN_USER ""
-#endif
-
-/*
- * It's probably best to define absolute paths to all of these. If
- * you don't, you'll be depending on the user's path to be correct
- * when system () is called. This can result in weird behavior that's
- * hard to track down, especially after you forget how this program
- * works... If you don't have some of these programs, simply define
- * them to be empty strings (i.e. ""). As a minimum, you must have
- * nroff installed.
- */
-#ifndef APROPOS
-#define APROPOS "/usr/bin/apropos"
-#endif
-
-#ifndef WHATIS
-#define WHATIS "/usr/bin/whatis"
-#endif
-
-#ifndef PAGER
-#define PAGER "/usr/gnu/bin/less -sC"
-#endif
-
-#ifdef HAS_TROFF
-#ifndef TROFF
-#define TROFF "/usr/bin/groff -Tps -man"
-#endif
-#endif
-
-#ifndef NROFF
-#define NROFF "/usr/bin/groff -Tascii -man"
-#endif
-
-#ifndef EQN
-#define EQN "/usr/bin/eqn -Tps"
-#endif
-
-#ifndef NEQN
-#define NEQN "/usr/bin/eqn -Tascii"
-#endif
-
-#ifndef TBL
-#define TBL "/usr/bin/tbl"
-#endif
-
-#ifndef COL
-#define COL "/usr/bin/col"
-#endif
-
-#ifndef VGRIND
-#define VGRIND "/usr/bin/vgrind"
-#endif
-
-#ifndef REFER
-#define REFER "/usr/bin/refer"
-#endif
-
-#ifndef GRAP
-#define GRAP ""
-#endif
-
-#ifndef PIC
-#define PIC "/usr/bin/pic"
-#endif
-
-/*
- * Define the absolute path to the configuration file.
- */
-#ifndef MAN_MAIN
- static char config_file[] = "/etc/manpath.config";
-#endif
-
-/*
- * Define the uncompression program(s) to use for those preformatted
- * pages that end in the given character. If you add extras here, you
- * may need to change man.c.
- */
-#ifdef DO_UNCOMPRESS
-/* .F files */
-#define FCAT ""
-/* .Y files */
-#define YCAT ""
-/* .Z files */
-#define ZCAT "/usr/bin/zcat"
-#endif
-
-/*
- * This is the standard program to use on this system for compressing
- * pages once they have been formatted, and the character to tack on
- * to the end of those files. The program listed is expected to read
- * from the standard input and write compressed output to the standard
- * output.
- */
-#ifdef DO_COMPRESS
-#define COMPRESSOR ""
-#define COMPRESS_EXT ""
-#endif
-
-/*
- * Define the standard manual sections. For example, if your man
- * directory tree has subdirectories man1, man2, man3, mann,
- * and man3foo, std_sections[] would have "1", "2", "3", "n", and
- * "3foo". Directories are searched in the order they appear. Having
- * extras isn't fatal, it just slows things down a bit.
- *
- * Note that this is just for directories to search. If you have
- * files like .../man3/foobar.3Xtc, you don't need to have "3Xtc" in
- * the list below -- this is handled separately, so that `man 3Xtc foobar',
- * `man 3 foobar', and `man foobar' should find the file .../man3/foo.3Xtc,
- * (assuming, of course, that there isn't a .../man1/foo.1 or somesuch
- * that we would find first).
- *
- * Note that this list should be in the order that you want the
- * directories to be searched. Is there a standard for this? What is
- * the normal order? If anyone knows, please tell me!
- */
-#ifndef MANPATH_MAIN
- static char *std_sections[] =
- {
- "1", "n", "l", "6", "8", "2", "3", "4", "5", "7", "p", "o", NULL
- };
-#endif
-
-/*
- * Not all systems define these in stat.h.
- */
-#ifndef S_IRUSR
-#define S_IRUSR 00400 /* read permission: owner */
-#endif
-#ifndef S_IWUSR
-#define S_IWUSR 00200 /* write permission: owner */
-#endif
-#ifndef S_IRGRP
-#define S_IRGRP 00040 /* read permission: group */
-#endif
-#ifndef S_IWGRP
-#define S_IWGRP 00020 /* write permission: group */
-#endif
-#ifndef S_IROTH
-#define S_IROTH 00004 /* read permission: other */
-#endif
-#ifndef S_IWOTH
-#define S_IWOTH 00002 /* write permission: other */
-#endif
-
-/*
- * This is the mode used for formatted pages that we create. If you
- * are using the setgid option, you should use 664. If you are not,
- * you should use 666 and make the cat* directories mode 777.
- */
-#ifndef CATMODE
-#ifdef SECURE_MAN_UID
-#define CATMODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH
-#else
-#define CATMODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
-#endif
-#endif
diff --git a/gnu/usr.bin/man/makewhatis/makewhatis b/gnu/usr.bin/man/makewhatis/makewhatis
deleted file mode 100644
index e6c238c..0000000
--- a/gnu/usr.bin/man/makewhatis/makewhatis
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-#
-# makewhatis -- update the whatis database in the man directories.
-#
-# Copyright (c) 1990, 1991, John W. Eaton.
-#
-# You may distribute under the terms of the GNU General Public
-# License as specified in the README file that comes with the man
-# distribution.
-#
-# John W. Eaton
-# jwe@che.utexas.edu
-# Department of Chemical Engineering
-# The University of Texas at Austin
-# Austin, Texas 78712
-
-PATH=/bin:/usr/local/bin:/usr/ucb:/usr/bin
-
-if [ $# = 0 ]
-then
- echo "usage: makewhatis directory [...]"
- exit 1
-fi
-
-for dir in $*
-do
- cd $dir
- for subdir in man*
- do
- if [ -d $subdir ]
- then
- for f in `find . -name '*' -print`
- do
- sed -n '/^\.TH.*$/p
- /^\.SH[ ]*NAME/,/^\.SH/p' $f |\
- sed -e 's/\\[ ]*\-/-/
- s/^.PP.*$//
- s/\\(em//
- s/\\fI//
- s/\\fR//' |\
- awk 'BEGIN {insh = 0} {
- if ($1 == ".TH")
- sect = $3
- else if ($1 == ".SH" && insh == 1) {
- if (i > 0 && name != NULL) {
- namesect = sprintf("%s (%s)", name, sect)
- printf("%-20.20s", namesect)
- printf(" - ")
- for (j = 0; j < i-1; j++)
- printf("%s ", desc[j])
- printf("%s\n", desc[i-1])
- }
- } else if ($1 == ".SH" && insh == 0) {
- insh = 1
- count = 0
- i = 0
- } else if (insh == 1) {
- count++
- if (count == 1 && NF > 2) {
- start = 2
- if ($2 == "-") start = 3
- if (NF > start + 1)
- for (j = start; j <= NF; j++)
- desc[i++] = $j
- name = $1
- } else {
- for (j = 1; j <= NF; j++)
- desc[i++] = $j
- }
- }
- }'
- done
- cd ..
- fi
- done | sort | colrm 80 > $dir/whatis.db.tmp
- mv $dir/whatis.db.tmp $dir/whatis
-done
-
-exit
diff --git a/gnu/usr.bin/man/man/man.1 b/gnu/usr.bin/man/man/man.1
deleted file mode 100644
index f17aced..0000000
--- a/gnu/usr.bin/man/man/man.1
+++ /dev/null
@@ -1,132 +0,0 @@
-.\" Man page for man
-.\"
-.\" Copyright (c) 1990, 1991, John W. Eaton.
-.\"
-.\" You may distribute under the terms of the GNU General Public
-.\" License as specified in the README file that comes with the man 1.0
-.\" distribution.
-.\"
-.\" John W. Eaton
-.\" jwe@che.utexas.edu
-.\" Department of Chemical Engineering
-.\" The University of Texas at Austin
-.\" Austin, Texas 78712
-.\"
-.TH man 1 "Jan 5, 1991"
-.LO 1
-.SH NAME
-man \- format and display the on-line manual pages
-.SH SYNOPSIS
-man [\-adfhktw] [\-m system] [\-p string] [\-M path] [\-P pager]
-[\-S list] [section] name ...
-.SH DESCRIPTION
-man formats and displays the on-line manual pages. This version knows
-about the MANPATH and PAGER environment variables, so you can have
-your own set(s) of personal man pages and choose whatever program you
-like to display the formatted pages. If section is specified, man
-only looks in that section of the manual. You may also specify the
-order to search the sections for entries and which preprocessors to
-run on the source files via command line options or environment
-variables.
-.SH OPTIONS
-.TP
-.B \-\^M " path"
-Specify an alternate manpath. By default, man uses
-.B manpath
-to determine the path to search. This option overrides the
-.B MANPATH
-environment variable.
-.TP
-.B \-\^P " pager"
-Specify which pager to use. By default, man uses
-.B /usr/local/bin/less -sC,
-This option overrides the
-.B PAGER
-environment variable.
-.TP
-.B \-\^S " list"
-List is a colon separated list of manual sections to search.
-This option overrides the
-.B MANSECT
-environment variable.
-.TP
-.B \-\^a
-By default, man will exit after displaying the first manual page it
-finds. Using this option forces man to display all the manual pages
-that match
-.B name,
-not just the first.
-.TP
-.B \-\^d
-Don't actually display the man pages, but do print gobs of debugging
-information.
-.TP
-.B \-\^f
-Equivalent to
-.B whatis.
-.TP
-.B \-\^h
-Print a one line help message and exit.
-.TP
-.B \-\^k
-Equivalent to
-.B apropos.
-.TP
-.B \-\^m " system"
-Specify an alternate set of man pages to search based on the system
-name given.
-.TP
-.B \-\^p " string"
-Specify the sequence of preprocessors to run before nroff or troff.
-Not all installations will have a full set of preprocessors.
-Some of the preprocessors and the letters used to designate them are:
-eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r).
-This option overrides the
-.B MANROFFSEQ
-environment variable.
-.TP
-.B \-\^t
-Use
-.B /usr/bin/groff -Tps -man
-to format the manual page, passing the output to
-.B stdout.
-The output from
-.B /usr/bin/groff -Tps -man
-may need to be passed through some filter or another before being
-printed.
-.TP
-.B \-\^w
-Don't actually display the man pages, but do print the location(s) of
-the files that would be formatted or displayed.
-.SH ENVIRONMENT
-.TP \w'MANROFFSEQ\ \ 'u
-.B MANPATH
-If
-.B MANPATH
-is set, its value is used as the path to search for manual pages.
-.TP
-.B MANROFFSEQ
-If
-.B MANROFFSEQ
-is set, its value is used to determine the set of preprocessors run
-before running nroff or troff. By default, pages are passed through
-the table preprocessor before nroff.
-.TP
-.B MANSEC
-If
-.B MANSEC
-is set, its value is used to determine which manual sections to search.
-.TP
-.B PAGER
-If
-.B PAGER
-is set, its value is used as the name of the program to use to display
-the man page. By default,
-.B /usr/local/bin/less -sC
-is used.
-.SH "SEE ALSO"
-apropos(1), whatis(1), manpath(1), less(1), groff(1).
-.SH BUGS
-The
-.B \-t
-option only works if a troff-like program is installed.
diff --git a/gnu/usr.bin/man/whatis/whatis b/gnu/usr.bin/man/whatis/whatis
deleted file mode 100644
index e8cae0a..0000000
--- a/gnu/usr.bin/man/whatis/whatis
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/bin/sh
-#
-# whatis -- search the whatis database for keywords. Like apropos,
-# but match only commands (as whole words).
-#
-# Copyright (c) 1990, 1991, John W. Eaton.
-#
-# You may distribute under the terms of the GNU General Public
-# License as specified in the README file that comes with the man
-# distribution.
-#
-# John W. Eaton
-# jwe@che.utexas.edu
-# Department of Chemical Engineering
-# The University of Texas at Austin
-# Austin, Texas 78712
-
-PATH=/usr/local/bin:/bin:/usr/ucb:/usr/bin
-
-libdir=/etc
-
-if [ $# = 0 ]
-then
- echo "usage: `basename $0` name ..."
- exit 1
-fi
-
-manpath=`/usr/bin/manpath -q | tr : '\040'`
-
-if [ "$manpath" = "" ]
-then
- echo "whatis: manpath is null"
- exit 1
-fi
-
-if [ "$PAGER" = "" ]
-then
- PAGER="/usr/gnu/bin/less -sC"
-fi
-
-while [ $1 ]
-do
- found=0
- for d in $manpath /usr/lib
- do
- if [ -f $d/whatis ]
- then
- grep -iw "^$1" $d/whatis
- status=$?
- if [ "$status" = "0" ]
- then
- found=1
- export found;
- fi
- fi
- done
-
- if [ "$found" = "0" ]
- then
- echo "$1: nothing appropriate"
- fi
-
- shift
-done | $PAGER
-
-exit
diff --git a/gnu/usr.bin/man/whatis/whatis.1 b/gnu/usr.bin/man/whatis/whatis.1
deleted file mode 100644
index 9e5528d..0000000
--- a/gnu/usr.bin/man/whatis/whatis.1
+++ /dev/null
@@ -1,27 +0,0 @@
-.\" Man page for whatis
-.\"
-.\" Copyright (c) 1990, 1991, John W. Eaton.
-.\"
-.\" You may distribute under the terms of the GNU General Public
-.\" License as specified in the README file that comes with the man 1.0
-.\" distribution.
-.\"
-.\" John W. Eaton
-.\" jwe@che.utexas.edu
-.\" Department of Chemical Engineering
-.\" The University of Texas at Austin
-.\" Austin, Texas 78712
-.\"
-.TH whatis 1 "Jan 5, 1991"
-.LO 1
-.SH NAME
-whatis \- search the whatis database for complete words.
-.SH SYNOPSIS
-.BI whatis
-keyword ...
-.SH DESCRIPTION
-whatis searches a set of database files containing short descriptions
-of system commands for keywords and displays the result on the
-standard output. Only complete word matches are displayed.
-.SH "SEE ALSO"
-apropos(1), man(1).
diff --git a/gnu/usr.bin/perl/Makefile.inc b/gnu/usr.bin/perl/Makefile.inc
deleted file mode 100644
index c2f9b44..0000000
--- a/gnu/usr.bin/perl/Makefile.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-BINDIR?= /usr/local/bin
-MANDIR?= /usr/local/man/man
-
diff --git a/gnu/usr.bin/perl/perl/t/op/Op.dbmx.db b/gnu/usr.bin/perl/perl/t/op/Op.dbmx.db
deleted file mode 100644
index 33a09bb..0000000
--- a/gnu/usr.bin/perl/perl/t/op/Op.dbmx.db
+++ /dev/null
Binary files differ
diff --git a/gnu/usr.bin/perl/perl/usub/README b/gnu/usr.bin/perl/perl/usub/README
deleted file mode 100644
index a80a650..0000000
--- a/gnu/usr.bin/perl/perl/usub/README
+++ /dev/null
@@ -1,114 +0,0 @@
-This directory contains an example of how you might link in C subroutines
-with perl to make your own special copy of perl. In the perl distribution
-directory, there will be (after make is run) a file called uperl.o, which
-is all of perl except for a single undefined subroutine, named userinit().
-See usersub.c.
-
-The sole purpose of the userinit() routine is to call the initialization
-routines for any modules that you want to link in. In this example, we just
-call init_curses(), which sets up to link in the System V curses routines.
-You'll find this in the file curses.c, which is the processed output of
-curses.mus. (To get BSD curses, replace curses.mus with bsdcurses.mus.)
-
-The magicname() routine adds variable names into the symbol table. Along
-with the name of the variable as Perl knows it, we pass a structure containing
-an index identifying the variable, and the names of two C functions that
-know how to set or evaluate a variable given the index of the variable.
-Our example uses a macro to handle this conveniently.
-
-The init routine calls make_usub() to add user-defined subroutine names
-into the symbol table. The arguments are
-
- make_usub(subname, subindex, subfunc, filename);
- char *subname;
- int subindex;
- int subfunc();
- char *filename;
-
-The subname is the name that will be used in the Perl program. The subindex
-will be passed to subfunc() when it is called to tell it which C function
-is desired. subfunc() is a glue routine that translates the arguments
-from Perl internal stack form to the form required by the routine in
-question, calls the desired C function, and then translates any return
-value back into the stack format. The glue routine used by curses just
-has a large switch statement, each branch of which does the processing
-for a particular C function. The subindex could, however, be used to look
-up a function in a dynamically linked library. No example of this is
-provided.
-
-As a help in producing the glue routine, a preprocessor called "mus" lets
-you specify argument and return value types in a tabular format. An entry
-such as:
-
- CASE int waddstr
- I WINDOW* win
- I char* str
- END
-
-indicates that waddstr takes two input arguments, the first of which is a
-pointer to a window, and the second of which is an ordinary C string. It
-also indicates that an integer is returned. The mus program turns this into:
-
- case US_waddstr:
- if (items != 2)
- fatal("Usage: &waddstr($win, $str)");
- else {
- int retval;
- WINDOW* win = *(WINDOW**) str_get(st[1]);
- char* str = (char*) str_get(st[2]);
-
- retval = waddstr(win, str);
- str_numset(st[0], (double) retval);
- }
- return sp;
-
-It's also possible to have output parameters, indicated by O, and input/ouput
-parameters indicated by IO.
-
-The mus program isn't perfect. You'll note that curses.mus has some
-cases which are hand coded. They'll be passed straight through unmodified.
-You can produce similar cases by analogy to what's in curses.c, as well
-as similar routines in the doarg.c, dolist.c and doio.c routines of Perl.
-The mus program is only intended to get you about 90% there. It's not clear,
-for instance, how a given structure should be passed to Perl. But that
-shouldn't bother you--if you've gotten this far, it's already obvious
-that you are totally mad.
-
-Here's an example of how to return an array value:
-
- case US_appl_errlist:
- if (!wantarray) {
- str_numset(st[0], (double) appl_nerr);
- return sp;
- }
- astore(stack, sp + appl_nerr, Nullstr); /* extend stack */
- st = stack->ary_array + sp; /* possibly realloced */
- for (i = 0; i < appl_nerr; i++) {
- tmps = appl_errlist[i];
- st[i] = str_2mortal(str_make(tmps,strlen(tmps)));
- }
- return sp + appl_nerr - 1;
-
-
-In addition, there is a program, man2mus, that will scan a man page for
-function prototypes and attempt to construct a mus CASE entry for you. It has
-to guess about input/output parameters, so you'll have to tidy up after it.
-But it can save you a lot of time if the man pages for a library are
-reasonably well formed.
-
-If you happen to have curses on your machine, you might try compiling
-a copy of curseperl. The "pager" program in this directory is a rudimentary
-start on writing a pager--don't believe the help message, which is stolen
-from the less program.
-
-User-defined subroutines may not currently be called as a signal handler,
-though a signal handler may itself call a user-defined subroutine.
-
-There are now glue routines to call back from C into Perl. In usersub.c
-in this directory, you'll find callback() and callv(). The callback()
-routine presumes that any arguments to pass to the Perl subroutine
-have already been pushed onto the Perl stack. The callv() routine
-is a wrapper that pushes an argv-style array of strings onto the
-stack for you, and then calls callback(). Be sure to recheck your
-stack pointer after returning from these routine, since the Perl code
-may have reallocated it.
diff --git a/gnu/usr.bin/perl/perl/usub/bsdcurses.mus b/gnu/usr.bin/perl/perl/usub/bsdcurses.mus
deleted file mode 100644
index 1a1f11b..0000000
--- a/gnu/usr.bin/perl/perl/usub/bsdcurses.mus
+++ /dev/null
@@ -1,699 +0,0 @@
-/* $RCSfile: bsdcurses.mus,v $$Revision: 1.1.1.1 $$Date: 1993/08/23 21:30:07 $
- *
- * $Log: bsdcurses.mus,v $
-# Revision 1.1.1.1 1993/08/23 21:30:07 nate
-# PERL!
-#
- * Revision 4.0.1.2 92/06/08 16:05:28 lwall
- * patch20: &getcap eventually dumped core in bsdcurses
- *
- * Revision 4.0.1.1 91/11/05 19:04:53 lwall
- * initial checkin
- *
- * Revision 4.0 91/03/20 01:56:13 lwall
- * 4.0 baseline.
- *
- * Revision 3.0.1.1 90/08/09 04:05:21 lwall
- * patch19: Initial revision
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-
-char *savestr();
-
-#include <curses.h>
-
-static enum uservars {
- UV_curscr,
- UV_stdscr,
- UV_Def_term,
- UV_My_term,
- UV_ttytype,
- UV_LINES,
- UV_COLS,
- UV_ERR,
- UV_OK,
-};
-
-static enum usersubs {
- US_addch,
- US_waddch,
- US_addstr,
- US_waddstr,
- US_box,
- US_clear,
- US_wclear,
- US_clearok,
- US_clrtobot,
- US_wclrtobot,
- US_clrtoeol,
- US_wclrtoeol,
- US_delch,
- US_wdelch,
- US_deleteln,
- US_wdeleteln,
- US_erase,
- US_werase,
- US_flushok,
- US_idlok,
- US_insch,
- US_winsch,
- US_insertln,
- US_winsertln,
- US_move,
- US_wmove,
- US_overlay,
- US_overwrite,
- US_printw,
- US_wprintw,
- US_refresh,
- US_wrefresh,
- US_standout,
- US_wstandout,
- US_standend,
- US_wstandend,
- US_cbreak,
- US_nocbreak,
- US_echo,
- US_noecho,
- US_getch,
- US_wgetch,
- US_getstr,
- US_wgetstr,
- US_raw,
- US_noraw,
- US_scanw,
- US_wscanw,
- US_baudrate,
- US_delwin,
- US_endwin,
- US_erasechar,
- US_getcap,
- US_getyx,
- US_inch,
- US_winch,
- US_initscr,
- US_killchar,
- US_leaveok,
- US_longname,
- US_fullname,
- US_mvwin,
- US_newwin,
- US_nl,
- US_nonl,
- US_scrollok,
- US_subwin,
- US_touchline,
- US_touchoverlap,
- US_touchwin,
- US_unctrl,
- US_gettmode,
- US_mvcur,
- US_scroll,
- US_savetty,
- US_resetty,
- US_setterm,
- US_tstp,
- US__putchar,
- US_testcallback,
-};
-
-static int usersub();
-static int userset();
-static int userval();
-
-int
-init_curses()
-{
- struct ufuncs uf;
- char *filename = "curses.c";
-
- uf.uf_set = userset;
- uf.uf_val = userval;
-
-#define MAGICVAR(name, ix) uf.uf_index = ix, magicname(name, &uf, sizeof uf)
-
- MAGICVAR("curscr", UV_curscr);
- MAGICVAR("stdscr", UV_stdscr);
- MAGICVAR("Def_term",UV_Def_term);
- MAGICVAR("My_term", UV_My_term);
- MAGICVAR("ttytype", UV_ttytype);
- MAGICVAR("LINES", UV_LINES);
- MAGICVAR("COLS", UV_COLS);
- MAGICVAR("ERR", UV_ERR);
- MAGICVAR("OK", UV_OK);
-
- make_usub("addch", US_addch, usersub, filename);
- make_usub("waddch", US_waddch, usersub, filename);
- make_usub("addstr", US_addstr, usersub, filename);
- make_usub("waddstr", US_waddstr, usersub, filename);
- make_usub("box", US_box, usersub, filename);
- make_usub("clear", US_clear, usersub, filename);
- make_usub("wclear", US_wclear, usersub, filename);
- make_usub("clearok", US_clearok, usersub, filename);
- make_usub("clrtobot", US_clrtobot, usersub, filename);
- make_usub("wclrtobot", US_wclrtobot, usersub, filename);
- make_usub("clrtoeol", US_clrtoeol, usersub, filename);
- make_usub("wclrtoeol", US_wclrtoeol, usersub, filename);
- make_usub("delch", US_delch, usersub, filename);
- make_usub("wdelch", US_wdelch, usersub, filename);
- make_usub("deleteln", US_deleteln, usersub, filename);
- make_usub("wdeleteln", US_wdeleteln, usersub, filename);
- make_usub("erase", US_erase, usersub, filename);
- make_usub("werase", US_werase, usersub, filename);
- make_usub("flushok", US_flushok, usersub, filename);
- make_usub("idlok", US_idlok, usersub, filename);
- make_usub("insch", US_insch, usersub, filename);
- make_usub("winsch", US_winsch, usersub, filename);
- make_usub("insertln", US_insertln, usersub, filename);
- make_usub("winsertln", US_winsertln, usersub, filename);
- make_usub("move", US_move, usersub, filename);
- make_usub("wmove", US_wmove, usersub, filename);
- make_usub("overlay", US_overlay, usersub, filename);
- make_usub("overwrite", US_overwrite, usersub, filename);
- make_usub("printw", US_printw, usersub, filename);
- make_usub("wprintw", US_wprintw, usersub, filename);
- make_usub("refresh", US_refresh, usersub, filename);
- make_usub("wrefresh", US_wrefresh, usersub, filename);
- make_usub("standout", US_standout, usersub, filename);
- make_usub("wstandout", US_wstandout, usersub, filename);
- make_usub("standend", US_standend, usersub, filename);
- make_usub("wstandend", US_wstandend, usersub, filename);
- make_usub("cbreak", US_cbreak, usersub, filename);
- make_usub("nocbreak", US_nocbreak, usersub, filename);
- make_usub("echo", US_echo, usersub, filename);
- make_usub("noecho", US_noecho, usersub, filename);
- make_usub("getch", US_getch, usersub, filename);
- make_usub("wgetch", US_wgetch, usersub, filename);
- make_usub("getstr", US_getstr, usersub, filename);
- make_usub("wgetstr", US_wgetstr, usersub, filename);
- make_usub("raw", US_raw, usersub, filename);
- make_usub("noraw", US_noraw, usersub, filename);
- make_usub("scanw", US_scanw, usersub, filename);
- make_usub("wscanw", US_wscanw, usersub, filename);
- make_usub("baudrate", US_baudrate, usersub, filename);
- make_usub("delwin", US_delwin, usersub, filename);
- make_usub("endwin", US_endwin, usersub, filename);
- make_usub("erasechar", US_erasechar, usersub, filename);
- make_usub("getcap", US_getcap, usersub, filename);
- make_usub("getyx", US_getyx, usersub, filename);
- make_usub("inch", US_inch, usersub, filename);
- make_usub("winch", US_winch, usersub, filename);
- make_usub("initscr", US_initscr, usersub, filename);
- make_usub("killchar", US_killchar, usersub, filename);
- make_usub("leaveok", US_leaveok, usersub, filename);
- make_usub("longname", US_longname, usersub, filename);
- make_usub("fullname", US_fullname, usersub, filename);
- make_usub("mvwin", US_mvwin, usersub, filename);
- make_usub("newwin", US_newwin, usersub, filename);
- make_usub("nl", US_nl, usersub, filename);
- make_usub("nonl", US_nonl, usersub, filename);
- make_usub("scrollok", US_scrollok, usersub, filename);
- make_usub("subwin", US_subwin, usersub, filename);
- make_usub("touchline", US_touchline, usersub, filename);
- make_usub("touchoverlap", US_touchoverlap,usersub, filename);
- make_usub("touchwin", US_touchwin, usersub, filename);
- make_usub("unctrl", US_unctrl, usersub, filename);
- make_usub("gettmode", US_gettmode, usersub, filename);
- make_usub("mvcur", US_mvcur, usersub, filename);
- make_usub("scroll", US_scroll, usersub, filename);
- make_usub("savetty", US_savetty, usersub, filename);
- make_usub("resetty", US_resetty, usersub, filename);
- make_usub("setterm", US_setterm, usersub, filename);
- make_usub("tstp", US_tstp, usersub, filename);
- make_usub("_putchar", US__putchar, usersub, filename);
- make_usub("testcallback", US_testcallback,usersub, filename);
-};
-
-static int
-usersub(ix, sp, items)
-int ix;
-register int sp;
-register int items;
-{
- STR **st = stack->ary_array + sp;
- register int i;
- register char *tmps;
- register STR *Str; /* used in str_get and str_gnum macros */
-
- switch (ix) {
-CASE int addch
-I char ch
-END
-
-CASE int waddch
-I WINDOW* win
-I char ch
-END
-
-CASE int addstr
-I char* str
-END
-
-CASE int waddstr
-I WINDOW* win
-I char* str
-END
-
-CASE int box
-I WINDOW* win
-I char vert
-I char hor
-END
-
-CASE int clear
-END
-
-CASE int wclear
-I WINDOW* win
-END
-
-CASE int clearok
-I WINDOW* win
-I bool boolf
-END
-
-CASE int clrtobot
-END
-
-CASE int wclrtobot
-I WINDOW* win
-END
-
-CASE int clrtoeol
-END
-
-CASE int wclrtoeol
-I WINDOW* win
-END
-
-CASE int delch
-END
-
-CASE int wdelch
-I WINDOW* win
-END
-
-CASE int deleteln
-END
-
-CASE int wdeleteln
-I WINDOW* win
-END
-
-CASE int erase
-END
-
-CASE int werase
-I WINDOW* win
-END
-
-CASE int flushok
-I WINDOW* win
-I bool boolf
-END
-
-CASE int idlok
-I WINDOW* win
-I bool boolf
-END
-
-CASE int insch
-I char c
-END
-
-CASE int winsch
-I WINDOW* win
-I char c
-END
-
-CASE int insertln
-END
-
-CASE int winsertln
-I WINDOW* win
-END
-
-CASE int move
-I int y
-I int x
-END
-
-CASE int wmove
-I WINDOW* win
-I int y
-I int x
-END
-
-CASE int overlay
-I WINDOW* win1
-I WINDOW* win2
-END
-
-CASE int overwrite
-I WINDOW* win1
-I WINDOW* win2
-END
-
- case US_printw:
- if (items < 1)
- fatal("Usage: &printw($fmt, $arg1, $arg2, ... )");
- else {
- int retval;
- STR* str = str_new(0);
-
- do_sprintf(str, items - 1, st + 1);
- retval = addstr(str->str_ptr);
- str_numset(st[0], (double) retval);
- str_free(str);
- }
- return sp;
-
- case US_wprintw:
- if (items < 2)
- fatal("Usage: &wprintw($win, $fmt, $arg1, $arg2, ... )");
- else {
- int retval;
- STR* str = str_new(0);
- WINDOW* win = *(WINDOW**) str_get(st[1]);
-
- do_sprintf(str, items - 1, st + 1);
- retval = waddstr(win, str->str_ptr);
- str_numset(st[0], (double) retval);
- str_free(str);
- }
- return sp;
-
-CASE int refresh
-END
-
-CASE int wrefresh
-I WINDOW* win
-END
-
-CASE int standout
-END
-
-CASE int wstandout
-I WINDOW* win
-END
-
-CASE int standend
-END
-
-CASE int wstandend
-I WINDOW* win
-END
-
-CASE int cbreak
-END
-
-CASE int nocbreak
-END
-
-CASE int echo
-END
-
-CASE int noecho
-END
-
- case US_getch:
- if (items != 0)
- fatal("Usage: &getch()");
- else {
- int retval;
- char retch;
-
- retval = getch();
- if (retval == EOF)
- st[0] = &str_undef;
- else {
- retch = retval;
- str_nset(st[0], &retch, 1);
- }
- }
- return sp;
-
- case US_wgetch:
- if (items != 1)
- fatal("Usage: &wgetch($win)");
- else {
- int retval;
- char retch;
- WINDOW* win = *(WINDOW**) str_get(st[1]);
-
- retval = wgetch(win);
- if (retval == EOF)
- st[0] = &str_undef;
- else {
- retch = retval;
- str_nset(st[0], &retch, 1);
- }
- }
- return sp;
-
-CASE int getstr
-IO char* str
-END
-
-CASE int wgetstr
-I WINDOW* win
-IO char* str
-END
-
-CASE int raw
-END
-
-CASE int noraw
-END
-
-CASE int baudrate
-END
-
-CASE int delwin
-I WINDOW* win
-END
-
-CASE int endwin
-END
-
-CASE int erasechar
-END
-
- case US_getcap:
- if (items != 1)
- fatal("Usage: &getcap($str)");
- else {
- char* retval;
- char* str = (char*) str_get(st[1]);
- char output[50], *outputp = output;
-
- retval = tgetstr(str, &outputp);
- str_set(st[0], (char*) retval);
- }
- return sp;
-
- case US_getyx:
- if (items != 3)
- fatal("Usage: &getyx($win, $y, $x)");
- else {
- int retval;
- STR* str = str_new(0);
- WINDOW* win = *(WINDOW**) str_get(st[1]);
- int y;
- int x;
-
- do_sprintf(str, items - 1, st + 1);
- retval = getyx(win, y, x);
- str_numset(st[2], (double)y);
- str_numset(st[3], (double)x);
- str_numset(st[0], (double) retval);
- str_free(str);
- }
- return sp;
-
-
-CASE int inch
-END
-
-CASE int winch
-I WINDOW* win
-END
-
-CASE WINDOW* initscr
-END
-
-CASE int killchar
-END
-
-CASE int leaveok
-I WINDOW* win
-I bool boolf
-END
-
-CASE char* longname
-I char* termbuf
-IO char* name
-END
-
-CASE int fullname
-I char* termbuf
-IO char* name
-END
-
-CASE int mvwin
-I WINDOW* win
-I int y
-I int x
-END
-
-CASE WINDOW* newwin
-I int lines
-I int cols
-I int begin_y
-I int begin_x
-END
-
-CASE int nl
-END
-
-CASE int nonl
-END
-
-CASE int scrollok
-I WINDOW* win
-I bool boolf
-END
-
-CASE WINDOW* subwin
-I WINDOW* win
-I int lines
-I int cols
-I int begin_y
-I int begin_x
-END
-
-CASE int touchline
-I WINDOW* win
-I int y
-I int startx
-I int endx
-END
-
-CASE int touchoverlap
-I WINDOW* win1
-I WINDOW* win2
-END
-
-CASE int touchwin
-I WINDOW* win
-END
-
-CASE char* unctrl
-I char ch
-END
-
-CASE int gettmode
-END
-
-CASE int mvcur
-I int lasty
-I int lastx
-I int newy
-I int newx
-END
-
-CASE int scroll
-I WINDOW* win
-END
-
-CASE int savetty
-END
-
-CASE void resetty
-END
-
-CASE int setterm
-I char* name
-END
-
-CASE int tstp
-END
-
-CASE int _putchar
-I char ch
-END
-
- case US_testcallback:
- sp = callback("callback", sp + items, curcsv->wantarray, 1, items);
- break;
-
- default:
- fatal("Unimplemented user-defined subroutine");
- }
- return sp;
-}
-
-static int
-userval(ix, str)
-int ix;
-STR *str;
-{
- switch (ix) {
- case UV_COLS:
- str_numset(str, (double)COLS);
- break;
- case UV_Def_term:
- str_set(str, Def_term);
- break;
- case UV_ERR:
- str_numset(str, (double)ERR);
- break;
- case UV_LINES:
- str_numset(str, (double)LINES);
- break;
- case UV_My_term:
- str_numset(str, (double)My_term);
- break;
- case UV_OK:
- str_numset(str, (double)OK);
- break;
- case UV_curscr:
- str_nset(str, &curscr, sizeof(WINDOW*));
- break;
- case UV_stdscr:
- str_nset(str, &stdscr, sizeof(WINDOW*));
- break;
- case UV_ttytype:
- str_set(str, ttytype);
- break;
- }
- return 0;
-}
-
-static int
-userset(ix, str)
-int ix;
-STR *str;
-{
- switch (ix) {
- case UV_COLS:
- COLS = (int)str_gnum(str);
- break;
- case UV_Def_term:
- Def_term = savestr(str_get(str)); /* never freed */
- break;
- case UV_LINES:
- LINES = (int)str_gnum(str);
- break;
- case UV_My_term:
- My_term = (bool)str_gnum(str);
- break;
- case UV_ttytype:
- strcpy(ttytype, str_get(str)); /* hope it fits */
- break;
- }
- return 0;
-}
diff --git a/gnu/usr.bin/perl/perl/usub/curses.mus b/gnu/usr.bin/perl/perl/usub/curses.mus
deleted file mode 100644
index f305bf5..0000000
--- a/gnu/usr.bin/perl/perl/usub/curses.mus
+++ /dev/null
@@ -1,890 +0,0 @@
-/* $RCSfile: curses.mus,v $$Revision: 1.1.1.1 $$Date: 1993/08/23 21:30:07 $
- *
- * $Log: curses.mus,v $
-# Revision 1.1.1.1 1993/08/23 21:30:07 nate
-# PERL!
-#
- * Revision 4.0.1.2 92/06/08 16:06:12 lwall
- * patch20: function key support added to curses.mus
- *
- * Revision 4.0.1.1 91/11/05 19:06:19 lwall
- * patch11: usub/curses.mus now supports SysV curses
- *
- * Revision 4.0 91/03/20 01:56:13 lwall
- * 4.0 baseline.
- *
- * Revision 3.0.1.1 90/08/09 04:05:21 lwall
- * patch19: Initial revision
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-
-char *savestr();
-
-#undef bool
-#include <curses.h>
-
-#ifndef A_UNDERLINE
-#define NOSETATTR
-#define A_STANDOUT 0x0200
-#define A_UNDERLINE 0x0100
-#define A_REVERSE 0x0200
-#define A_BLINK 0x0400
-#define A_BOLD 0x0800
-#define A_ALTCHARSET 0x1000
-#define A_NORMAL 0
-#endif
-
-#ifdef USG
-static char *tcbuf = NULL;
-#endif
-
-#ifdef NOSETATTR
-static unsigned curattr = NORMAL;
-#endif
-
-static enum uservars {
- UV_curscr,
- UV_stdscr,
- UV_ttytype,
- UV_LINES,
- UV_COLS,
- UV_ERR,
- UV_OK,
-#ifdef BSD
- UV_Def_term,
- UV_My_term,
-#endif
- UV_A_STANDOUT,
- UV_A_UNDERLINE,
- UV_A_REVERSE,
- UV_A_BLINK,
- UV_A_DIM,
- UV_A_BOLD,
- UV_A_NORMAL,
-};
-
-static enum usersubs {
- US_addch,
- US_waddch,
- US_addstr,
- US_waddstr,
- US_box,
- US_clear,
- US_wclear,
- US_clearok,
- US_clrtobot,
- US_wclrtobot,
- US_clrtoeol,
- US_wclrtoeol,
- US_delch,
- US_wdelch,
- US_deleteln,
- US_wdeleteln,
- US_erase,
- US_werase,
- US_idlok,
- US_insch,
- US_winsch,
- US_insertln,
- US_winsertln,
- US_move,
- US_wmove,
- US_overlay,
- US_overwrite,
- US_refresh,
- US_wrefresh,
- US_standout,
- US_wstandout,
- US_standend,
- US_wstandend,
- US_cbreak,
- US_nocbreak,
- US_echo,
- US_noecho,
- US_getch,
- US_wgetch,
- US_getstr,
- US_wgetstr,
- US_raw,
- US_noraw,
- US_baudrate,
- US_delwin,
- US_endwin,
- US_erasechar,
- US_getyx,
- US_inch,
- US_winch,
- US_initscr,
- US_killchar,
- US_leaveok,
- US_longname,
- US_mvwin,
- US_newwin,
- US_nl,
- US_nonl,
- US_scrollok,
- US_subwin,
- US_touchline,
- US_touchwin,
- US_unctrl,
- US_gettmode,
- US_mvcur,
- US_scroll,
- US_savetty,
- US_resetty,
- US_setterm,
- US_attroff,
- US_wattroff,
- US_attron,
- US_wattron,
- US_attrset,
- US_wattrset,
-#ifdef CURSEFMT
- US_printw, /* remove */
- US_wprintw, /* remove */
- US_scanw, /* delete */
- US_wscanw, /* delete */
-#endif
- US_getcap,
-#ifdef BSD
- US_flushok,
- US_fullname,
- US_touchoverlap,
- US_tstp,
- US__putchar,
-#endif
- US_mysub,
- US_testcallback,
-};
-
-static int usersub();
-static int userset();
-static int userval();
-
-int
-init_curses()
-{
- struct ufuncs uf;
- char *filename = "curses.c";
-
- uf.uf_set = userset;
- uf.uf_val = userval;
-
-#define MAGICVAR(name, ix) uf.uf_index = ix, magicname(name, &uf, sizeof uf)
-
- MAGICVAR("curscr", UV_curscr);
- MAGICVAR("stdscr", UV_stdscr);
- MAGICVAR("ttytype", UV_ttytype);
- MAGICVAR("LINES", UV_LINES);
- MAGICVAR("COLS", UV_COLS);
- MAGICVAR("ERR", UV_ERR);
- MAGICVAR("OK", UV_OK);
-#ifdef BSD
- MAGICVAR("Def_term",UV_Def_term);
- MAGICVAR("My_term", UV_My_term);
-#endif
- MAGICVAR("A_STANDOUT", UV_A_STANDOUT);
- MAGICVAR("A_UNDERLINE", UV_A_UNDERLINE);
- MAGICVAR("A_REVERSE", UV_A_REVERSE);
- MAGICVAR("A_BLINK", UV_A_BLINK);
- MAGICVAR("A_DIM", UV_A_DIM);
- MAGICVAR("A_BOLD", UV_A_BOLD);
- MAGICVAR("A_NORMAL", UV_A_NORMAL);
-
- make_usub("addch", US_addch, usersub, filename);
- make_usub("waddch", US_waddch, usersub, filename);
- make_usub("addstr", US_addstr, usersub, filename);
- make_usub("waddstr", US_waddstr, usersub, filename);
- make_usub("box", US_box, usersub, filename);
- make_usub("clear", US_clear, usersub, filename);
- make_usub("wclear", US_wclear, usersub, filename);
- make_usub("clearok", US_clearok, usersub, filename);
- make_usub("clrtobot", US_clrtobot, usersub, filename);
- make_usub("wclrtobot", US_wclrtobot, usersub, filename);
- make_usub("clrtoeol", US_clrtoeol, usersub, filename);
- make_usub("wclrtoeol", US_wclrtoeol, usersub, filename);
- make_usub("delch", US_delch, usersub, filename);
- make_usub("wdelch", US_wdelch, usersub, filename);
- make_usub("deleteln", US_deleteln, usersub, filename);
- make_usub("wdeleteln", US_wdeleteln, usersub, filename);
- make_usub("erase", US_erase, usersub, filename);
- make_usub("werase", US_werase, usersub, filename);
- make_usub("idlok", US_idlok, usersub, filename);
- make_usub("insch", US_insch, usersub, filename);
- make_usub("winsch", US_winsch, usersub, filename);
- make_usub("insertln", US_insertln, usersub, filename);
- make_usub("winsertln", US_winsertln, usersub, filename);
- make_usub("move", US_move, usersub, filename);
- make_usub("wmove", US_wmove, usersub, filename);
- make_usub("overlay", US_overlay, usersub, filename);
- make_usub("overwrite", US_overwrite, usersub, filename);
- make_usub("refresh", US_refresh, usersub, filename);
- make_usub("wrefresh", US_wrefresh, usersub, filename);
- make_usub("standout", US_standout, usersub, filename);
- make_usub("wstandout", US_wstandout, usersub, filename);
- make_usub("standend", US_standend, usersub, filename);
- make_usub("wstandend", US_wstandend, usersub, filename);
- make_usub("cbreak", US_cbreak, usersub, filename);
- make_usub("nocbreak", US_nocbreak, usersub, filename);
- make_usub("echo", US_echo, usersub, filename);
- make_usub("noecho", US_noecho, usersub, filename);
- make_usub("getch", US_getch, usersub, filename);
- make_usub("wgetch", US_wgetch, usersub, filename);
- make_usub("getstr", US_getstr, usersub, filename);
- make_usub("wgetstr", US_wgetstr, usersub, filename);
- make_usub("raw", US_raw, usersub, filename);
- make_usub("noraw", US_noraw, usersub, filename);
- make_usub("baudrate", US_baudrate, usersub, filename);
- make_usub("delwin", US_delwin, usersub, filename);
- make_usub("endwin", US_endwin, usersub, filename);
- make_usub("erasechar", US_erasechar, usersub, filename);
- make_usub("getyx", US_getyx, usersub, filename);
- make_usub("inch", US_inch, usersub, filename);
- make_usub("winch", US_winch, usersub, filename);
- make_usub("initscr", US_initscr, usersub, filename);
- make_usub("killchar", US_killchar, usersub, filename);
- make_usub("leaveok", US_leaveok, usersub, filename);
- make_usub("longname", US_longname, usersub, filename);
- make_usub("mvwin", US_mvwin, usersub, filename);
- make_usub("newwin", US_newwin, usersub, filename);
- make_usub("nl", US_nl, usersub, filename);
- make_usub("nonl", US_nonl, usersub, filename);
- make_usub("scrollok", US_scrollok, usersub, filename);
- make_usub("subwin", US_subwin, usersub, filename);
- make_usub("touchline", US_touchline, usersub, filename);
- make_usub("touchwin", US_touchwin, usersub, filename);
- make_usub("unctrl", US_unctrl, usersub, filename);
- make_usub("gettmode", US_gettmode, usersub, filename);
- make_usub("mvcur", US_mvcur, usersub, filename);
- make_usub("scroll", US_scroll, usersub, filename);
- make_usub("savetty", US_savetty, usersub, filename);
- make_usub("resetty", US_resetty, usersub, filename);
- make_usub("setterm", US_setterm, usersub, filename);
- make_usub("getcap", US_getcap, usersub, filename);
- make_usub("attroff", US_attroff, usersub, filename);
- make_usub("wattroff", US_wattroff, usersub, filename);
- make_usub("attron", US_attron, usersub, filename);
- make_usub("wattron", US_wattron, usersub, filename);
- make_usub("attrset", US_attrset, usersub, filename);
- make_usub("wattrset", US_wattrset, usersub, filename);
-#ifdef CURSEFMT
- make_usub("printw", US_printw, usersub, filename);
- make_usub("wprintw", US_wprintw, usersub, filename);
- make_usub("scanw", US_scanw, usersub, filename);
- make_usub("wscanw", US_wscanw, usersub, filename);
-#endif
-#ifdef BSD
- make_usub("flushok", US_flushok, usersub, filename);
- make_usub("fullname", US_fullname, usersub, filename);
- make_usub("touchoverlap", US_touchoverlap,usersub, filename);
- make_usub("tstp", US_tstp, usersub, filename);
- make_usub("_putchar", US__putchar, usersub, filename);
-#endif
- make_usub("testcallback", US_testcallback,usersub, filename);
- };
-
-#ifdef USG
-static char
-*getcap(cap)
-register char *cap;
-{
- static char nocaperr[] = "Cannot read termcap entry.";
-
- extern char *tgetstr();
-
- if (tcbuf == NULL) {
- if ((tcbuf = malloc(1024)) == NULL) {
- fatal(nocaperr);
- }
- if (tgetent(tcbuf, ttytype) == -1) {
- fatal(nocaperr);
- }
- }
-
- return (tgetstr(cap, NULL));
-}
-#endif
-
-#ifdef NOSETATTR
-#define attron(attr) wattron(stdscr, attr)
-#define attroff(attr) wattroff(stdscr, attr)
-#define attset(attr) wattset(stdscr, attr)
-
-int
-wattron(win, attr)
-WINDOW *win;
-chtype attr;
-{
- curattr |= attr;
- if (curattr & A_STANDOUT) {
- return(wstandout(win));
- } else {
- return(wstandend(win));
- }
-}
-
-int
-wattroff(win, attr)
-WINDOW *win;
-chtype attr;
-{
- curattr &= (~attr);
- if (curattr & A_STANDOUT) {
- return(wstandout(win));
- } else {
- return(wstandend(win));
- }
-}
-
-int
-wattrset(win, attr)
-WINDOW *win;
-chtype attr;
-{
- curattr = attr;
- if (curattr & A_STANDOUT) {
- return(wstandout(win));
- } else {
- return(wstandend(win));
- }
-}
-
-#endif
-
-static int
-usersub(ix, sp, items)
-int ix;
-register int sp;
-register int items;
-{
- STR **st = stack->ary_array + sp;
- register int i;
- register char *tmps;
- register STR *Str; /* used in str_get and str_gnum macros */
-
- switch (ix) {
-CASE int addch
-I char ch
-END
-
-CASE int waddch
-I WINDOW* win
-I char ch
-END
-
-CASE int addstr
-I char* str
-END
-
-CASE int waddstr
-I WINDOW* win
-I char* str
-END
-
-CASE int box
-I WINDOW* win
-I char vert
-I char hor
-END
-
-CASE int clear
-END
-
-CASE int wclear
-I WINDOW* win
-END
-
-CASE int clearok
-I WINDOW* win
-I bool boolf
-END
-
-CASE int clrtobot
-END
-
-CASE int wclrtobot
-I WINDOW* win
-END
-
-CASE int clrtoeol
-END
-
-CASE int wclrtoeol
-I WINDOW* win
-END
-
-CASE int delch
-END
-
-CASE int wdelch
-I WINDOW* win
-END
-
-CASE int deleteln
-END
-
-CASE int wdeleteln
-I WINDOW* win
-END
-
-CASE int erase
-END
-
-CASE int werase
-I WINDOW* win
-END
-
-CASE int idlok
-I WINDOW* win
-I bool boolf
-END
-
-CASE int insch
-I char c
-END
-
-CASE int winsch
-I WINDOW* win
-I char c
-END
-
-CASE int insertln
-END
-
-CASE int winsertln
-I WINDOW* win
-END
-
-CASE int move
-I int y
-I int x
-END
-
-CASE int wmove
-I WINDOW* win
-I int y
-I int x
-END
-
-CASE int overlay
-I WINDOW* win1
-I WINDOW* win2
-END
-
-CASE int overwrite
-I WINDOW* win1
-I WINDOW* win2
-END
-
-CASE int refresh
-END
-
-CASE int wrefresh
-I WINDOW* win
-END
-
-CASE int standout
-END
-
-CASE int wstandout
-I WINDOW* win
-END
-
-CASE int standend
-END
-
-CASE int wstandend
-I WINDOW* win
-END
-
-CASE int cbreak
-END
-
-CASE int nocbreak
-END
-
-CASE int echo
-END
-
-CASE int noecho
-END
-
- case US_getch:
- if (items != 0)
- fatal("Usage: &getch()");
- else {
- int retval;
- char retch;
-
- retval = getch();
- if (retval == EOF)
- st[0] = &str_undef;
- else {
- retch = retval;
- if (retval > 0377)
- str_numset(st[0], (double) retval);
- else
- str_nset(st[0], &retch, 1);
- }
- }
- return sp;
-
- case US_wgetch:
- if (items != 1)
- fatal("Usage: &wgetch($win)");
- else {
- int retval;
- char retch;
- WINDOW* win = *(WINDOW**) str_get(st[1]);
-
- retval = wgetch(win);
- if (retval == EOF)
- st[0] = &str_undef;
- else {
- retch = retval;
- if (retval > 0377)
- str_numset(st[0], (double) retval);
- else
- str_nset(st[0], &retch, 1);
- }
- }
- return sp;
-
-CASE int getstr
-O char* str
-END
-
-CASE int wgetstr
-I WINDOW* win
-O char* str
-END
-
-CASE int raw
-END
-
-CASE int noraw
-END
-
-CASE int baudrate
-END
-
-CASE int delwin
-I WINDOW* win
-END
-
-CASE int endwin
-END
-
-CASE int erasechar
-END
-
- case US_getyx:
- if (items != 3)
- fatal("Usage: &getyx($win, $y, $x)");
- else {
- int retval;
- STR* str = str_new(0);
- WINDOW* win = *(WINDOW**) str_get(st[1]);
- int y;
- int x;
-
- do_sprintf(str, items - 1, st + 1);
- retval = getyx(win, y, x);
- str_numset(st[2], (double)y);
- str_numset(st[3], (double)x);
- str_numset(st[0], (double) retval);
- str_free(str);
- }
- return sp;
-
-CASE int inch
-END
-
-CASE int winch
-I WINDOW* win
-END
-
-CASE WINDOW* initscr
-END
-
-CASE int killchar
-END
-
-CASE int leaveok
-I WINDOW* win
-I bool boolf
-END
-
-#ifdef BSD
-CASE char* longname
-I char* termbuf
-IO char* name
-END
-#else
-CASE char* longname
-I char* termbug
-I char* name
-END
-#endif
-
-CASE int mvwin
-I WINDOW* win
-I int y
-I int x
-END
-
-CASE WINDOW* newwin
-I int lines
-I int cols
-I int begin_y
-I int begin_x
-END
-
-CASE int nl
-END
-
-CASE int nonl
-END
-
-CASE int scrollok
-I WINDOW* win
-I bool boolf
-END
-
-CASE WINDOW* subwin
-I WINDOW* win
-I int lines
-I int cols
-I int begin_y
-I int begin_x
-END
-
-CASE int touchline
-I WINDOW* win
-I int y
-I int startx
-I int endx
-END
-
-CASE int touchwin
-I WINDOW* win
-END
-
-CASE char* unctrl
-I char ch
-END
-
-CASE int gettmode
-END
-
-CASE int mvcur
-I int lasty
-I int lastx
-I int newy
-I int newx
-END
-
-CASE int scroll
-I WINDOW* win
-END
-
-CASE int savetty
-END
-
-CASE void resetty
-END
-
-CASE int setterm
-I char* name
-END
-
-CASE int attroff
-I chtype str
-END
-
-CASE int wattroff
-I chtype str
-END
-
-CASE int wattron
-I chtype str
-END
-
-CASE int attron
-I chtype str
-END
-
-CASE int attrset
-I chtype str
-END
-
-CASE int wattrset
-I chtype str
-END
-
-#ifdef CURSEFMT
- case US_printw:
- if (items < 1)
- fatal("Usage: &printw($fmt, $arg1, $arg2, ... )");
- else {
- int retval;
- STR* str = str_new(0);
-
- do_sprintf(str, items - 1, st + 1);
- retval = addstr(str->str_ptr);
- str_numset(st[0], (double) retval);
- str_free(str);
- }
- return sp;
-
- case US_wprintw:
- if (items < 2)
- fatal("Usage: &wprintw($win, $fmt, $arg1, $arg2, ... )");
- else {
- int retval;
- STR* str = str_new(0);
- WINDOW* win = *(WINDOW**) str_get(st[1]);
-
- do_sprintf(str, items - 1, st + 1);
- retval = waddstr(win, str->str_ptr);
- str_numset(st[0], (double) retval);
- str_free(str);
- }
- return sp;
-
-#endif
-
-CASE char* getcap
-I char* str
-END
-
-#ifdef BSD
-CASE int flushok
-I WINDOW* win
-I bool boolf
-END
-
-CASE int fullname
-I char* termbuf
-IO char* name
-END
-
-CASE int touchoverlap
-I WINDOW* win1
-I WINDOW* win2
-END
-
-CASE int tstp
-END
-
-CASE int _putchar
-I char ch
-END
-
- case US_testcallback:
- sp = callback("callback", sp + items, curcsv->wantarray, 1, items);
- break;
-
-#endif
-
- default:
- fatal("Unimplemented user-defined subroutine");
- }
- return sp;
-}
-
-static int
-userval(ix, str)
-int ix;
-STR *str;
-{
- switch (ix) {
- case UV_COLS:
- str_numset(str, (double)COLS);
- break;
- case UV_ERR:
- str_numset(str, (double)ERR);
- break;
- case UV_LINES:
- str_numset(str, (double)LINES);
- break;
- case UV_OK:
- str_numset(str, (double)OK);
- break;
- case UV_curscr:
- str_nset(str, &curscr, sizeof(WINDOW*));
- break;
- case UV_stdscr:
- str_nset(str, &stdscr, sizeof(WINDOW*));
- break;
- case UV_ttytype:
- str_set(str, ttytype);
- break;
-#ifdef BSD
- case UV_Def_term:
- str_set(str, Def_term);
- break;
- case UV_My_term:
- str_numset(str, (double)My_term);
- break;
-#endif
- case UV_A_STANDOUT:
- str_numset(str, (double)A_STANDOUT);
- break;
- case UV_A_UNDERLINE:
- str_numset(str, (double)A_UNDERLINE);
- break;
- case UV_A_REVERSE:
- str_numset(str, (double)A_REVERSE);
- break;
- case UV_A_BLINK:
- str_numset(str, (double)A_BLINK);
- break;
- case UV_A_DIM:
- str_numset(str, (double)A_DIM);
- break;
- case UV_A_BOLD:
- str_numset(str, (double)A_BOLD);
- break;
- case UV_A_NORMAL:
- str_numset(str, (double)A_NORMAL);
- break;
- }
- return 0;
-}
-
-static int
-userset(ix, str)
-int ix;
-STR *str;
-{
- switch (ix) {
- case UV_COLS:
- COLS = (int)str_gnum(str);
- break;
- case UV_LINES:
- LINES = (int)str_gnum(str);
- break;
- case UV_ttytype:
- strcpy(ttytype, str_get(str)); /* hope it fits */
-#ifdef USG
- if (tcbuf != NULL) {
- free(tcbuf);
- tcbuf = NULL;
- }
-#endif
- break;
-#ifdef BSD
- case UV_Def_term:
- Def_term = savestr(str_get(str)); /* never freed */
- break;
- case UV_My_term:
- My_term = (bool)str_gnum(str);
- break;
-#endif
- }
- return 0;
-}
diff --git a/gnu/usr.bin/perl/perl/usub/man2mus b/gnu/usr.bin/perl/perl/usub/man2mus
deleted file mode 100644
index a304678..0000000
--- a/gnu/usr.bin/perl/perl/usub/man2mus
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/perl
-while (<>) {
- if (/^\.SH SYNOPSIS/) {
- $spec = '';
- for ($_ = <>; $_ && !/^\.SH/; $_ = <>) {
- s/^\.[IRB][IRB]\s*//;
- s/^\.[IRB]\s+//;
- next if /^\./;
- s/\\f\w//g;
- s/\\&//g;
- s/^\s+//;
- next if /^$/;
- next if /^#/;
- $spec .= $_;
- }
- $_ = $spec;
- 0 while s/\(([^),;]*)\s*,\s*([^);]*)\)/($1|$2)/g;
- s/\(\*([^,;]*)\)\(\)/(*)()$1/g;
- s/(\w+)\[\]/*$1/g;
-
- s/\n/ /g;
- s/\s+/ /g;
- s/(\w+) \(([^*])/$1($2/g;
- s/^ //;
- s/ ?; ?/\n/g;
- s/\) /)\n/g;
- s/ \* / \*/g;
- s/\* / \*/g;
-
- $* = 1;
- 0 while s/^((struct )?\w+ )([^\n,]*), ?(.*)/$1$3\n$1$4/g;
- $* = 0;
- s/\|/,/g;
-
- @cases = ();
- for (reverse split(/\n/,$_)) {
- if (/\)$/) {
- ($type,$name,$args) = split(/(\w+)\(/);
- $type =~ s/ $//;
- if ($type =~ /^(\w+) =/) {
- $type = $type{$1} if $type{$1};
- }
- $type = 'int' if $type eq '';
- @args = grep(/./, split(/[,)]/,$args));
- $case = "CASE $type $name\n";
- foreach $arg (@args) {
- $type = $type{$arg} || "int";
- $type =~ s/ //g;
- $type .= "\t" if length($type) < 8;
- if ($type =~ /\*/) {
- $case .= "IO $type $arg\n";
- }
- else {
- $case .= "I $type $arg\n";
- }
- }
- $case .= "END\n\n";
- unshift(@cases, $case);
- }
- else {
- $type{$name} = $type if ($type,$name) = /(.*\W)(\w+)$/;
- }
- }
- print @cases;
- }
-}
diff --git a/gnu/usr.bin/perl/perl/usub/mus b/gnu/usr.bin/perl/perl/usub/mus
deleted file mode 100755
index b1675fd..0000000
--- a/gnu/usr.bin/perl/perl/usub/mus
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/perl
-
-while (<>) {
- if (s/^CASE\s+//) {
- @fields = split;
- $funcname = pop(@fields);
- $rettype = "@fields";
- @modes = ();
- @types = ();
- @names = ();
- @outies = ();
- @callnames = ();
- $pre = "\n";
- $post = '';
-
- while (<>) {
- last unless /^[IO]+\s/;
- @fields = split(' ');
- push(@modes, shift(@fields));
- push(@names, pop(@fields));
- push(@types, "@fields");
- }
- while (s/^<\s//) {
- $pre .= "\t $_";
- $_ = <>;
- }
- while (s/^>\s//) {
- $post .= "\t $_";
- $_ = <>;
- }
- $items = @names;
- $namelist = '$' . join(', $', @names);
- $namelist = '' if $namelist eq '$';
- print <<EOF;
- case US_$funcname:
- if (items != $items)
- fatal("Usage: &$funcname($namelist)");
- else {
-EOF
- if ($rettype eq 'void') {
- print <<EOF;
- int retval = 1;
-EOF
- }
- else {
- print <<EOF;
- $rettype retval;
-EOF
- }
- foreach $i (1..@names) {
- $mode = $modes[$i-1];
- $type = $types[$i-1];
- $name = $names[$i-1];
- if ($type =~ /^[A-Z]+\*$/) {
- $cast = "*($type*)";
- }
- else {
- $cast = "($type)";
- }
- $what = ($type =~ /^(struct\s+\w+|char|[A-Z]+)\s*\*$/ ? "get" : "gnum");
- $type .= "\t" if length($type) < 4;
- $cast .= "\t" if length($cast) < 8;
- $x = "\t" x (length($name) < 6);
- if ($mode =~ /O/) {
- if ($what eq 'gnum') {
- push(@outies, "\t str_numset(st[$i], (double) $name);\n");
- push(@callnames, "&$name");
- }
- else {
- push(@outies, "\t str_set(st[$i], (char*) $name);\n");
- push(@callnames, "$name");
- }
- }
- else {
- push(@callnames, $name);
- }
- if ($mode =~ /I/) {
- print <<EOF;
- $type $name =$x $cast str_$what(st[$i]);
-EOF
- }
- elsif ($type =~ /char/) {
- print <<EOF;
- char ${name}[133];
-EOF
- }
- else {
- print <<EOF;
- $type $name;
-EOF
- }
- }
- $callnames = join(', ', @callnames);
- $outies = join("\n",@outies);
- if ($rettype eq 'void') {
- print <<EOF;
-$pre (void)$funcname($callnames);
-EOF
- }
- else {
- print <<EOF;
-$pre retval = $funcname($callnames);
-EOF
- }
- if ($rettype =~ /^(struct\s+\w+|char)\s*\*$/) {
- print <<EOF;
- str_set(st[0], (char*) retval);
-EOF
- }
- elsif ($rettype =~ /^[A-Z]+\s*\*$/) {
- print <<EOF;
- str_nset(st[0], (char*) &retval, sizeof retval);
-EOF
- }
- else {
- print <<EOF;
- str_numset(st[0], (double) retval);
-EOF
- }
- print $outies if $outies;
- print $post if $post;
- if (/^END/) {
- print "\t}\n\treturn sp;\n";
- }
- else {
- redo;
- }
- }
- elsif (/^END/) {
- print "\t}\n\treturn sp;\n";
- }
- else {
- print;
- }
-}
diff --git a/gnu/usr.bin/perl/perl/usub/pager b/gnu/usr.bin/perl/perl/usub/pager
deleted file mode 100644
index 407bc50..0000000
--- a/gnu/usr.bin/perl/perl/usub/pager
+++ /dev/null
@@ -1,190 +0,0 @@
-#!./curseperl
-
-eval <<'EndOfMain'; $evaloffset = __LINE__;
-
- $SIG{'INT'} = 'endit';
- $| = 1; # command buffering on stdout
- &initterm;
- &inithelp;
- &slurpfile && &pagearray;
-
-EndOfMain
-
-&endit;
-
-################################################################################
-
-sub initterm {
-
- &initscr; &cbreak; &noecho; &scrollok($stdscr, 1);
- &defbell unless defined &bell;
-
- $lines = $LINES; $lines1 = $lines - 1; $lines2 = $lines - 2;
- $cols = $COLS; $cols1 = $cols - 1; $cols2 = $cols - 2;;
-
- $dl = &getcap('dl');
- $al = &getcap('al');
- $ho = &getcap('ho');
- $ce = &getcap('ce');
-}
-
-sub slurpfile {
- while (<>) {
- s/^(\t+)/' ' x length($1)/e;
- &expand($_) if /\t/;
- if (length($_) < $cols) {
- push(@lines, $_);
- }
- else {
- while ($_ && $_ ne "\n") {
- push(@lines, substr($_,0,$cols));
- substr($_,0,$cols) = '';
- }
- }
- }
- 1;
-}
-
-sub drawscreen {
- &move(0,0);
- for ($line .. $line + $lines2) {
- &addstr($lines[$_]);
- }
- &clrtobot;
- &percent;
- &refresh;
-}
-
-sub expand {
- while (($off = index($_[0],"\t")) >= 0) {
- substr($_[0], $off, 1) = ' ' x (8 - $off % 8);
- }
-}
-
-sub pagearray {
- $line = 0;
-
- $| = 1;
-
- for (&drawscreen;;&drawscreen) {
-
- $ch = &getch;
- $ch = 'j' if $ch eq "\n";
-
- if ($ch eq ' ') {
- last if $percent >= 100;
- &move(0,0);
- $line += $lines1;
- }
- elsif ($ch eq 'b') {
- $line -= $lines1;
- &move(0,0);
- $line = 0 if $line < 0;
- }
- elsif ($ch eq 'j') {
- next if $percent >= 100;
- $line += 1;
- if ($dl && $ho) {
- print $ho, $dl;
- &mvcur(0,0,$lines2,0);
- print $ce,$lines[$line+$lines2],$ce;
- &wmove($curscr,0,0);
- &wdeleteln($curscr);
- &wmove($curscr,$lines2,0);
- &waddstr($curscr,$lines[$line+$lines2]);
- }
- &wmove($stdscr,0,0);
- &wdeleteln($stdscr);
- &wmove($stdscr,$lines2,0);
- &waddstr($stdscr,$lines[$line+$lines2]);
- &percent;
- &refresh;
- redo;
- }
- elsif ($ch eq 'k') {
- next if $line <= 0;
- $line -= 1;
- if ($al && $ho && $ce) {
- print $ho, $al, $ce, $lines[$line];
- &wmove($curscr,0,0);
- &winsertln($curscr);
- &waddstr($curscr,$lines[$line]);
- }
- &wmove($stdscr,0,0);
- &winsertln($stdscr);
- &waddstr($stdscr,$lines[$line]);
- &percent;
- &refresh;
- redo;
- }
- elsif ($ch eq "\f") {
- &clear;
- }
- elsif ($ch eq 'q') {
- last;
- }
- elsif ($ch eq 'h') {
- &clear;
- &help;
- &clear;
- }
- else {
- &bell;
- }
- }
-}
-
-sub defbell {
- eval q#
- sub bell {
- print "\007";
- }
- #;
-}
-
-sub help {
- local(*lines) = *helplines;
- local($line);
- &pagearray;
-}
-
-sub inithelp {
- @helplines = split(/\n/,<<'EOT');
-
- h Display this help.
- q Exit.
-
- SPACE Forward screen.
- b Backward screen.
- j, CR Forward 1 line.
- k Backward 1 line.
- FF Repaint screen.
-EOT
- for (@helplines) {
- s/$/\n/;
- }
-}
-
-sub percent {
- &standout;
- $percent = int(($line + $lines1) * 100 / @lines);
- &move($lines1,0);
- &addstr("($percent%)");
- &standend;
- &clrtoeol;
-}
-
-sub endit {
- &move($lines1,0);
- &clrtoeol;
- &refresh;
- &endwin;
-
- if ($@) {
- print ""; # force flush of stdout
- $@ =~ s/\(eval\)/$0/ && $@ =~ s/line (\d+)/'line ' . ($1 + $evaloffset)/e;
- die $@;
- }
-
- exit;
-}
diff --git a/gnu/usr.bin/perl/perl/usub/usersub.c b/gnu/usr.bin/perl/perl/usub/usersub.c
deleted file mode 100644
index ca9d2ba..0000000
--- a/gnu/usr.bin/perl/perl/usub/usersub.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* $RCSfile: usersub.c,v $$Revision: 1.1.1.1 $$Date: 1993/08/23 21:30:07 $
- *
- * $Log: usersub.c,v $
- * Revision 1.1.1.1 1993/08/23 21:30:07 nate
- * PERL!
- *
- * Revision 4.0.1.1 91/11/05 19:07:24 lwall
- * patch11: there are now subroutines for calling back from C into Perl
- *
- * Revision 4.0 91/03/20 01:56:34 lwall
- * 4.0 baseline.
- *
- * Revision 3.0.1.1 90/08/09 04:06:10 lwall
- * patch19: Initial revision
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-
-int
-userinit()
-{
- init_curses();
-}
-
-/* Be sure to refetch the stack pointer after calling these routines. */
-
-int
-callback(subname, sp, gimme, hasargs, numargs)
-char *subname;
-int sp; /* stack pointer after args are pushed */
-int gimme; /* called in array or scalar context */
-int hasargs; /* whether to create a @_ array for routine */
-int numargs; /* how many args are pushed on the stack */
-{
- static ARG myarg[3]; /* fake syntax tree node */
- int arglast[3];
-
- arglast[2] = sp;
- sp -= numargs;
- arglast[1] = sp--;
- arglast[0] = sp;
-
- if (!myarg[0].arg_ptr.arg_str)
- myarg[0].arg_ptr.arg_str = str_make("",0);
-
- myarg[1].arg_type = A_WORD;
- myarg[1].arg_ptr.arg_stab = stabent(subname, FALSE);
-
- myarg[2].arg_type = hasargs ? A_EXPR : A_NULL;
-
- return do_subr(myarg, gimme, arglast);
-}
-
-int
-callv(subname, sp, gimme, argv)
-char *subname;
-register int sp; /* current stack pointer */
-int gimme; /* called in array or scalar context */
-register char **argv; /* null terminated arg list, NULL for no arglist */
-{
- register int items = 0;
- int hasargs = (argv != 0);
-
- astore(stack, ++sp, Nullstr); /* reserve spot for 1st return arg */
- if (hasargs) {
- while (*argv) {
- astore(stack, ++sp, str_2mortal(str_make(*argv,0)));
- items++;
- argv++;
- }
- }
- return callback(subname, sp, gimme, hasargs, items);
-}
diff --git a/gnu/usr.bin/perl/x2p/a2p.c b/gnu/usr.bin/perl/x2p/a2p.c
deleted file mode 100644
index c441634..0000000
--- a/gnu/usr.bin/perl/x2p/a2p.c
+++ /dev/null
@@ -1,2715 +0,0 @@
-#ifndef lint
-static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
-#endif
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define yyclearin (yychar=(-1))
-#define yyerrok (yyerrflag=0)
-#define YYRECOVERING (yyerrflag!=0)
-#define YYPREFIX "yy"
-#line 2 "a2p.y"
-/* $RCSfile: a2p.y,v $$Revision: 1.1.1.1 $$Date: 1993/08/23 21:30:09 $
- *
- * Copyright (c) 1991, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: a2p.y,v $
- * Revision 1.1.1.1 1993/08/23 21:30:09 nate
- * PERL!
- *
- * Revision 4.0.1.2 92/06/08 16:13:03 lwall
- * patch20: in a2p, getline should allow variable to be array element
- *
- * Revision 4.0.1.1 91/06/07 12:12:41 lwall
- * patch4: new copyright notice
- *
- * Revision 4.0 91/03/20 01:57:21 lwall
- * 4.0 baseline.
- *
- */
-
-#include "INTERN.h"
-#include "a2p.h"
-
-int root;
-int begins = Nullop;
-int ends = Nullop;
-
-#line 42 "y.tab.c"
-#define BEGIN 257
-#define END 258
-#define REGEX 259
-#define SEMINEW 260
-#define NEWLINE 261
-#define COMMENT 262
-#define FUN1 263
-#define FUNN 264
-#define GRGR 265
-#define PRINT 266
-#define PRINTF 267
-#define SPRINTF 268
-#define SPLIT 269
-#define IF 270
-#define ELSE 271
-#define WHILE 272
-#define FOR 273
-#define IN 274
-#define EXIT 275
-#define NEXT 276
-#define BREAK 277
-#define CONTINUE 278
-#define RET 279
-#define GETLINE 280
-#define DO 281
-#define SUB 282
-#define GSUB 283
-#define MATCH 284
-#define FUNCTION 285
-#define USERFUN 286
-#define DELETE 287
-#define ASGNOP 288
-#define OROR 289
-#define ANDAND 290
-#define NUMBER 291
-#define VAR 292
-#define SUBSTR 293
-#define INDEX 294
-#define MATCHOP 295
-#define RELOP 296
-#define OR 297
-#define STRING 298
-#define UMINUS 299
-#define NOT 300
-#define INCR 301
-#define DECR 302
-#define FIELD 303
-#define VFIELD 304
-#define YYERRCODE 256
-short yylhs[] = { -1,
- 0, 3, 6, 6, 2, 2, 7, 7, 7, 7,
- 7, 7, 9, 8, 8, 11, 11, 11, 11, 15,
- 15, 15, 15, 14, 14, 14, 14, 13, 13, 13,
- 13, 12, 12, 12, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 17, 17, 17, 17, 10, 10, 10, 18, 18, 18,
- 1, 1, 19, 19, 19, 19, 4, 4, 20, 20,
- 21, 21, 21, 21, 5, 5, 22, 22, 22, 22,
- 25, 25, 23, 23, 23, 23, 23, 23, 23, 23,
- 23, 23, 23, 23, 23, 26, 26, 26, 24, 24,
- 24, 24, 24, 24, 24, 24,
-};
-short yylen[] = { 2,
- 2, 6, 5, 2, 3, 0, 1, 5, 10, 4,
- 1, 1, 1, 1, 3, 1, 1, 1, 1, 3,
- 4, 4, 2, 3, 3, 3, 3, 3, 3, 1,
- 3, 1, 2, 3, 1, 1, 1, 3, 3, 3,
- 3, 3, 3, 3, 5, 2, 2, 2, 2, 2,
- 2, 3, 1, 2, 3, 4, 3, 4, 1, 3,
- 4, 4, 4, 2, 8, 6, 8, 8, 6, 6,
- 6, 6, 6, 6, 6, 6, 8, 8, 8, 8,
- 1, 4, 1, 2, 1, 1, 0, 4, 4, 3,
- 2, 0, 1, 1, 1, 1, 2, 0, 1, 1,
- 2, 2, 2, 2, 2, 0, 3, 2, 2, 1,
- 1, 0, 1, 4, 2, 4, 2, 1, 1, 1,
- 2, 1, 1, 2, 5, 1, 1, 1, 6, 9,
- 6, 7, 10, 9, 6, 5,
-};
-short yydefred[] = { 92,
- 0, 0, 94, 95, 96, 93, 0, 91, 0, 0,
- 30, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 36, 0, 0, 0, 37, 0, 0, 0, 0,
- 0, 83, 0, 98, 0, 11, 0, 92, 0, 0,
- 0, 17, 18, 19, 0, 0, 98, 98, 0, 0,
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,
- 48, 49, 0, 0, 0, 0, 0, 0, 4, 0,
- 98, 98, 98, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 46,
- 47, 0, 0, 60, 0, 0, 0, 0, 0, 98,
- 98, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 99, 100, 0, 97, 52, 31,
- 27, 20, 0, 0, 0, 0, 29, 0, 0, 0,
- 0, 44, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 61, 62, 90, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 13, 63, 82, 0,
- 0, 98, 0, 0, 0, 0, 0, 0, 119, 118,
- 122, 0, 98, 0, 98, 10, 98, 0, 105, 0,
- 110, 0, 0, 21, 0, 58, 92, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 98, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 98, 98, 98, 98, 98, 8, 0, 0,
- 69, 0, 74, 0, 73, 0, 76, 0, 75, 0,
- 71, 72, 0, 66, 0, 70, 127, 126, 128, 0,
- 0, 0, 0, 0, 111, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 98, 0, 0, 0, 98, 98, 98, 0, 0, 0,
- 98, 68, 67, 78, 77, 80, 79, 0, 65, 0,
- 0, 0, 0, 0, 0, 125, 0, 0, 0, 131,
- 135, 0, 0, 0, 9, 98, 98, 0, 132, 0,
- 0, 98, 130, 134, 0, 133,
-};
-short yydgoto[] = { 1,
- 2, 7, 36, 74, 127, 37, 38, 39, 166, 52,
- 75, 188, 42, 43, 44, 45, 46, 54, 8, 128,
- 227, 189, 190, 191, 256, 250,
-};
-short yysindex[] = { 0,
- 0, -45, 0, 0, 0, 0, 4961, 0, -114, -98,
- 0, -11, 7, 7279, 10, 6, 17, 25, 45, -195,
- 62, 0, 5, 77, 83, 0, 7332, 7332, 5086, -252,
- -252, 0, 7332, 0, 5086, 0, -154, 0, 8, -41,
- 1605, 0, 0, 0, 118, -234, 0, 0, 6059, 7279,
- 5487, 0, 5843, 85, 7332, 7332, 75, 6108, 6154, 7332,
- 97, 7279, 7279, 7332, 7332, 5086, -73, -266, -73, 0,
- 0, 0, 26, -183, -39, 102, 106, 116, 0, -45,
- 0, 0, 0, 5086, 6219, 7332, 7332, 7332, 118, -133,
- 7332, 7332, 7332, 7332, 7332, 7332, 7332, -116, 5086, 0,
- 0, -183, -183, 0, 6289, 125, 5487, 166, 29, 0,
- 0, 6335, 1522, 7332, 128, 6381, 134, 6423, 6484, 7279,
- 141, 90, 6534, 6580, 0, 0, 5197, 0, 0, 0,
- 0, 0, -183, 5362, 5362, -206, 0, 1522, 1522, 1522,
- 1522, 0, -32, 395, 395, -73, -73, -73, -73, -252,
- -206, 5242, 5288, 0, 0, 0, 3391, 3391, -108, 1522,
- 7332, 7332, 7332, 7332, 6626, 145, 0, 0, 0, 7332,
- 7332, 0, 7279, 7279, 147, 148, 149, 7332, 0, 0,
- 0, 7332, 0, -102, 0, 0, 0, 7332, 0, -42,
- 0, 5553, -99, 0, 7332, 0, 0, 0, 7332, 7332,
- 31, 2565, 3715, 3794, 5752, 153, 6688, 0, 6017, 6749,
- -183, -38, -38, 5086, 5086, 2408, 7332, 7332, 4312, 104,
- -183, -183, 0, 0, 0, 0, 0, 0, 118, -45,
- 0, 6802, 0, 7332, 0, 7332, 0, 7332, 0, 7332,
- 0, 0, -86, 0, 7332, 0, 0, 0, 0, 7332,
- 7332, -37, -35, 6856, 0, 137, -74, 7332, 5598, -183,
- -183, -183, -183, -183, 156, 6898, 6953, 7014, 7067, 7128,
- 0, 7170, 7332, 7332, 0, 0, 0, 2698, 159, 7218,
- 0, 0, 0, 0, 0, 0, 0, -183, 0, 4312,
- 4312, 4312, 2408, -52, 5086, 0, -183, 5643, -71, 0,
- 0, 160, 2408, -33, 0, 0, 0, 161, 0, 4312,
- 4312, 0, 0, 0, 4312, 0,
-};
-short yyrindex[] = { 0,
- 0, 2363, 0, 0, 0, 0, 203, 0, 0, 0,
- 0, 56, 0, 3556, 0, 2835, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2231, 0, 2279, 1209,
- 3881, 0, 0, 0, 1818, 1664, 0, 0, 0, 173,
- 0, 0, 3764, 111, 0, 0, 381, 0, 0, 0,
- 0, 173, 129, 0, 0, 0, 564, 834, 889, 0,
- 0, 0, 436, 5689, 0, -200, -180, -156, 0, 2462,
- 0, 0, 0, 0, 0, 0, 0, 0, 2084, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 5689, 5689, 0, 0, 0, 0, -22, 0, 0,
- 0, 0, 2883, 0, 0, 0, 0, 0, 0, 173,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5689, 0, 0, 2181, 0, 3122, 3167, 3212,
- 3281, 0, 0, 1719, 1770, 943, 1016, 1286, 1340, 2780,
- 1394, 0, 0, 0, 0, 0, 0, 0, 0, 3489,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 12, 0, 0, 0, -29, 0, 0,
- 0, 46, 0, 0, 0, 0, 0, 67, 0, 0,
- 0, 0, 491, 0, 0, 0, 0, 0, 3604, 3676,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4374, 71, 103, 0, 0, 162, 126, 241, 0, 0,
- 5689, 4441, 0, 0, 0, 0, 0, 0, 2132, 2510,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 165, 0, 0, 0, 0, 0, 4486,
- 4751, 4796, 4841, 4887, 0, 0, 0, 0, 0, 0,
- 0, 0, 296, 357, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 5689, 0, 0,
- 0, 0, 184, 0, 0, 0, 5152, 0, 5954, 0,
- 0, 0, 184, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-};
-short yygindex[] = { 0,
- -20, 0, 0, 4150, -75, 0, 0, 0, 0, 19,
- -7, 4065, -19, -3, -1, 7551, 4353, -31, 0, 0,
- 0, -170, -161, 0, -270, 16,
-};
-#define YYTABLESIZE 7831
-short yytable[] = { 40,
- 81, 129, 84, 275, 96, 276, 303, 309, 47, 94,
- 92, 120, 93, 6, 95, 76, 226, 80, 16, 109,
- 97, 70, 302, 248, 48, 195, 152, 153, 49, 120,
- 91, 77, 308, 78, 100, 101, 271, 81, 98, 23,
- 81, 81, 81, 81, 81, 81, 50, 81, 257, 55,
- 32, 33, 87, 99, 255, 59, 58, 192, 81, 81,
- 81, 97, 81, 81, 59, 56, 100, 101, 106, 156,
- 87, 231, 111, 87, 232, 109, 136, 125, 126, 98,
- 121, 122, 82, 83, 60, 249, 123, 76, 17, 17,
- 61, 151, 59, 81, 81, 63, 59, 59, 59, 59,
- 59, 62, 59, 77, 123, 78, 79, 113, 18, 18,
- 86, 115, 81, 59, 59, 59, 64, 59, 59, 299,
- 300, 301, 65, 81, 81, 113, 193, 194, 111, 115,
- 81, 255, 19, 19, 114, 87, 120, 98, 167, 313,
- 314, 255, 130, 117, 316, 259, 131, 86, 59, 59,
- 86, 86, 86, 86, 96, 86, 132, 86, 142, 94,
- 92, 117, 93, 150, 95, 155, 121, 59, 86, 86,
- 86, 161, 86, 86, 125, 126, 230, 163, 59, 59,
- 91, 168, 169, 201, 121, 208, 214, 215, 216, 220,
- 83, 212, 213, 241, 258, 278, 282, 279, 295, 306,
- 307, 312, 1, 86, 86, 66, 252, 253, 27, 110,
- 28, 97, 298, 87, 3, 4, 5, 223, 224, 225,
- 112, 87, 86, 113, 112, 87, 247, 88, 251, 98,
- 120, 120, 120, 86, 86, 0, 82, 83, 0, 0,
- 0, 90, 0, 0, 0, 0, 0, 82, 83, 82,
- 83, 82, 83, 82, 83, 82, 83, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 16, 16, 81, 81,
- 294, 87, 87, 87, 81, 0, 87, 0, 0, 0,
- 81, 124, 81, 81, 81, 81, 81, 304, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 23, 81, 124,
- 81, 81, 81, 81, 81, 123, 123, 123, 32, 33,
- 0, 0, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 0, 0, 59, 59, 0, 113, 113, 113, 59,
- 115, 115, 115, 0, 0, 59, 114, 59, 59, 59,
- 59, 59, 0, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 0, 59, 114, 59, 59, 59, 59, 59,
- 0, 0, 117, 117, 117, 0, 0, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 0, 0, 86, 86,
- 54, 0, 0, 0, 86, 121, 121, 121, 0, 0,
- 86, 90, 86, 86, 86, 86, 86, 116, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 0, 86, 0,
- 86, 86, 86, 86, 86, 116, 0, 54, 0, 0,
- 54, 54, 54, 54, 54, 54, 0, 54, 12, 13,
- 0, 96, 0, 14, 15, 84, 94, 0, 54, 54,
- 0, 95, 54, 54, 0, 16, 0, 17, 18, 19,
- 0, 21, 0, 0, 0, 0, 22, 23, 24, 25,
- 85, 86, 0, 26, 0, 0, 30, 31, 32, 33,
- 0, 0, 84, 54, 54, 84, 84, 84, 84, 84,
- 84, 0, 84, 0, 0, 0, 0, 0, 97, 0,
- 22, 0, 54, 84, 84, 84, 0, 84, 84, 0,
- 124, 124, 124, 54, 54, 0, 98, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 22, 84, 84,
- 22, 22, 22, 22, 22, 22, 0, 22, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 22, 22,
- 22, 0, 22, 22, 0, 114, 114, 114, 84, 84,
- 0, 0, 0, 51, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 22, 22, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 51, 0, 22, 51, 51, 51, 51, 51, 51, 0,
- 51, 0, 0, 22, 22, 0, 116, 116, 116, 0,
- 0, 51, 51, 51, 0, 51, 51, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 0, 0, 54, 54,
- 0, 0, 0, 0, 54, 0, 51, 0, 0, 0,
- 54, 0, 54, 54, 54, 54, 54, 0, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 0, 54, 0,
- 54, 54, 54, 54, 54, 0, 51, 51, 0, 0,
- 0, 0, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 0, 0, 84, 84, 0, 0, 0, 0, 84,
- 0, 0, 0, 0, 0, 84, 0, 84, 84, 84,
- 84, 84, 0, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 0, 84, 0, 84, 84, 84, 84, 84,
- 0, 0, 0, 0, 0, 0, 0, 22, 22, 22,
- 22, 22, 22, 22, 22, 22, 0, 0, 22, 22,
- 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
- 22, 0, 22, 22, 22, 22, 22, 0, 22, 22,
- 0, 22, 22, 22, 22, 22, 22, 0, 22, 0,
- 22, 22, 22, 22, 22, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 51, 51, 51, 51, 51, 51, 51, 51, 51, 0,
- 0, 51, 51, 35, 0, 0, 0, 51, 0, 0,
- 0, 0, 0, 51, 0, 51, 51, 51, 51, 51,
- 0, 51, 51, 51, 51, 51, 51, 51, 51, 51,
- 0, 51, 0, 51, 51, 51, 51, 51, 0, 0,
- 35, 0, 0, 35, 35, 35, 35, 35, 35, 0,
- 35, 0, 0, 0, 0, 0, 0, 0, 50, 0,
- 0, 35, 35, 35, 0, 35, 35, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 50, 35, 35, 50, 50,
- 50, 50, 50, 50, 0, 50, 0, 0, 0, 0,
- 0, 0, 40, 0, 0, 35, 50, 50, 50, 0,
- 50, 50, 0, 0, 0, 0, 35, 35, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,
- 0, 50, 40, 40, 40, 40, 40, 40, 0, 40,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 40, 40, 40, 0, 40, 40, 0, 0, 0, 0,
- 0, 50, 50, 0, 0, 41, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 40, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 41, 0, 0, 41, 41, 41, 41, 41,
- 41, 0, 41, 0, 0, 40, 40, 0, 0, 0,
- 0, 0, 0, 41, 41, 41, 0, 41, 41, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 0,
- 0, 35, 35, 0, 0, 0, 0, 35, 41, 0,
- 0, 0, 0, 35, 0, 35, 35, 35, 35, 35,
- 0, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 0, 35, 0, 35, 0, 0, 35, 35, 41, 41,
- 0, 0, 0, 0, 0, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 0, 0, 50, 50, 0, 0,
- 0, 0, 50, 0, 0, 0, 0, 0, 50, 0,
- 50, 50, 50, 50, 50, 0, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 0, 50, 0, 50, 50,
- 50, 50, 50, 0, 0, 0, 0, 0, 0, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 14, 0,
- 40, 40, 0, 0, 0, 0, 40, 0, 0, 0,
- 0, 0, 40, 0, 40, 40, 40, 40, 40, 0,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 0,
- 40, 0, 40, 40, 40, 40, 40, 0, 14, 0,
- 0, 14, 0, 14, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
- 0, 0, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 0, 0, 41, 41, 42, 0, 0, 0, 41,
- 0, 0, 0, 0, 0, 41, 0, 41, 41, 41,
- 41, 41, 0, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 0, 41, 0, 41, 41, 41, 41, 41,
- 0, 0, 42, 0, 0, 42, 42, 42, 42, 42,
- 42, 14, 42, 0, 0, 0, 0, 0, 0, 43,
- 0, 0, 0, 42, 42, 42, 0, 42, 42, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 43, 0, 42, 43,
- 43, 43, 43, 43, 43, 0, 43, 0, 0, 0,
- 0, 0, 0, 34, 0, 0, 0, 43, 43, 43,
- 0, 43, 43, 0, 0, 0, 0, 0, 42, 42,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 34, 0, 43, 34, 34, 34, 34, 34, 34, 0,
- 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 34, 34, 34, 0, 34, 34, 0, 0, 0,
- 0, 0, 43, 43, 0, 14, 14, 14, 14, 14,
- 14, 14, 14, 0, 0, 0, 14, 14, 0, 0,
- 0, 0, 0, 0, 0, 0, 34, 34, 14, 0,
- 14, 14, 14, 14, 14, 0, 0, 0, 0, 14,
- 14, 14, 14, 0, 0, 34, 14, 0, 14, 14,
- 14, 14, 14, 0, 0, 0, 34, 34, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 0, 0, 42, 42, 0, 0, 0, 0, 42,
- 0, 66, 0, 0, 27, 42, 28, 42, 42, 42,
- 42, 42, 0, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 0, 42, 0, 42, 42, 42, 42, 42,
- 0, 0, 0, 0, 0, 0, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 0, 0, 43, 43, 0,
- 0, 0, 0, 43, 0, 0, 0, 0, 0, 43,
- 0, 43, 43, 43, 43, 43, 0, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 0, 43, 0, 43,
- 43, 43, 43, 43, 66, 0, 0, 27, 0, 28,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 0,
- 0, 34, 34, 35, 87, 0, 88, 34, 0, 0,
- 0, 0, 0, 34, 0, 34, 34, 34, 34, 34,
- 0, 34, 0, 0, 34, 34, 34, 34, 34, 34,
- 0, 34, 0, 34, 34, 34, 34, 34, 0, 0,
- 35, 0, 0, 35, 35, 35, 35, 35, 35, 0,
- 35, 0, 0, 0, 0, 0, 0, 0, 38, 0,
- 0, 35, 35, 35, 0, 35, 35, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 35, 35, 38, 38,
- 0, 38, 38, 38, 0, 0, 0, 0, 0, 39,
- 0, 0, 0, 0, 0, 35, 38, 38, 38, 0,
- 38, 38, 0, 0, 12, 13, 35, 35, 0, 14,
- 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 16, 0, 17, 18, 19, 0, 21, 0, 39,
- 39, 38, 39, 39, 39, 0, 0, 32, 0, 26,
- 0, 0, 30, 31, 32, 33, 0, 39, 39, 39,
- 0, 39, 39, 0, 0, 0, 0, 0, 0, 0,
- 0, 38, 38, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 32, 32, 0,
- 0, 32, 39, 0, 0, 0, 0, 12, 13, 0,
- 0, 0, 14, 15, 0, 32, 32, 32, 0, 32,
- 0, 0, 0, 0, 16, 0, 17, 18, 19, 0,
- 21, 0, 39, 39, 0, 22, 23, 24, 25, 85,
- 86, 0, 26, 0, 0, 30, 31, 32, 33, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 0,
- 0, 35, 35, 0, 0, 0, 0, 35, 0, 0,
- 32, 32, 0, 35, 0, 35, 35, 35, 35, 35,
- 0, 0, 35, 35, 35, 35, 35, 35, 35, 35,
- 0, 35, 0, 35, 0, 0, 35, 35, 0, 0,
- 0, 0, 0, 0, 0, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 0, 0, 38, 38, 0, 0,
- 0, 0, 38, 0, 0, 0, 0, 0, 38, 0,
- 38, 38, 38, 38, 38, 0, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 0, 38, 0, 38, 38,
- 38, 38, 38, 0, 0, 0, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 0, 0, 39, 39, 0,
- 0, 0, 0, 39, 0, 0, 0, 0, 0, 39,
- 0, 39, 39, 39, 39, 39, 0, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 0, 39, 0, 39,
- 39, 39, 39, 39, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 33, 0, 32, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 32, 0, 32,
- 32, 32, 32, 32, 0, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 0, 32, 0, 32, 32, 32,
- 32, 32, 0, 33, 33, 0, 0, 33, 0, 0,
- 0, 45, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 33, 33, 33, 0, 33, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 45, 45, 0, 0, 45, 33, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 0, 0, 0, 45,
- 45, 45, 0, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 33, 33, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 15, 45, 15, 0, 0, 0, 0,
- 12, 0, 0, 0, 0, 0, 0, 0, 0, 15,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 45, 45, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 12, 0, 0, 12, 0, 12, 0, 0, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
- 0, 7, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 0,
- 0, 33, 33, 12, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 33, 0, 33, 33, 33, 33, 33,
- 0, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 0, 33, 0, 33, 33, 33, 33, 33, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 0, 0, 45,
- 45, 0, 6, 0, 0, 6, 0, 6, 0, 0,
- 0, 45, 0, 45, 45, 45, 45, 45, 0, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 0, 45,
- 0, 45, 45, 45, 45, 45, 0, 15, 15, 15,
- 15, 15, 15, 15, 15, 0, 0, 66, 15, 15,
- 27, 0, 28, 0, 0, 0, 0, 0, 0, 0,
- 15, 5, 15, 15, 15, 15, 15, 0, 0, 0,
- 0, 15, 15, 15, 15, 0, 0, 0, 15, 0,
- 15, 15, 15, 15, 15, 6, 0, 12, 12, 12,
- 12, 0, 12, 12, 12, 0, 0, 0, 12, 12,
- 0, 5, 0, 0, 5, 0, 5, 0, 0, 2,
- 12, 0, 12, 12, 12, 12, 12, 0, 0, 0,
- 0, 12, 12, 12, 12, 0, 0, 0, 12, 0,
- 12, 12, 12, 12, 12, 7, 7, 7, 7, 7,
- 7, 7, 7, 0, 0, 0, 7, 7, 0, 2,
- 0, 0, 2, 0, 2, 0, 0, 0, 7, 0,
- 7, 7, 7, 7, 7, 0, 0, 0, 0, 7,
- 7, 7, 7, 0, 0, 0, 7, 0, 7, 7,
- 7, 7, 7, 0, 5, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 233, 0, 27, 234, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
- 6, 6, 0, 0, 0, 6, 6, 0, 0, 0,
- 6, 6, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 0, 6, 6, 6, 6, 6, 0,
- 0, 0, 0, 6, 6, 6, 6, 0, 0, 0,
- 6, 0, 6, 6, 6, 6, 6, 0, 0, 0,
- 12, 13, 0, 173, 174, 14, 15, 0, 0, 0,
- 0, 0, 178, 179, 180, 181, 182, 16, 0, 17,
- 18, 19, 0, 21, 184, 0, 0, 0, 22, 23,
- 24, 25, 0, 0, 0, 26, 0, 0, 30, 31,
- 32, 33, 0, 0, 0, 0, 0, 0, 5, 5,
- 5, 0, 0, 0, 5, 5, 0, 0, 0, 5,
- 5, 0, 0, 0, 0, 0, 0, 35, 0, 0,
- 27, 5, 28, 5, 5, 5, 5, 5, 0, 0,
- 0, 0, 5, 5, 5, 5, 293, 0, 0, 5,
- 0, 5, 5, 5, 5, 5, 2, 2, 2, 0,
- 0, 0, 2, 2, 0, 0, 0, 2, 2, 57,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 2, 2, 2, 2, 2, 0, 0, 0, 0,
- 2, 2, 2, 2, 0, 0, 0, 2, 0, 2,
- 2, 2, 2, 2, 0, 0, 57, 0, 0, 57,
- 57, 57, 57, 57, 57, 0, 57, 12, 13, 0,
- 0, 0, 14, 15, 53, 0, 0, 57, 57, 57,
- 0, 57, 57, 0, 16, 0, 17, 18, 19, 0,
- 21, 0, 0, 0, 0, 22, 23, 24, 25, 0,
- 0, 0, 26, 0, 0, 30, 31, 32, 33, 0,
- 0, 53, 57, 57, 53, 53, 53, 53, 53, 53,
- 0, 53, 55, 0, 0, 0, 0, 0, 0, 0,
- 0, 57, 53, 53, 0, 0, 53, 53, 0, 0,
- 0, 0, 57, 57, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
- 0, 0, 0, 55, 55, 0, 55, 53, 53, 55,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 55, 55, 55, 0, 55, 55, 53, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 11, 53, 53, 0,
- 12, 13, 0, 0, 0, 14, 15, 0, 0, 0,
- 0, 0, 0, 0, 0, 55, 55, 16, 0, 17,
- 18, 19, 0, 21, 0, 0, 0, 0, 22, 23,
- 24, 25, 0, 0, 55, 26, 0, 29, 30, 31,
- 32, 33, 0, 0, 0, 55, 55, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 0, 0, 57, 57, 0,
- 0, 0, 0, 57, 0, 0, 0, 0, 0, 57,
- 0, 57, 57, 57, 57, 57, 0, 57, 57, 57,
- 57, 0, 57, 57, 57, 57, 0, 57, 0, 57,
- 57, 57, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 53, 53, 53, 53, 53, 53, 53, 53, 53,
- 0, 0, 53, 53, 0, 0, 0, 0, 53, 0,
- 0, 0, 0, 0, 53, 0, 53, 53, 53, 53,
- 53, 28, 53, 53, 53, 53, 0, 53, 53, 53,
- 53, 0, 53, 0, 53, 53, 53, 0, 0, 55,
- 55, 55, 55, 55, 55, 0, 0, 55, 0, 0,
- 0, 0, 0, 0, 0, 0, 55, 0, 28, 0,
- 0, 0, 28, 28, 0, 28, 24, 55, 28, 0,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 28,
- 28, 28, 55, 28, 28, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 24, 0, 0, 0, 24, 24, 0,
- 24, 26, 0, 24, 28, 28, 0, 0, 0, 0,
- 0, 0, 0, 0, 24, 24, 24, 0, 24, 24,
- 0, 0, 0, 28, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 28, 28, 0, 0, 26, 0,
- 0, 0, 26, 26, 0, 26, 0, 0, 26, 24,
- 24, 0, 0, 0, 0, 0, 0, 0, 0, 26,
- 26, 26, 0, 26, 26, 0, 0, 0, 24, 0,
- 25, 0, 0, 0, 0, 0, 0, 0, 0, 24,
- 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 26, 26, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 25, 0, 0,
- 0, 25, 25, 26, 25, 0, 0, 25, 0, 0,
- 0, 0, 0, 0, 26, 26, 0, 0, 25, 25,
- 25, 0, 25, 25, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 25, 25, 0, 0, 0, 28, 28,
- 28, 28, 28, 28, 0, 0, 28, 0, 0, 0,
- 0, 0, 25, 0, 0, 28, 0, 0, 0, 0,
- 0, 0, 0, 25, 25, 0, 28, 0, 0, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 0, 0,
- 0, 28, 0, 24, 24, 24, 24, 24, 24, 0,
- 66, 24, 0, 27, 0, 28, 0, 0, 0, 0,
- 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 24, 0, 0, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 0, 0, 0, 24, 0, 26, 26,
- 26, 26, 26, 26, 0, 0, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 26, 0, 0, 56, 0,
- 0, 0, 0, 0, 0, 0, 26, 0, 0, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
- 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 56, 0, 0, 0, 56,
- 56, 0, 56, 0, 0, 56, 0, 25, 25, 25,
- 25, 25, 25, 0, 0, 25, 56, 56, 56, 0,
- 56, 56, 0, 0, 25, 87, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 0, 0, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 0, 0, 0,
- 25, 56, 56, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 87, 0, 0, 0, 87, 87, 0, 87,
- 56, 0, 87, 88, 0, 0, 0, 0, 0, 0,
- 0, 56, 56, 87, 87, 87, 0, 87, 87, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 0, 0, 0, 88, 88, 0, 88, 87, 87,
- 88, 125, 126, 12, 13, 0, 0, 0, 14, 15,
- 0, 88, 88, 88, 0, 88, 88, 87, 0, 0,
- 16, 0, 17, 18, 19, 89, 21, 0, 87, 87,
- 0, 22, 23, 24, 25, 0, 0, 0, 26, 0,
- 0, 30, 31, 32, 33, 0, 88, 88, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 89, 0, 0, 88, 89, 89, 0, 89,
- 0, 0, 89, 0, 0, 0, 88, 88, 0, 0,
- 0, 0, 0, 89, 89, 89, 0, 89, 89, 0,
- 0, 0, 0, 0, 0, 56, 56, 56, 56, 56,
- 56, 0, 0, 56, 66, 235, 0, 27, 236, 28,
- 0, 0, 56, 85, 0, 0, 0, 0, 89, 89,
- 0, 0, 0, 56, 0, 0, 56, 56, 56, 56,
- 56, 56, 56, 56, 56, 0, 0, 89, 56, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 89, 89,
- 85, 0, 0, 0, 85, 85, 0, 0, 0, 0,
- 85, 0, 87, 87, 87, 87, 87, 87, 0, 0,
- 87, 85, 85, 85, 0, 85, 85, 0, 0, 87,
- 0, 0, 0, 66, 237, 0, 27, 238, 28, 0,
- 87, 0, 0, 87, 87, 87, 0, 0, 0, 0,
- 87, 87, 0, 0, 0, 87, 85, 85, 0, 0,
- 88, 88, 88, 88, 88, 88, 0, 0, 88, 0,
- 0, 0, 0, 0, 0, 85, 0, 88, 0, 0,
- 16, 0, 0, 0, 0, 0, 85, 85, 88, 0,
- 0, 88, 88, 88, 0, 0, 0, 0, 88, 88,
- 0, 0, 0, 88, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,
- 0, 16, 16, 0, 16, 0, 0, 16, 0, 0,
- 0, 0, 89, 89, 89, 89, 89, 89, 16, 16,
- 89, 0, 0, 16, 0, 0, 0, 0, 0, 89,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 89, 0, 0, 89, 89, 89, 0, 0, 0, 0,
- 89, 89, 0, 16, 16, 89, 0, 12, 13, 0,
- 0, 0, 14, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 16, 0, 17, 18, 19, 0,
- 21, 0, 0, 16, 16, 22, 23, 24, 25, 0,
- 0, 0, 26, 0, 0, 30, 31, 32, 33, 0,
- 85, 85, 85, 85, 85, 85, 0, 0, 85, 0,
- 0, 0, 0, 0, 0, 0, 0, 85, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 85, 0,
- 0, 85, 85, 85, 0, 0, 12, 13, 85, 85,
- 0, 14, 15, 85, 0, 0, 0, 0, 0, 0,
- 0, 41, 0, 16, 0, 17, 18, 19, 53, 21,
- 0, 0, 0, 0, 22, 23, 24, 25, 0, 0,
- 0, 26, 0, 41, 30, 31, 32, 33, 0, 41,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 105, 53, 108, 0, 0, 0, 112,
- 113, 0, 116, 118, 119, 0, 53, 53, 123, 124,
- 41, 0, 0, 0, 0, 0, 0, 16, 16, 16,
- 16, 16, 16, 0, 0, 16, 0, 0, 41, 138,
- 139, 140, 141, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 41, 0, 16, 0, 0, 16, 16,
- 16, 108, 0, 0, 0, 0, 0, 0, 160, 0,
- 16, 0, 0, 0, 53, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 102, 103, 41, 41,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 199, 200, 0, 0, 202, 203, 204, 205, 207,
- 133, 134, 135, 0, 209, 210, 0, 53, 53, 0,
- 0, 0, 217, 0, 0, 0, 218, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 157,
- 158, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 41, 41,
- 254, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 266, 0, 267, 0,
- 268, 0, 269, 0, 270, 0, 0, 0, 0, 272,
- 0, 0, 0, 0, 273, 274, 0, 0, 0, 0,
- 0, 211, 280, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 219, 0, 221, 0, 222, 0, 0, 0,
- 0, 0, 41, 0, 0, 0, 0, 0, 0, 0,
- 0, 66, 0, 0, 27, 0, 28, 243, 0, 41,
- 0, 0, 0, 0, 0, 0, 0, 0, 57, 0,
- 187, 0, 260, 261, 262, 263, 264, 0, 0, 68,
- 68, 0, 71, 72, 0, 68, 0, 0, 0, 0,
- 0, 0, 0, 68, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 68, 0, 0, 0, 0,
- 0, 0, 0, 109, 0, 0, 109, 0, 109, 0,
- 288, 0, 0, 0, 290, 291, 292, 0, 0, 0,
- 297, 0, 109, 0, 185, 0, 0, 0, 0, 0,
- 0, 0, 0, 68, 68, 68, 68, 68, 68, 68,
- 0, 0, 0, 0, 0, 310, 311, 68, 0, 0,
- 68, 315, 0, 0, 68, 68, 0, 0, 68, 0,
- 68, 68, 0, 0, 0, 68, 68, 0, 0, 0,
- 108, 0, 0, 108, 0, 108, 0, 0, 0, 0,
- 68, 68, 68, 68, 0, 0, 109, 0, 109, 108,
- 0, 0, 196, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 68, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 102, 0, 0, 102, 0,
- 102, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 0, 0, 0, 102, 0, 0, 68, 0, 0,
- 0, 68, 68, 0, 68, 68, 68, 68, 0, 68,
- 0, 68, 68, 108, 0, 108, 0, 0, 0, 68,
- 68, 172, 125, 126, 12, 13, 0, 173, 174, 14,
- 15, 175, 0, 176, 177, 0, 178, 179, 180, 181,
- 182, 16, 183, 17, 18, 19, 0, 21, 184, 0,
- 0, 0, 22, 23, 24, 25, 68, 0, 102, 26,
- 102, 0, 30, 31, 32, 33, 0, 0, 68, 68,
- 68, 68, 68, 0, 68, 68, 68, 0, 0, 0,
- 0, 0, 68, 109, 0, 0, 109, 109, 0, 109,
- 109, 109, 109, 109, 109, 109, 109, 0, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 0, 109,
- 109, 0, 0, 0, 109, 109, 109, 109, 0, 0,
- 0, 109, 0, 0, 109, 109, 109, 109, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 108, 0, 0, 108, 108, 0, 108, 108, 108, 108,
- 108, 108, 108, 108, 0, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 108, 0, 108, 108, 0, 0,
- 0, 108, 108, 108, 108, 0, 0, 0, 108, 0,
- 0, 108, 108, 108, 108, 102, 0, 0, 102, 102,
- 0, 102, 102, 102, 102, 102, 102, 102, 102, 0,
- 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
- 0, 102, 102, 0, 0, 0, 102, 102, 102, 102,
- 0, 0, 0, 102, 0, 0, 102, 102, 102, 102,
- 103, 0, 0, 103, 0, 103, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 104, 0, 0, 104, 0,
- 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 104, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 103, 0, 103, 0, 0, 0, 0,
- 101, 0, 0, 101, 0, 101, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 101,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 104, 0,
- 104, 0, 0, 0, 0, 0, 107, 0, 0, 107,
- 0, 107, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 107, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 101, 0, 101, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 35, 0, 0, 27, 0, 28, 0, 0, 0, 107,
- 103, 107, 0, 103, 103, 0, 103, 103, 103, 103,
- 103, 103, 103, 103, 0, 103, 103, 103, 103, 103,
- 103, 103, 103, 103, 103, 0, 103, 103, 0, 0,
- 0, 103, 103, 103, 103, 0, 0, 0, 103, 0,
- 0, 103, 103, 103, 103, 104, 0, 0, 104, 104,
- 0, 104, 104, 104, 104, 104, 104, 104, 104, 0,
- 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
- 0, 104, 104, 34, 0, 0, 104, 104, 104, 104,
- 0, 0, 0, 104, 0, 0, 104, 104, 104, 104,
- 101, 0, 0, 101, 101, 0, 101, 101, 101, 101,
- 101, 101, 101, 101, 0, 101, 101, 101, 101, 101,
- 101, 101, 101, 101, 101, 35, 101, 101, 27, 0,
- 28, 101, 101, 101, 101, 0, 0, 0, 101, 0,
- 0, 101, 101, 101, 101, 0, 107, 0, 0, 107,
- 107, 0, 107, 107, 107, 107, 107, 107, 107, 107,
- 0, 107, 107, 107, 107, 107, 107, 107, 107, 107,
- 107, 0, 107, 107, 0, 0, 0, 107, 107, 107,
- 107, 0, 0, 0, 107, 0, 0, 107, 107, 107,
- 107, 136, 0, 0, 136, 0, 136, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 136, 0, 0, 0, 0, 0, 0, 9, 10, 11,
- 0, 0, 0, 12, 13, 0, 0, 0, 14, 15,
- 0, 0, 0, 0, 0, 0, 66, 0, 0, 27,
- 16, 28, 17, 18, 19, 20, 21, 0, 0, 0,
- 0, 22, 23, 24, 25, 187, 0, 0, 26, 0,
- 29, 30, 31, 32, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 136, 0, 136, 0, 0, 0,
- 0, 66, 0, 0, 27, 0, 28, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 187, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 185,
- 0, 186, 0, 0, 0, 0, 0, 66, 0, 0,
- 27, 0, 28, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 11, 0, 187, 0, 12, 13,
- 0, 0, 0, 14, 15, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 185, 16, 197, 17, 18, 19,
- 0, 21, 0, 0, 0, 0, 22, 23, 24, 25,
- 0, 0, 0, 26, 0, 29, 30, 31, 32, 33,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 35, 0, 0, 27, 0, 28, 0, 0, 0,
- 185, 136, 198, 0, 136, 136, 0, 136, 136, 136,
- 136, 136, 136, 136, 136, 0, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 0, 136, 136, 0,
- 0, 0, 136, 136, 136, 136, 0, 0, 0, 136,
- 0, 0, 136, 136, 136, 136, 172, 0, 0, 12,
- 13, 0, 173, 174, 14, 15, 175, 0, 176, 177,
- 0, 178, 179, 180, 181, 182, 16, 183, 17, 18,
- 19, 0, 21, 184, 0, 0, 0, 22, 23, 24,
- 25, 0, 0, 0, 26, 0, 0, 30, 31, 32,
- 33, 172, 0, 0, 12, 13, 0, 173, 174, 14,
- 15, 175, 0, 176, 177, 0, 178, 179, 180, 181,
- 182, 16, 183, 17, 18, 19, 107, 21, 184, 27,
- 0, 28, 22, 23, 24, 25, 0, 0, 0, 26,
- 0, 0, 30, 31, 32, 33, 0, 172, 0, 0,
- 12, 13, 0, 173, 174, 14, 15, 175, 0, 176,
- 177, 0, 178, 179, 180, 181, 182, 16, 183, 17,
- 18, 19, 0, 21, 184, 0, 0, 0, 22, 23,
- 24, 25, 0, 0, 0, 26, 0, 0, 30, 31,
- 32, 33, 66, 0, 0, 27, 0, 28, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 187, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 0, 125, 126, 12, 13, 0, 0, 0, 14,
- 15, 0, 0, 0, 0, 0, 0, 66, 0, 0,
- 27, 16, 28, 17, 18, 19, 0, 21, 0, 0,
- 0, 0, 22, 23, 24, 25, 187, 0, 0, 26,
- 0, 29, 30, 31, 32, 33, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 185, 0, 228, 0, 0,
- 0, 0, 66, 0, 0, 27, 0, 28, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 187, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 185, 0, 281, 0, 0, 0, 0, 0, 106, 0,
- 0, 106, 0, 106, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 11, 0, 106, 0, 12,
- 13, 0, 0, 0, 14, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 185, 16, 305, 17, 18,
- 19, 0, 21, 0, 0, 0, 0, 22, 23, 24,
- 25, 0, 0, 0, 26, 0, 29, 30, 31, 32,
- 33, 66, 239, 0, 27, 240, 28, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 106, 172, 106, 0, 12, 13, 0, 173, 174,
- 14, 15, 175, 0, 176, 177, 0, 178, 179, 180,
- 181, 182, 16, 183, 17, 18, 19, 0, 21, 184,
- 0, 0, 0, 22, 23, 24, 25, 0, 0, 0,
- 26, 0, 0, 30, 31, 32, 33, 172, 0, 0,
- 12, 13, 0, 173, 174, 14, 15, 175, 0, 176,
- 177, 0, 178, 179, 180, 181, 182, 16, 183, 17,
- 18, 19, 66, 21, 184, 27, 110, 28, 22, 23,
- 24, 25, 0, 0, 0, 26, 0, 0, 30, 31,
- 32, 33, 172, 0, 0, 12, 13, 0, 173, 174,
- 14, 15, 175, 0, 176, 177, 0, 178, 179, 180,
- 181, 182, 16, 183, 17, 18, 19, 0, 21, 184,
- 0, 0, 0, 22, 23, 24, 25, 0, 0, 0,
- 26, 0, 0, 30, 31, 32, 33, 0, 106, 0,
- 0, 106, 106, 0, 106, 106, 106, 106, 106, 0,
- 106, 106, 0, 106, 106, 106, 106, 106, 106, 106,
- 106, 106, 106, 0, 106, 106, 0, 0, 0, 106,
- 106, 106, 106, 0, 0, 0, 106, 0, 0, 106,
- 106, 106, 106, 129, 0, 0, 129, 0, 129, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 129, 0, 12, 13, 0, 0, 0, 14,
- 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 16, 0, 17, 18, 19, 0, 21, 0, 0,
- 0, 0, 22, 23, 24, 25, 0, 0, 0, 26,
- 0, 0, 30, 31, 32, 33, 66, 244, 0, 27,
- 245, 28, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 129, 0, 129, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 104,
- 0, 27, 0, 28, 0, 12, 13, 0, 0, 0,
- 14, 15, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 17, 18, 19, 0, 21, 0,
- 0, 0, 0, 22, 23, 24, 25, 0, 0, 0,
- 26, 0, 0, 30, 31, 32, 33, 66, 0, 0,
- 27, 0, 28, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66, 0, 0, 27, 0, 28, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 129, 0, 0, 129, 129, 0, 129,
- 129, 129, 129, 129, 0, 129, 129, 0, 129, 129,
- 129, 129, 129, 129, 129, 129, 129, 129, 0, 129,
- 129, 0, 0, 0, 129, 129, 129, 129, 0, 0,
- 0, 129, 0, 0, 129, 129, 129, 129, 66, 0,
- 0, 27, 0, 28, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
- 13, 0, 0, 0, 14, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 16, 0, 17, 18,
- 19, 0, 21, 0, 0, 0, 0, 22, 23, 24,
- 25, 0, 0, 0, 26, 0, 0, 30, 31, 32,
- 33, 12, 13, 0, 0, 0, 14, 15, 66, 154,
- 0, 27, 0, 28, 0, 0, 0, 0, 16, 0,
- 17, 18, 19, 0, 21, 0, 0, 0, 0, 22,
- 23, 24, 25, 0, 0, 0, 26, 0, 0, 30,
- 31, 32, 33, 0, 0, 0, 115, 0, 0, 0,
- 12, 13, 0, 0, 66, 14, 15, 27, 159, 28,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 17,
- 18, 19, 0, 21, 0, 0, 0, 0, 22, 23,
- 24, 25, 0, 0, 0, 26, 0, 0, 30, 31,
- 32, 33, 117, 0, 0, 0, 12, 13, 0, 0,
- 66, 14, 15, 27, 162, 28, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 17, 18, 19, 0, 21,
- 0, 0, 0, 0, 22, 23, 24, 25, 0, 0,
- 0, 26, 0, 0, 30, 31, 32, 33, 0, 0,
- 0, 0, 66, 0, 0, 27, 164, 28, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 137, 0, 0,
- 0, 12, 13, 0, 0, 0, 14, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 17, 18, 19, 0, 21, 0, 0, 0, 0, 22,
- 23, 24, 25, 0, 0, 0, 26, 0, 0, 30,
- 31, 32, 33, 66, 0, 0, 27, 165, 28, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 13, 0, 0, 0, 14, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 17, 18, 19, 66, 21, 0, 27, 170, 28, 22,
- 23, 24, 25, 0, 0, 0, 26, 0, 0, 30,
- 31, 32, 33, 0, 0, 0, 0, 12, 13, 0,
- 0, 0, 14, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 16, 0, 17, 18, 19, 66,
- 21, 0, 27, 171, 28, 22, 23, 24, 25, 0,
- 0, 0, 26, 0, 0, 30, 31, 32, 33, 0,
- 0, 0, 0, 12, 13, 0, 0, 0, 14, 15,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 16, 0, 17, 18, 19, 66, 21, 0, 27, 0,
- 28, 22, 23, 24, 25, 0, 0, 0, 26, 0,
- 0, 30, 31, 32, 33, 12, 13, 0, 0, 0,
- 14, 15, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 17, 18, 19, 0, 21, 0,
- 0, 0, 0, 22, 23, 24, 25, 0, 0, 0,
- 26, 0, 0, 30, 31, 32, 33, 66, 242, 0,
- 27, 0, 28, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 13, 0, 0,
- 0, 14, 15, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 17, 18, 19, 0, 21,
- 0, 0, 0, 0, 22, 23, 24, 25, 0, 0,
- 0, 26, 0, 0, 30, 31, 32, 33, 66, 246,
- 0, 27, 0, 28, 0, 0, 12, 13, 0, 0,
- 0, 14, 15, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 17, 18, 19, 0, 21,
- 0, 0, 0, 0, 22, 23, 24, 25, 0, 0,
- 0, 26, 0, 0, 30, 31, 32, 33, 0, 0,
- 0, 66, 12, 13, 27, 0, 28, 14, 15, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 17, 18, 19, 0, 21, 0, 0, 0, 0,
- 22, 23, 24, 25, 0, 0, 0, 26, 0, 0,
- 30, 31, 32, 33, 206, 0, 0, 0, 12, 13,
- 0, 0, 0, 14, 15, 66, 277, 0, 27, 0,
- 28, 0, 0, 0, 0, 16, 0, 17, 18, 19,
- 0, 21, 0, 0, 0, 0, 22, 23, 24, 25,
- 0, 0, 0, 26, 0, 0, 30, 31, 32, 33,
- 0, 0, 0, 0, 0, 0, 0, 66, 283, 0,
- 27, 0, 28, 0, 0, 0, 0, 0, 0, 0,
- 12, 13, 0, 0, 0, 14, 15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 17,
- 18, 19, 0, 21, 0, 0, 0, 0, 22, 23,
- 24, 25, 0, 0, 0, 26, 0, 0, 30, 31,
- 32, 33, 66, 284, 0, 27, 0, 28, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 13, 0, 0, 0, 14, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 17, 18, 19, 0, 21, 0, 0, 0, 0, 22,
- 23, 24, 25, 0, 0, 0, 26, 0, 0, 30,
- 31, 32, 33, 66, 285, 0, 27, 0, 28, 0,
- 265, 0, 0, 0, 12, 13, 0, 0, 0, 14,
- 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 16, 0, 17, 18, 19, 0, 21, 0, 0,
- 0, 0, 22, 23, 24, 25, 0, 0, 0, 26,
- 0, 0, 30, 31, 32, 33, 66, 286, 0, 27,
- 0, 28, 0, 0, 0, 0, 0, 0, 12, 13,
- 0, 0, 0, 14, 15, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 16, 0, 17, 18, 19,
- 0, 21, 0, 0, 0, 0, 22, 23, 24, 25,
- 0, 0, 0, 26, 0, 0, 30, 31, 32, 33,
- 12, 13, 0, 0, 0, 14, 15, 66, 287, 0,
- 27, 0, 28, 0, 0, 0, 0, 16, 0, 17,
- 18, 19, 0, 21, 0, 0, 0, 0, 22, 23,
- 24, 25, 0, 0, 0, 26, 0, 0, 30, 31,
- 32, 33, 0, 0, 0, 0, 0, 0, 0, 66,
- 289, 0, 27, 0, 28, 12, 13, 0, 0, 0,
- 14, 15, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 17, 18, 19, 0, 21, 0,
- 0, 0, 0, 22, 23, 24, 25, 0, 0, 0,
- 26, 0, 0, 30, 31, 32, 33, 66, 0, 0,
- 27, 0, 28, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 13, 0, 0,
- 0, 14, 15, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 17, 18, 19, 0, 21,
- 0, 0, 0, 0, 22, 23, 24, 25, 0, 0,
- 296, 26, 0, 0, 30, 31, 32, 33, 51, 0,
- 0, 27, 0, 28, 0, 0, 0, 0, 0, 12,
- 13, 0, 0, 0, 14, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 16, 0, 17, 18,
- 19, 0, 21, 0, 0, 0, 0, 22, 23, 24,
- 25, 0, 0, 0, 26, 0, 0, 30, 31, 32,
- 33, 66, 0, 0, 27, 0, 28, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 12, 13, 0, 0, 0, 14, 15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 17,
- 18, 19, 0, 21, 0, 0, 0, 0, 22, 23,
- 24, 25, 0, 0, 0, 26, 0, 0, 30, 31,
- 32, 33, 12, 13, 0, 0, 0, 14, 15, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 17, 18, 19, 0, 21, 0, 0, 0, 0,
- 22, 23, 24, 25, 0, 0, 0, 26, 0, 0,
- 30, 31, 32, 33, 0, 0, 0, 0, 0, 0,
- 12, 13, 0, 0, 0, 14, 15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 17,
- 18, 19, 0, 21, 0, 0, 0, 0, 22, 23,
- 24, 25, 0, 0, 0, 26, 0, 0, 30, 31,
- 32, 33, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 13, 0, 0, 0, 14, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 17, 18, 19, 0, 21, 0, 0, 0, 0, 22,
- 23, 24, 25, 0, 0, 0, 26, 67, 69, 30,
- 31, 32, 33, 73, 0, 0, 0, 0, 0, 0,
- 0, 89, 0, 0, 12, 13, 0, 0, 0, 14,
- 15, 0, 0, 89, 0, 0, 0, 0, 0, 0,
- 0, 16, 0, 17, 18, 19, 0, 21, 0, 0,
- 0, 0, 22, 23, 24, 25, 0, 0, 0, 26,
- 0, 0, 30, 31, 32, 33, 0, 0, 0, 0,
- 0, 143, 144, 145, 146, 147, 148, 149, 0, 0,
- 0, 0, 0, 0, 0, 89, 0, 0, 89, 0,
- 0, 0, 89, 89, 0, 0, 89, 0, 89, 89,
- 0, 0, 0, 89, 89, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 89, 89,
- 89, 89, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 89, 0,
- 0, 0, 0, 0, 0, 229, 0, 0, 0, 89,
- 89, 0, 89, 89, 89, 89, 0, 89, 0, 89,
- 89, 0, 0, 0, 0, 0, 0, 89, 89, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 89, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 89, 89, 89, 89,
- 89, 0, 89, 89, 89, 0, 0, 0, 0, 0,
- 89,
-};
-short yycheck[] = { 7,
- 0, 41, 44, 41, 37, 41, 59, 41, 123, 42,
- 43, 41, 45, 59, 47, 35, 59, 38, 41, 51,
- 94, 29, 293, 62, 123, 58, 102, 103, 40, 59,
- 63, 35, 303, 35, 301, 302, 123, 37, 112, 292,
- 40, 41, 42, 43, 44, 45, 40, 47, 219, 40,
- 303, 304, 41, 288, 216, 0, 40, 133, 58, 59,
- 60, 94, 62, 63, 40, 60, 301, 302, 50, 41,
- 59, 41, 44, 62, 44, 107, 84, 261, 262, 112,
- 62, 63, 289, 290, 40, 124, 41, 107, 289, 290,
- 286, 99, 37, 93, 94, 91, 41, 42, 43, 44,
- 45, 40, 47, 107, 59, 107, 261, 41, 289, 290,
- 0, 41, 112, 58, 59, 60, 40, 62, 63, 290,
- 291, 292, 40, 123, 124, 59, 134, 135, 44, 59,
- 123, 293, 289, 290, 60, 124, 40, 112, 120, 310,
- 311, 303, 41, 41, 315, 221, 41, 37, 93, 94,
- 40, 41, 42, 43, 37, 45, 41, 47, 292, 42,
- 43, 59, 45, 280, 47, 41, 41, 112, 58, 59,
- 60, 44, 62, 63, 261, 262, 197, 44, 123, 124,
- 63, 41, 93, 292, 59, 41, 40, 40, 40, 292,
- 290, 173, 174, 41, 91, 59, 41, 272, 40, 271,
- 41, 41, 0, 93, 94, 40, 214, 215, 43, 44,
- 45, 94, 288, 41, 260, 261, 262, 260, 261, 262,
- 59, 93, 112, 59, 41, 60, 265, 62, 213, 112,
- 260, 261, 262, 123, 124, -1, 289, 290, -1, -1,
- -1, 274, -1, -1, -1, -1, -1, 289, 290, 289,
- 290, 289, 290, 289, 290, 289, 290, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, 289, 290, 268, 269,
- 278, 260, 261, 262, 274, -1, 265, -1, -1, -1,
- 280, 41, 282, 283, 284, 285, 286, 295, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 292, 298, 59,
- 300, 301, 302, 303, 304, 260, 261, 262, 303, 304,
- -1, -1, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, -1, -1, 268, 269, -1, 260, 261, 262, 274,
- 260, 261, 262, -1, -1, 280, 41, 282, 283, 284,
- 285, 286, -1, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, -1, 298, 59, 300, 301, 302, 303, 304,
- -1, -1, 260, 261, 262, -1, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, -1, -1, 268, 269,
- 0, -1, -1, -1, 274, 260, 261, 262, -1, -1,
- 280, 274, 282, 283, 284, 285, 286, 41, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, -1, 298, -1,
- 300, 301, 302, 303, 304, 59, -1, 37, -1, -1,
- 40, 41, 42, 43, 44, 45, -1, 47, 263, 264,
- -1, 37, -1, 268, 269, 0, 42, -1, 58, 59,
- -1, 47, 62, 63, -1, 280, -1, 282, 283, 284,
- -1, 286, -1, -1, -1, -1, 291, 292, 293, 294,
- 295, 296, -1, 298, -1, -1, 301, 302, 303, 304,
- -1, -1, 37, 93, 94, 40, 41, 42, 43, 44,
- 45, -1, 47, -1, -1, -1, -1, -1, 94, -1,
- 0, -1, 112, 58, 59, 60, -1, 62, 63, -1,
- 260, 261, 262, 123, 124, -1, 112, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 37, 93, 94,
- 40, 41, 42, 43, 44, 45, -1, 47, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 58, 59,
- 60, -1, 62, 63, -1, 260, 261, 262, 123, 124,
- -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, 94, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 37, -1, 112, 40, 41, 42, 43, 44, 45, -1,
- 47, -1, -1, 123, 124, -1, 260, 261, 262, -1,
- -1, 58, 59, 60, -1, 62, 63, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, -1, -1, 268, 269,
- -1, -1, -1, -1, 274, -1, 93, -1, -1, -1,
- 280, -1, 282, 283, 284, 285, 286, -1, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, -1, 298, -1,
- 300, 301, 302, 303, 304, -1, 123, 124, -1, -1,
- -1, -1, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, -1, -1, 268, 269, -1, -1, -1, -1, 274,
- -1, -1, -1, -1, -1, 280, -1, 282, 283, 284,
- 285, 286, -1, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, -1, 298, -1, 300, 301, 302, 303, 304,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, -1, -1, 268, 269,
- -1, -1, -1, -1, 274, -1, -1, -1, -1, -1,
- 280, -1, 282, 283, 284, 285, 286, -1, 288, 289,
- -1, 291, 292, 293, 294, 295, 296, -1, 298, -1,
- 300, 301, 302, 303, 304, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, -1,
- -1, 268, 269, 0, -1, -1, -1, 274, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- -1, 298, -1, 300, 301, 302, 303, 304, -1, -1,
- 37, -1, -1, 40, 41, 42, 43, 44, 45, -1,
- 47, -1, -1, -1, -1, -1, -1, -1, 0, -1,
- -1, 58, 59, 60, -1, 62, 63, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 37, 93, 94, 40, 41,
- 42, 43, 44, 45, -1, 47, -1, -1, -1, -1,
- -1, -1, 0, -1, -1, 112, 58, 59, 60, -1,
- 62, 63, -1, -1, -1, -1, 123, 124, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 37,
- -1, 93, 40, 41, 42, 43, 44, 45, -1, 47,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 58, 59, 60, -1, 62, 63, -1, -1, -1, -1,
- -1, 123, 124, -1, -1, 0, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 93, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 37, -1, -1, 40, 41, 42, 43, 44,
- 45, -1, 47, -1, -1, 123, 124, -1, -1, -1,
- -1, -1, -1, 58, 59, 60, -1, 62, 63, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, -1,
- -1, 268, 269, -1, -1, -1, -1, 274, 93, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- -1, 298, -1, 300, -1, -1, 303, 304, 123, 124,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, -1, -1, 268, 269, -1, -1,
- -1, -1, 274, -1, -1, -1, -1, -1, 280, -1,
- 282, 283, 284, 285, 286, -1, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, -1, 298, -1, 300, 301,
- 302, 303, 304, -1, -1, -1, -1, -1, -1, 257,
- 258, 259, 260, 261, 262, 263, 264, 265, 0, -1,
- 268, 269, -1, -1, -1, -1, 274, -1, -1, -1,
- -1, -1, 280, -1, 282, 283, 284, 285, 286, -1,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, -1,
- 298, -1, 300, 301, 302, 303, 304, -1, 40, -1,
- -1, 43, -1, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
- -1, -1, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, -1, -1, 268, 269, 0, -1, -1, -1, 274,
- -1, -1, -1, -1, -1, 280, -1, 282, 283, 284,
- 285, 286, -1, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, -1, 298, -1, 300, 301, 302, 303, 304,
- -1, -1, 37, -1, -1, 40, 41, 42, 43, 44,
- 45, 123, 47, -1, -1, -1, -1, -1, -1, 0,
- -1, -1, -1, 58, 59, 60, -1, 62, 63, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 37, -1, 93, 40,
- 41, 42, 43, 44, 45, -1, 47, -1, -1, -1,
- -1, -1, -1, 0, -1, -1, -1, 58, 59, 60,
- -1, 62, 63, -1, -1, -1, -1, -1, 123, 124,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 37, -1, 93, 40, 41, 42, 43, 44, 45, -1,
- 47, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 58, 59, 60, -1, 62, 63, -1, -1, -1,
- -1, -1, 123, 124, -1, 257, 258, 259, 260, 261,
- 262, 263, 264, -1, -1, -1, 268, 269, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, 94, 280, -1,
- 282, 283, 284, 285, 286, -1, -1, -1, -1, 291,
- 292, 293, 294, -1, -1, 112, 298, -1, 300, 301,
- 302, 303, 304, -1, -1, -1, 123, 124, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, -1, -1, 268, 269, -1, -1, -1, -1, 274,
- -1, 40, -1, -1, 43, 280, 45, 282, 283, 284,
- 285, 286, -1, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, -1, 298, -1, 300, 301, 302, 303, 304,
- -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, -1, -1, 268, 269, -1,
- -1, -1, -1, 274, -1, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, 285, 286, -1, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, -1, 298, -1, 300,
- 301, 302, 303, 304, 40, -1, -1, 43, -1, 45,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, -1,
- -1, 268, 269, 0, 60, -1, 62, 274, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, 288, -1, -1, 291, 292, 293, 294, 295, 296,
- -1, 298, -1, 300, 301, 302, 303, 304, -1, -1,
- 37, -1, -1, 40, 41, 42, 43, 44, 45, -1,
- 47, -1, -1, -1, -1, -1, -1, -1, 0, -1,
- -1, 58, 59, 60, -1, 62, 63, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, 94, 40, 41,
- -1, 43, 44, 45, -1, -1, -1, -1, -1, 0,
- -1, -1, -1, -1, -1, 112, 58, 59, 60, -1,
- 62, 63, -1, -1, 263, 264, 123, 124, -1, 268,
- 269, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 280, -1, 282, 283, 284, -1, 286, -1, 40,
- 41, 93, 43, 44, 45, -1, -1, 0, -1, 298,
- -1, -1, 301, 302, 303, 304, -1, 58, 59, 60,
- -1, 62, 63, -1, -1, -1, -1, -1, -1, -1,
- -1, 123, 124, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 40, 41, -1,
- -1, 44, 93, -1, -1, -1, -1, 263, 264, -1,
- -1, -1, 268, 269, -1, 58, 59, 60, -1, 62,
- -1, -1, -1, -1, 280, -1, 282, 283, 284, -1,
- 286, -1, 123, 124, -1, 291, 292, 293, 294, 295,
- 296, -1, 298, -1, -1, 301, 302, 303, 304, -1,
- 93, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, -1,
- -1, 268, 269, -1, -1, -1, -1, 274, -1, -1,
- 123, 124, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, -1, 289, 290, 291, 292, 293, 294, 295, 296,
- -1, 298, -1, 300, -1, -1, 303, 304, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, -1, -1, 268, 269, -1, -1,
- -1, -1, 274, -1, -1, -1, -1, -1, 280, -1,
- 282, 283, 284, 285, 286, -1, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, -1, 298, -1, 300, 301,
- 302, 303, 304, -1, -1, -1, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, -1, -1, 268, 269, -1,
- -1, -1, -1, 274, -1, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, 285, 286, -1, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, -1, 298, -1, 300,
- 301, 302, 303, 304, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 0, -1, 268, 269, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 280, -1, 282,
- 283, 284, 285, 286, -1, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, -1, 298, -1, 300, 301, 302,
- 303, 304, -1, 40, 41, -1, -1, 44, -1, -1,
- -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 58, 59, 60, -1, 62, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 40, 41, -1, -1, 44, 93, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, 58,
- 59, 60, -1, 62, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 123, 124, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 40, -1, -1, 43, 93, 45, -1, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 123, 124, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 40, -1, -1, 43, -1, 45, -1, -1, 0, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 123, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 40, -1,
- -1, 43, -1, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, -1,
- -1, 268, 269, 123, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, 280, -1, 282, 283, 284, 285, 286,
- -1, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- -1, 298, -1, 300, 301, 302, 303, 304, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, -1, -1, 268,
- 269, -1, 40, -1, -1, 43, -1, 45, -1, -1,
- -1, 280, -1, 282, 283, 284, 285, 286, -1, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, -1, 298,
- -1, 300, 301, 302, 303, 304, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, -1, -1, 40, 268, 269,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- 280, 0, 282, 283, 284, 285, 286, -1, -1, -1,
- -1, 291, 292, 293, 294, -1, -1, -1, 298, -1,
- 300, 301, 302, 303, 304, 123, -1, 257, 258, 259,
- 260, -1, 262, 263, 264, -1, -1, -1, 268, 269,
- -1, 40, -1, -1, 43, -1, 45, -1, -1, 0,
- 280, -1, 282, 283, 284, 285, 286, -1, -1, -1,
- -1, 291, 292, 293, 294, -1, -1, -1, 298, -1,
- 300, 301, 302, 303, 304, 257, 258, 259, 260, 261,
- 262, 263, 264, -1, -1, -1, 268, 269, -1, 40,
- -1, -1, 43, -1, 45, -1, -1, -1, 280, -1,
- 282, 283, 284, 285, 286, -1, -1, -1, -1, 291,
- 292, 293, 294, -1, -1, -1, 298, -1, 300, 301,
- 302, 303, 304, -1, 123, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 40, 41, -1, 43, 44, 45,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
- 258, 259, -1, -1, -1, 263, 264, -1, -1, -1,
- 268, 269, 123, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 280, -1, 282, 283, 284, 285, 286, -1,
- -1, -1, -1, 291, 292, 293, 294, -1, -1, -1,
- 298, -1, 300, 301, 302, 303, 304, -1, -1, -1,
- 263, 264, -1, 266, 267, 268, 269, -1, -1, -1,
- -1, -1, 275, 276, 277, 278, 279, 280, -1, 282,
- 283, 284, -1, 286, 287, -1, -1, -1, 291, 292,
- 293, 294, -1, -1, -1, 298, -1, -1, 301, 302,
- 303, 304, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, -1, -1, -1, 263, 264, -1, -1, -1, 268,
- 269, -1, -1, -1, -1, -1, -1, 40, -1, -1,
- 43, 280, 45, 282, 283, 284, 285, 286, -1, -1,
- -1, -1, 291, 292, 293, 294, 59, -1, -1, 298,
- -1, 300, 301, 302, 303, 304, 257, 258, 259, -1,
- -1, -1, 263, 264, -1, -1, -1, 268, 269, 0,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, 285, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, -1, -1, -1, 298, -1, 300,
- 301, 302, 303, 304, -1, -1, 37, -1, -1, 40,
- 41, 42, 43, 44, 45, -1, 47, 263, 264, -1,
- -1, -1, 268, 269, 0, -1, -1, 58, 59, 60,
- -1, 62, 63, -1, 280, -1, 282, 283, 284, -1,
- 286, -1, -1, -1, -1, 291, 292, 293, 294, -1,
- -1, -1, 298, -1, -1, 301, 302, 303, 304, -1,
- -1, 37, 93, 94, 40, 41, 42, 43, 44, 45,
- -1, 47, 0, -1, -1, -1, -1, -1, -1, -1,
- -1, 112, 58, 59, -1, -1, 62, 63, -1, -1,
- -1, -1, 123, 124, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 37,
- -1, -1, -1, 41, 42, -1, 44, 93, 94, 47,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 58, 59, 60, -1, 62, 63, 112, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 259, 123, 124, -1,
- 263, 264, -1, -1, -1, 268, 269, -1, -1, -1,
- -1, -1, -1, -1, -1, 93, 94, 280, -1, 282,
- 283, 284, -1, 286, -1, -1, -1, -1, 291, 292,
- 293, 294, -1, -1, 112, 298, -1, 300, 301, 302,
- 303, 304, -1, -1, -1, 123, 124, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, -1, -1, 268, 269, -1,
- -1, -1, -1, 274, -1, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, 285, 286, -1, 288, 289, 290,
- 291, -1, 293, 294, 295, 296, -1, 298, -1, 300,
- 301, 302, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, 259, 260, 261, 262, 263, 264, 265,
- -1, -1, 268, 269, -1, -1, -1, -1, 274, -1,
- -1, -1, -1, -1, 280, -1, 282, 283, 284, 285,
- 286, 0, 288, 289, 290, 291, -1, 293, 294, 295,
- 296, -1, 298, -1, 300, 301, 302, -1, -1, 257,
- 258, 259, 260, 261, 262, -1, -1, 265, -1, -1,
- -1, -1, -1, -1, -1, -1, 274, -1, 37, -1,
- -1, -1, 41, 42, -1, 44, 0, 285, 47, -1,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 58,
- 59, 60, 300, 62, 63, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 37, -1, -1, -1, 41, 42, -1,
- 44, 0, -1, 47, 93, 94, -1, -1, -1, -1,
- -1, -1, -1, -1, 58, 59, 60, -1, 62, 63,
- -1, -1, -1, 112, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 123, 124, -1, -1, 37, -1,
- -1, -1, 41, 42, -1, 44, -1, -1, 47, 93,
- 94, -1, -1, -1, -1, -1, -1, -1, -1, 58,
- 59, 60, -1, 62, 63, -1, -1, -1, 112, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, 123,
- 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, 94, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 37, -1, -1,
- -1, 41, 42, 112, 44, -1, -1, 47, -1, -1,
- -1, -1, -1, -1, 123, 124, -1, -1, 58, 59,
- 60, -1, 62, 63, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, 94, -1, -1, -1, 257, 258,
- 259, 260, 261, 262, -1, -1, 265, -1, -1, -1,
- -1, -1, 112, -1, -1, 274, -1, -1, -1, -1,
- -1, -1, -1, 123, 124, -1, 285, -1, -1, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, -1, -1,
- -1, 300, -1, 257, 258, 259, 260, 261, 262, -1,
- 40, 265, -1, 43, -1, 45, -1, -1, -1, -1,
- 274, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 285, -1, -1, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, -1, -1, -1, 300, -1, 257, 258,
- 259, 260, 261, 262, -1, -1, 265, -1, -1, -1,
- -1, -1, -1, -1, -1, 274, -1, -1, 0, -1,
- -1, -1, -1, -1, -1, -1, 285, -1, -1, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, -1, -1,
- -1, 300, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 37, -1, -1, -1, 41,
- 42, -1, 44, -1, -1, 47, -1, 257, 258, 259,
- 260, 261, 262, -1, -1, 265, 58, 59, 60, -1,
- 62, 63, -1, -1, 274, 0, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 285, -1, -1, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, -1, -1, -1,
- 300, 93, 94, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 37, -1, -1, -1, 41, 42, -1, 44,
- 112, -1, 47, 0, -1, -1, -1, -1, -1, -1,
- -1, 123, 124, 58, 59, 60, -1, 62, 63, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 37, -1, -1, -1, 41, 42, -1, 44, 93, 94,
- 47, 261, 262, 263, 264, -1, -1, -1, 268, 269,
- -1, 58, 59, 60, -1, 62, 63, 112, -1, -1,
- 280, -1, 282, 283, 284, 0, 286, -1, 123, 124,
- -1, 291, 292, 293, 294, -1, -1, -1, 298, -1,
- -1, 301, 302, 303, 304, -1, 93, 94, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 37, -1, -1, 112, 41, 42, -1, 44,
- -1, -1, 47, -1, -1, -1, 123, 124, -1, -1,
- -1, -1, -1, 58, 59, 60, -1, 62, 63, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
- 262, -1, -1, 265, 40, 41, -1, 43, 44, 45,
- -1, -1, 274, 0, -1, -1, -1, -1, 93, 94,
- -1, -1, -1, 285, -1, -1, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, -1, -1, 112, 300, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 123, 124,
- 37, -1, -1, -1, 41, 42, -1, -1, -1, -1,
- 47, -1, 257, 258, 259, 260, 261, 262, -1, -1,
- 265, 58, 59, 60, -1, 62, 63, -1, -1, 274,
- -1, -1, -1, 40, 41, -1, 43, 44, 45, -1,
- 285, -1, -1, 288, 289, 290, -1, -1, -1, -1,
- 295, 296, -1, -1, -1, 300, 93, 94, -1, -1,
- 257, 258, 259, 260, 261, 262, -1, -1, 265, -1,
- -1, -1, -1, -1, -1, 112, -1, 274, -1, -1,
- 0, -1, -1, -1, -1, -1, 123, 124, 285, -1,
- -1, 288, 289, 290, -1, -1, -1, -1, 295, 296,
- -1, -1, -1, 300, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 37, -1, -1,
- -1, 41, 42, -1, 44, -1, -1, 47, -1, -1,
- -1, -1, 257, 258, 259, 260, 261, 262, 58, 59,
- 265, -1, -1, 63, -1, -1, -1, -1, -1, 274,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 285, -1, -1, 288, 289, 290, -1, -1, -1, -1,
- 295, 296, -1, 93, 94, 300, -1, 263, 264, -1,
- -1, -1, 268, 269, -1, -1, -1, -1, -1, -1,
- -1, -1, 112, -1, 280, -1, 282, 283, 284, -1,
- 286, -1, -1, 123, 124, 291, 292, 293, 294, -1,
- -1, -1, 298, -1, -1, 301, 302, 303, 304, -1,
- 257, 258, 259, 260, 261, 262, -1, -1, 265, -1,
- -1, -1, -1, -1, -1, -1, -1, 274, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 285, -1,
- -1, 288, 289, 290, -1, -1, 263, 264, 295, 296,
- -1, 268, 269, 300, -1, -1, -1, -1, -1, -1,
- -1, 7, -1, 280, -1, 282, 283, 284, 14, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, -1, -1,
- -1, 298, -1, 29, 301, 302, 303, 304, -1, 35,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 49, 50, 51, -1, -1, -1, 55,
- 56, -1, 58, 59, 60, -1, 62, 63, 64, 65,
- 66, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, 261, 262, -1, -1, 265, -1, -1, 84, 85,
- 86, 87, 88, -1, 274, -1, -1, -1, -1, -1,
- -1, -1, -1, 99, -1, 285, -1, -1, 288, 289,
- 290, 107, -1, -1, -1, -1, -1, -1, 114, -1,
- 300, -1, -1, -1, 120, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 47, 48, 134, 135,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 157, 158, -1, -1, 161, 162, 163, 164, 165,
- 81, 82, 83, -1, 170, 171, -1, 173, 174, -1,
- -1, -1, 178, -1, -1, -1, 182, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 110,
- 111, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 214, 215,
- 216, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 232, -1, 234, -1,
- 236, -1, 238, -1, 240, -1, -1, -1, -1, 245,
- -1, -1, -1, -1, 250, 251, -1, -1, -1, -1,
- -1, 172, 258, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 183, -1, 185, -1, 187, -1, -1, -1,
- -1, -1, 278, -1, -1, -1, -1, -1, -1, -1,
- -1, 40, -1, -1, 43, -1, 45, 208, -1, 295,
- -1, -1, -1, -1, -1, -1, -1, -1, 16, -1,
- 59, -1, 223, 224, 225, 226, 227, -1, -1, 27,
- 28, -1, 30, 31, -1, 33, -1, -1, -1, -1,
- -1, -1, -1, 41, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 53, -1, -1, -1, -1,
- -1, -1, -1, 40, -1, -1, 43, -1, 45, -1,
- 271, -1, -1, -1, 275, 276, 277, -1, -1, -1,
- 281, -1, 59, -1, 123, -1, -1, -1, -1, -1,
- -1, -1, -1, 91, 92, 93, 94, 95, 96, 97,
- -1, -1, -1, -1, -1, 306, 307, 105, -1, -1,
- 108, 312, -1, -1, 112, 113, -1, -1, 116, -1,
- 118, 119, -1, -1, -1, 123, 124, -1, -1, -1,
- 40, -1, -1, 43, -1, 45, -1, -1, -1, -1,
- 138, 139, 140, 141, -1, -1, 123, -1, 125, 59,
- -1, -1, 150, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 160, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 40, -1, -1, 43, -1,
- 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 188, -1, -1, -1, 59, -1, -1, 195, -1, -1,
- -1, 199, 200, -1, 202, 203, 204, 205, -1, 207,
- -1, 209, 210, 123, -1, 125, -1, -1, -1, 217,
- 218, 260, 261, 262, 263, 264, -1, 266, 267, 268,
- 269, 270, -1, 272, 273, -1, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, -1, 286, 287, -1,
- -1, -1, 291, 292, 293, 294, 254, -1, 123, 298,
- 125, -1, 301, 302, 303, 304, -1, -1, 266, 267,
- 268, 269, 270, -1, 272, 273, 274, -1, -1, -1,
- -1, -1, 280, 260, -1, -1, 263, 264, -1, 266,
- 267, 268, 269, 270, 271, 272, 273, -1, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, -1, 286,
- 287, -1, -1, -1, 291, 292, 293, 294, -1, -1,
- -1, 298, -1, -1, 301, 302, 303, 304, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 260, -1, -1, 263, 264, -1, 266, 267, 268, 269,
- 270, 271, 272, 273, -1, 275, 276, 277, 278, 279,
- 280, 281, 282, 283, 284, -1, 286, 287, -1, -1,
- -1, 291, 292, 293, 294, -1, -1, -1, 298, -1,
- -1, 301, 302, 303, 304, 260, -1, -1, 263, 264,
- -1, 266, 267, 268, 269, 270, 271, 272, 273, -1,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- -1, 286, 287, -1, -1, -1, 291, 292, 293, 294,
- -1, -1, -1, 298, -1, -1, 301, 302, 303, 304,
- 40, -1, -1, 43, -1, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 40, -1, -1, 43, -1,
- 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 123, -1, 125, -1, -1, -1, -1,
- 40, -1, -1, 43, -1, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 123, -1,
- 125, -1, -1, -1, -1, -1, 40, -1, -1, 43,
- -1, 45, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 123, -1, 125, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 40, -1, -1, 43, -1, 45, -1, -1, -1, 123,
- 260, 125, -1, 263, 264, -1, 266, 267, 268, 269,
- 270, 271, 272, 273, -1, 275, 276, 277, 278, 279,
- 280, 281, 282, 283, 284, -1, 286, 287, -1, -1,
- -1, 291, 292, 293, 294, -1, -1, -1, 298, -1,
- -1, 301, 302, 303, 304, 260, -1, -1, 263, 264,
- -1, 266, 267, 268, 269, 270, 271, 272, 273, -1,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- -1, 286, 287, 123, -1, -1, 291, 292, 293, 294,
- -1, -1, -1, 298, -1, -1, 301, 302, 303, 304,
- 260, -1, -1, 263, 264, -1, 266, 267, 268, 269,
- 270, 271, 272, 273, -1, 275, 276, 277, 278, 279,
- 280, 281, 282, 283, 284, 40, 286, 287, 43, -1,
- 45, 291, 292, 293, 294, -1, -1, -1, 298, -1,
- -1, 301, 302, 303, 304, -1, 260, -1, -1, 263,
- 264, -1, 266, 267, 268, 269, 270, 271, 272, 273,
- -1, 275, 276, 277, 278, 279, 280, 281, 282, 283,
- 284, -1, 286, 287, -1, -1, -1, 291, 292, 293,
- 294, -1, -1, -1, 298, -1, -1, 301, 302, 303,
- 304, 40, -1, -1, 43, -1, 45, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- -1, -1, -1, 263, 264, -1, -1, -1, 268, 269,
- -1, -1, -1, -1, -1, -1, 40, -1, -1, 43,
- 280, 45, 282, 283, 284, 285, 286, -1, -1, -1,
- -1, 291, 292, 293, 294, 59, -1, -1, 298, -1,
- 300, 301, 302, 303, 304, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 123, -1, 125, -1, -1, -1,
- -1, 40, -1, -1, 43, -1, 45, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 123,
- -1, 125, -1, -1, -1, -1, -1, 40, -1, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 259, -1, 59, -1, 263, 264,
- -1, -1, -1, 268, 269, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 123, 280, 125, 282, 283, 284,
- -1, 286, -1, -1, -1, -1, 291, 292, 293, 294,
- -1, -1, -1, 298, -1, 300, 301, 302, 303, 304,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 40, -1, -1, 43, -1, 45, -1, -1, -1,
- 123, 260, 125, -1, 263, 264, -1, 266, 267, 268,
- 269, 270, 271, 272, 273, -1, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, -1, 286, 287, -1,
- -1, -1, 291, 292, 293, 294, -1, -1, -1, 298,
- -1, -1, 301, 302, 303, 304, 260, -1, -1, 263,
- 264, -1, 266, 267, 268, 269, 270, -1, 272, 273,
- -1, 275, 276, 277, 278, 279, 280, 281, 282, 283,
- 284, -1, 286, 287, -1, -1, -1, 291, 292, 293,
- 294, -1, -1, -1, 298, -1, -1, 301, 302, 303,
- 304, 260, -1, -1, 263, 264, -1, 266, 267, 268,
- 269, 270, -1, 272, 273, -1, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 40, 286, 287, 43,
- -1, 45, 291, 292, 293, 294, -1, -1, -1, 298,
- -1, -1, 301, 302, 303, 304, -1, 260, -1, -1,
- 263, 264, -1, 266, 267, 268, 269, 270, -1, 272,
- 273, -1, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, -1, 286, 287, -1, -1, -1, 291, 292,
- 293, 294, -1, -1, -1, 298, -1, -1, 301, 302,
- 303, 304, 40, -1, -1, 43, -1, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
- 259, -1, 261, 262, 263, 264, -1, -1, -1, 268,
- 269, -1, -1, -1, -1, -1, -1, 40, -1, -1,
- 43, 280, 45, 282, 283, 284, -1, 286, -1, -1,
- -1, -1, 291, 292, 293, 294, 59, -1, -1, 298,
- -1, 300, 301, 302, 303, 304, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 123, -1, 125, -1, -1,
- -1, -1, 40, -1, -1, 43, -1, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 123, -1, 125, -1, -1, -1, -1, -1, 40, -1,
- -1, 43, -1, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 259, -1, 59, -1, 263,
- 264, -1, -1, -1, 268, 269, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 123, 280, 125, 282, 283,
- 284, -1, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, -1, -1, -1, 298, -1, 300, 301, 302, 303,
- 304, 40, 41, -1, 43, 44, 45, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 123, 260, 125, -1, 263, 264, -1, 266, 267,
- 268, 269, 270, -1, 272, 273, -1, 275, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, -1, 286, 287,
- -1, -1, -1, 291, 292, 293, 294, -1, -1, -1,
- 298, -1, -1, 301, 302, 303, 304, 260, -1, -1,
- 263, 264, -1, 266, 267, 268, 269, 270, -1, 272,
- 273, -1, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 40, 286, 287, 43, 44, 45, 291, 292,
- 293, 294, -1, -1, -1, 298, -1, -1, 301, 302,
- 303, 304, 260, -1, -1, 263, 264, -1, 266, 267,
- 268, 269, 270, -1, 272, 273, -1, 275, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, -1, 286, 287,
- -1, -1, -1, 291, 292, 293, 294, -1, -1, -1,
- 298, -1, -1, 301, 302, 303, 304, -1, 260, -1,
- -1, 263, 264, -1, 266, 267, 268, 269, 270, -1,
- 272, 273, -1, 275, 276, 277, 278, 279, 280, 281,
- 282, 283, 284, -1, 286, 287, -1, -1, -1, 291,
- 292, 293, 294, -1, -1, -1, 298, -1, -1, 301,
- 302, 303, 304, 40, -1, -1, 43, -1, 45, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, 263, 264, -1, -1, -1, 268,
- 269, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 280, -1, 282, 283, 284, -1, 286, -1, -1,
- -1, -1, 291, 292, 293, 294, -1, -1, -1, 298,
- -1, -1, 301, 302, 303, 304, 40, 41, -1, 43,
- 44, 45, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 123, -1, 125, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 40, 41,
- -1, 43, -1, 45, -1, 263, 264, -1, -1, -1,
- 268, 269, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 280, -1, 282, 283, 284, -1, 286, -1,
- -1, -1, -1, 291, 292, 293, 294, -1, -1, -1,
- 298, -1, -1, 301, 302, 303, 304, 40, -1, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 40, -1, -1, 43, -1, 45, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 260, -1, -1, 263, 264, -1, 266,
- 267, 268, 269, 270, -1, 272, 273, -1, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, -1, 286,
- 287, -1, -1, -1, 291, 292, 293, 294, -1, -1,
- -1, 298, -1, -1, 301, 302, 303, 304, 40, -1,
- -1, 43, -1, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 263,
- 264, -1, -1, -1, 268, 269, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 280, -1, 282, 283,
- 284, -1, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, -1, -1, -1, 298, -1, -1, 301, 302, 303,
- 304, 263, 264, -1, -1, -1, 268, 269, 40, 41,
- -1, 43, -1, 45, -1, -1, -1, -1, 280, -1,
- 282, 283, 284, -1, 286, -1, -1, -1, -1, 291,
- 292, 293, 294, -1, -1, -1, 298, -1, -1, 301,
- 302, 303, 304, -1, -1, -1, 259, -1, -1, -1,
- 263, 264, -1, -1, 40, 268, 269, 43, 44, 45,
- -1, -1, -1, -1, -1, -1, -1, 280, -1, 282,
- 283, 284, -1, 286, -1, -1, -1, -1, 291, 292,
- 293, 294, -1, -1, -1, 298, -1, -1, 301, 302,
- 303, 304, 259, -1, -1, -1, 263, 264, -1, -1,
- 40, 268, 269, 43, 44, 45, -1, -1, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, -1, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, -1, -1,
- -1, 298, -1, -1, 301, 302, 303, 304, -1, -1,
- -1, -1, 40, -1, -1, 43, 44, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 259, -1, -1,
- -1, 263, 264, -1, -1, -1, 268, 269, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 280, -1,
- 282, 283, 284, -1, 286, -1, -1, -1, -1, 291,
- 292, 293, 294, -1, -1, -1, 298, -1, -1, 301,
- 302, 303, 304, 40, -1, -1, 43, 44, 45, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 263, 264, -1, -1, -1, 268, 269, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 280, -1,
- 282, 283, 284, 40, 286, -1, 43, 44, 45, 291,
- 292, 293, 294, -1, -1, -1, 298, -1, -1, 301,
- 302, 303, 304, -1, -1, -1, -1, 263, 264, -1,
- -1, -1, 268, 269, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 280, -1, 282, 283, 284, 40,
- 286, -1, 43, 44, 45, 291, 292, 293, 294, -1,
- -1, -1, 298, -1, -1, 301, 302, 303, 304, -1,
- -1, -1, -1, 263, 264, -1, -1, -1, 268, 269,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 280, -1, 282, 283, 284, 40, 286, -1, 43, -1,
- 45, 291, 292, 293, 294, -1, -1, -1, 298, -1,
- -1, 301, 302, 303, 304, 263, 264, -1, -1, -1,
- 268, 269, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 280, -1, 282, 283, 284, -1, 286, -1,
- -1, -1, -1, 291, 292, 293, 294, -1, -1, -1,
- 298, -1, -1, 301, 302, 303, 304, 40, 41, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 263, 264, -1, -1,
- -1, 268, 269, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, -1, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, -1, -1,
- -1, 298, -1, -1, 301, 302, 303, 304, 40, 41,
- -1, 43, -1, 45, -1, -1, 263, 264, -1, -1,
- -1, 268, 269, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, -1, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, -1, -1,
- -1, 298, -1, -1, 301, 302, 303, 304, -1, -1,
- -1, 40, 263, 264, 43, -1, 45, 268, 269, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, -1, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, -1, -1, -1, 298, -1, -1,
- 301, 302, 303, 304, 259, -1, -1, -1, 263, 264,
- -1, -1, -1, 268, 269, 40, 41, -1, 43, -1,
- 45, -1, -1, -1, -1, 280, -1, 282, 283, 284,
- -1, 286, -1, -1, -1, -1, 291, 292, 293, 294,
- -1, -1, -1, 298, -1, -1, 301, 302, 303, 304,
- -1, -1, -1, -1, -1, -1, -1, 40, 41, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- 263, 264, -1, -1, -1, 268, 269, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 280, -1, 282,
- 283, 284, -1, 286, -1, -1, -1, -1, 291, 292,
- 293, 294, -1, -1, -1, 298, -1, -1, 301, 302,
- 303, 304, 40, 41, -1, 43, -1, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 263, 264, -1, -1, -1, 268, 269, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 280, -1,
- 282, 283, 284, -1, 286, -1, -1, -1, -1, 291,
- 292, 293, 294, -1, -1, -1, 298, -1, -1, 301,
- 302, 303, 304, 40, 41, -1, 43, -1, 45, -1,
- 259, -1, -1, -1, 263, 264, -1, -1, -1, 268,
- 269, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 280, -1, 282, 283, 284, -1, 286, -1, -1,
- -1, -1, 291, 292, 293, 294, -1, -1, -1, 298,
- -1, -1, 301, 302, 303, 304, 40, 41, -1, 43,
- -1, 45, -1, -1, -1, -1, -1, -1, 263, 264,
- -1, -1, -1, 268, 269, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 280, -1, 282, 283, 284,
- -1, 286, -1, -1, -1, -1, 291, 292, 293, 294,
- -1, -1, -1, 298, -1, -1, 301, 302, 303, 304,
- 263, 264, -1, -1, -1, 268, 269, 40, 41, -1,
- 43, -1, 45, -1, -1, -1, -1, 280, -1, 282,
- 283, 284, -1, 286, -1, -1, -1, -1, 291, 292,
- 293, 294, -1, -1, -1, 298, -1, -1, 301, 302,
- 303, 304, -1, -1, -1, -1, -1, -1, -1, 40,
- 41, -1, 43, -1, 45, 263, 264, -1, -1, -1,
- 268, 269, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 280, -1, 282, 283, 284, -1, 286, -1,
- -1, -1, -1, 291, 292, 293, 294, -1, -1, -1,
- 298, -1, -1, 301, 302, 303, 304, 40, -1, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 263, 264, -1, -1,
- -1, 268, 269, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, -1, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, -1, -1,
- 93, 298, -1, -1, 301, 302, 303, 304, 40, -1,
- -1, 43, -1, 45, -1, -1, -1, -1, -1, 263,
- 264, -1, -1, -1, 268, 269, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 280, -1, 282, 283,
- 284, -1, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, -1, -1, -1, 298, -1, -1, 301, 302, 303,
- 304, 40, -1, -1, 43, -1, 45, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 263, 264, -1, -1, -1, 268, 269, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 280, -1, 282,
- 283, 284, -1, 286, -1, -1, -1, -1, 291, 292,
- 293, 294, -1, -1, -1, 298, -1, -1, 301, 302,
- 303, 304, 263, 264, -1, -1, -1, 268, 269, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, -1, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, -1, -1, -1, 298, -1, -1,
- 301, 302, 303, 304, -1, -1, -1, -1, -1, -1,
- 263, 264, -1, -1, -1, 268, 269, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 280, -1, 282,
- 283, 284, -1, 286, -1, -1, -1, -1, 291, 292,
- 293, 294, -1, -1, -1, 298, -1, -1, 301, 302,
- 303, 304, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 263, 264, -1, -1, -1, 268, 269, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 280, -1,
- 282, 283, 284, -1, 286, -1, -1, -1, -1, 291,
- 292, 293, 294, -1, -1, -1, 298, 27, 28, 301,
- 302, 303, 304, 33, -1, -1, -1, -1, -1, -1,
- -1, 41, -1, -1, 263, 264, -1, -1, -1, 268,
- 269, -1, -1, 53, -1, -1, -1, -1, -1, -1,
- -1, 280, -1, 282, 283, 284, -1, 286, -1, -1,
- -1, -1, 291, 292, 293, 294, -1, -1, -1, 298,
- -1, -1, 301, 302, 303, 304, -1, -1, -1, -1,
- -1, 91, 92, 93, 94, 95, 96, 97, -1, -1,
- -1, -1, -1, -1, -1, 105, -1, -1, 108, -1,
- -1, -1, 112, 113, -1, -1, 116, -1, 118, 119,
- -1, -1, -1, 123, 124, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 138, 139,
- 140, 141, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 160, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 188, -1,
- -1, -1, -1, -1, -1, 195, -1, -1, -1, 199,
- 200, -1, 202, 203, 204, 205, -1, 207, -1, 209,
- 210, -1, -1, -1, -1, -1, -1, 217, 218, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 254, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 266, 267, 268, 269,
- 270, -1, 272, 273, 274, -1, -1, -1, -1, -1,
- 280,
-};
-#define YYFINAL 1
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 304
-#if YYDEBUG
-char *yyname[] = {
-"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,
-"':'","';'","'<'",0,"'>'","'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,"'['",0,"']'","'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'p'",0,0,0,0,0,0,0,
-0,0,0,"'{'","'|'","'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"BEGIN","END","REGEX","SEMINEW",
-"NEWLINE","COMMENT","FUN1","FUNN","GRGR","PRINT","PRINTF","SPRINTF","SPLIT",
-"IF","ELSE","WHILE","FOR","IN","EXIT","NEXT","BREAK","CONTINUE","RET","GETLINE",
-"DO","SUB","GSUB","MATCH","FUNCTION","USERFUN","DELETE","ASGNOP","OROR",
-"ANDAND","NUMBER","VAR","SUBSTR","INDEX","MATCHOP","RELOP","OR","STRING",
-"UMINUS","NOT","INCR","DECR","FIELD","VFIELD",
-};
-char *yyrule[] = {
-"$accept : program",
-"program : junk hunks",
-"begin : BEGIN '{' maybe states '}' junk",
-"end : END '{' maybe states '}'",
-"end : end NEWLINE",
-"hunks : hunks hunk junk",
-"hunks :",
-"hunk : patpat",
-"hunk : patpat '{' maybe states '}'",
-"hunk : FUNCTION USERFUN '(' arg_list ')' maybe '{' maybe states '}'",
-"hunk : '{' maybe states '}'",
-"hunk : begin",
-"hunk : end",
-"arg_list : expr_list",
-"patpat : cond",
-"patpat : cond ',' cond",
-"cond : expr",
-"cond : match",
-"cond : rel",
-"cond : compound_cond",
-"compound_cond : '(' compound_cond ')'",
-"compound_cond : cond ANDAND maybe cond",
-"compound_cond : cond OROR maybe cond",
-"compound_cond : NOT cond",
-"rel : expr RELOP expr",
-"rel : expr '>' expr",
-"rel : expr '<' expr",
-"rel : '(' rel ')'",
-"match : expr MATCHOP expr",
-"match : expr MATCHOP REGEX",
-"match : REGEX",
-"match : '(' match ')'",
-"expr : term",
-"expr : expr term",
-"expr : variable ASGNOP cond",
-"term : variable",
-"term : NUMBER",
-"term : STRING",
-"term : term '+' term",
-"term : term '-' term",
-"term : term '*' term",
-"term : term '/' term",
-"term : term '%' term",
-"term : term '^' term",
-"term : term IN VAR",
-"term : term '?' term ':' term",
-"term : variable INCR",
-"term : variable DECR",
-"term : INCR variable",
-"term : DECR variable",
-"term : '-' term",
-"term : '+' term",
-"term : '(' cond ')'",
-"term : GETLINE",
-"term : GETLINE variable",
-"term : GETLINE '<' expr",
-"term : GETLINE variable '<' expr",
-"term : term 'p' GETLINE",
-"term : term 'p' GETLINE variable",
-"term : FUN1",
-"term : FUN1 '(' ')'",
-"term : FUN1 '(' expr ')'",
-"term : FUNN '(' expr_list ')'",
-"term : USERFUN '(' expr_list ')'",
-"term : SPRINTF expr_list",
-"term : SUBSTR '(' expr ',' expr ',' expr ')'",
-"term : SUBSTR '(' expr ',' expr ')'",
-"term : SPLIT '(' expr ',' VAR ',' expr ')'",
-"term : SPLIT '(' expr ',' VAR ',' REGEX ')'",
-"term : SPLIT '(' expr ',' VAR ')'",
-"term : INDEX '(' expr ',' expr ')'",
-"term : MATCH '(' expr ',' REGEX ')'",
-"term : MATCH '(' expr ',' expr ')'",
-"term : SUB '(' expr ',' expr ')'",
-"term : SUB '(' REGEX ',' expr ')'",
-"term : GSUB '(' expr ',' expr ')'",
-"term : GSUB '(' REGEX ',' expr ')'",
-"term : SUB '(' expr ',' expr ',' expr ')'",
-"term : SUB '(' REGEX ',' expr ',' expr ')'",
-"term : GSUB '(' expr ',' expr ',' expr ')'",
-"term : GSUB '(' REGEX ',' expr ',' expr ')'",
-"variable : VAR",
-"variable : VAR '[' expr_list ']'",
-"variable : FIELD",
-"variable : VFIELD term",
-"expr_list : expr",
-"expr_list : clist",
-"expr_list :",
-"clist : expr ',' maybe expr",
-"clist : clist ',' maybe expr",
-"clist : '(' clist ')'",
-"junk : junk hunksep",
-"junk :",
-"hunksep : ';'",
-"hunksep : SEMINEW",
-"hunksep : NEWLINE",
-"hunksep : COMMENT",
-"maybe : maybe nlstuff",
-"maybe :",
-"nlstuff : NEWLINE",
-"nlstuff : COMMENT",
-"separator : ';' maybe",
-"separator : SEMINEW maybe",
-"separator : NEWLINE maybe",
-"separator : COMMENT maybe",
-"states : states statement",
-"states :",
-"statement : simple separator maybe",
-"statement : ';' maybe",
-"statement : SEMINEW maybe",
-"statement : compound",
-"simpnull : simple",
-"simpnull :",
-"simple : expr",
-"simple : PRINT expr_list redir expr",
-"simple : PRINT expr_list",
-"simple : PRINTF expr_list redir expr",
-"simple : PRINTF expr_list",
-"simple : BREAK",
-"simple : NEXT",
-"simple : EXIT",
-"simple : EXIT expr",
-"simple : CONTINUE",
-"simple : RET",
-"simple : RET expr",
-"simple : DELETE VAR '[' expr ']'",
-"redir : '>'",
-"redir : GRGR",
-"redir : '|'",
-"compound : IF '(' cond ')' maybe statement",
-"compound : IF '(' cond ')' maybe statement ELSE maybe statement",
-"compound : WHILE '(' cond ')' maybe statement",
-"compound : DO maybe statement WHILE '(' cond ')'",
-"compound : FOR '(' simpnull ';' cond ';' simpnull ')' maybe statement",
-"compound : FOR '(' simpnull ';' ';' simpnull ')' maybe statement",
-"compound : FOR '(' expr ')' maybe statement",
-"compound : '{' maybe states '}' maybe",
-};
-#endif
-#ifndef YYSTYPE
-typedef int YYSTYPE;
-#endif
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH 500
-#endif
-#endif
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short yyss[YYSTACKSIZE];
-YYSTYPE yyvs[YYSTACKSIZE];
-#define yystacksize YYSTACKSIZE
-#line 406 "a2p.y"
-#include "a2py.c"
-#line 1997 "y.tab.c"
-#define YYABORT goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-int
-yyparse()
-{
- register int yym, yyn, yystate;
-#if YYDEBUG
- register char *yys;
- extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
-yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, shifting to state %d\n",
- YYPREFIX, yystate, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
-#ifdef lint
- goto yynewerror;
-#endif
-yynewerror:
- yyerror("syntax error");
-#ifdef lint
- goto yyerrlab;
-#endif
-yyerrlab:
- ++yynerrs;
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: error recovery discarding state %d\n",
- YYPREFIX, *yyssp);
-#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
- }
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, reducing by rule %d (%s)\n",
- YYPREFIX, yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
-case 1:
-#line 63 "a2p.y"
-{ root = oper4(OPROG,yyvsp[-1],begins,yyvsp[0],ends); }
-break;
-case 2:
-#line 67 "a2p.y"
-{ begins = oper4(OJUNK,begins,yyvsp[-3],yyvsp[-2],yyvsp[0]); in_begin = FALSE;
- yyval = Nullop; }
-break;
-case 3:
-#line 72 "a2p.y"
-{ ends = oper3(OJUNK,ends,yyvsp[-2],yyvsp[-1]); yyval = Nullop; }
-break;
-case 4:
-#line 74 "a2p.y"
-{ yyval = yyvsp[-1]; }
-break;
-case 5:
-#line 78 "a2p.y"
-{ yyval = oper3(OHUNKS,yyvsp[-2],yyvsp[-1],yyvsp[0]); }
-break;
-case 6:
-#line 80 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 7:
-#line 84 "a2p.y"
-{ yyval = oper1(OHUNK,yyvsp[0]); need_entire = TRUE; }
-break;
-case 8:
-#line 86 "a2p.y"
-{ yyval = oper2(OHUNK,yyvsp[-4],oper2(OJUNK,yyvsp[-2],yyvsp[-1])); }
-break;
-case 9:
-#line 88 "a2p.y"
-{ fixfargs(yyvsp[-8],yyvsp[-6],0); yyval = oper5(OUSERDEF,yyvsp[-8],yyvsp[-6],yyvsp[-4],yyvsp[-2],yyvsp[-1]); }
-break;
-case 10:
-#line 90 "a2p.y"
-{ yyval = oper2(OHUNK,Nullop,oper2(OJUNK,yyvsp[-2],yyvsp[-1])); }
-break;
-case 13:
-#line 96 "a2p.y"
-{ yyval = rememberargs(yyval); }
-break;
-case 14:
-#line 100 "a2p.y"
-{ yyval = oper1(OPAT,yyvsp[0]); }
-break;
-case 15:
-#line 102 "a2p.y"
-{ yyval = oper2(ORANGE,yyvsp[-2],yyvsp[0]); }
-break;
-case 20:
-#line 113 "a2p.y"
-{ yyval = oper1(OCPAREN,yyvsp[-1]); }
-break;
-case 21:
-#line 115 "a2p.y"
-{ yyval = oper3(OCANDAND,yyvsp[-3],yyvsp[-1],yyvsp[0]); }
-break;
-case 22:
-#line 117 "a2p.y"
-{ yyval = oper3(OCOROR,yyvsp[-3],yyvsp[-1],yyvsp[0]); }
-break;
-case 23:
-#line 119 "a2p.y"
-{ yyval = oper1(OCNOT,yyvsp[0]); }
-break;
-case 24:
-#line 123 "a2p.y"
-{ yyval = oper3(ORELOP,yyvsp[-1],yyvsp[-2],yyvsp[0]); }
-break;
-case 25:
-#line 125 "a2p.y"
-{ yyval = oper3(ORELOP,string(">",1),yyvsp[-2],yyvsp[0]); }
-break;
-case 26:
-#line 127 "a2p.y"
-{ yyval = oper3(ORELOP,string("<",1),yyvsp[-2],yyvsp[0]); }
-break;
-case 27:
-#line 129 "a2p.y"
-{ yyval = oper1(ORPAREN,yyvsp[-1]); }
-break;
-case 28:
-#line 133 "a2p.y"
-{ yyval = oper3(OMATCHOP,yyvsp[-1],yyvsp[-2],yyvsp[0]); }
-break;
-case 29:
-#line 135 "a2p.y"
-{ yyval = oper3(OMATCHOP,yyvsp[-1],yyvsp[-2],oper1(OREGEX,yyvsp[0])); }
-break;
-case 30:
-#line 137 "a2p.y"
-{ yyval = oper1(OREGEX,yyvsp[0]); }
-break;
-case 31:
-#line 139 "a2p.y"
-{ yyval = oper1(OMPAREN,yyvsp[-1]); }
-break;
-case 32:
-#line 143 "a2p.y"
-{ yyval = yyvsp[0]; }
-break;
-case 33:
-#line 145 "a2p.y"
-{ yyval = oper2(OCONCAT,yyvsp[-1],yyvsp[0]); }
-break;
-case 34:
-#line 147 "a2p.y"
-{ yyval = oper3(OASSIGN,yyvsp[-1],yyvsp[-2],yyvsp[0]);
- if ((ops[yyvsp[-2]].ival & 255) == OFLD)
- lval_field = TRUE;
- if ((ops[yyvsp[-2]].ival & 255) == OVFLD)
- lval_field = TRUE;
- }
-break;
-case 35:
-#line 156 "a2p.y"
-{ yyval = yyvsp[0]; }
-break;
-case 36:
-#line 158 "a2p.y"
-{ yyval = oper1(ONUM,yyvsp[0]); }
-break;
-case 37:
-#line 160 "a2p.y"
-{ yyval = oper1(OSTR,yyvsp[0]); }
-break;
-case 38:
-#line 162 "a2p.y"
-{ yyval = oper2(OADD,yyvsp[-2],yyvsp[0]); }
-break;
-case 39:
-#line 164 "a2p.y"
-{ yyval = oper2(OSUBTRACT,yyvsp[-2],yyvsp[0]); }
-break;
-case 40:
-#line 166 "a2p.y"
-{ yyval = oper2(OMULT,yyvsp[-2],yyvsp[0]); }
-break;
-case 41:
-#line 168 "a2p.y"
-{ yyval = oper2(ODIV,yyvsp[-2],yyvsp[0]); }
-break;
-case 42:
-#line 170 "a2p.y"
-{ yyval = oper2(OMOD,yyvsp[-2],yyvsp[0]); }
-break;
-case 43:
-#line 172 "a2p.y"
-{ yyval = oper2(OPOW,yyvsp[-2],yyvsp[0]); }
-break;
-case 44:
-#line 174 "a2p.y"
-{ yyval = oper2(ODEFINED,aryrefarg(yyvsp[0]),yyvsp[-2]); }
-break;
-case 45:
-#line 176 "a2p.y"
-{ yyval = oper3(OCOND,yyvsp[-4],yyvsp[-2],yyvsp[0]); }
-break;
-case 46:
-#line 178 "a2p.y"
-{ yyval = oper1(OPOSTINCR,yyvsp[-1]); }
-break;
-case 47:
-#line 180 "a2p.y"
-{ yyval = oper1(OPOSTDECR,yyvsp[-1]); }
-break;
-case 48:
-#line 182 "a2p.y"
-{ yyval = oper1(OPREINCR,yyvsp[0]); }
-break;
-case 49:
-#line 184 "a2p.y"
-{ yyval = oper1(OPREDECR,yyvsp[0]); }
-break;
-case 50:
-#line 186 "a2p.y"
-{ yyval = oper1(OUMINUS,yyvsp[0]); }
-break;
-case 51:
-#line 188 "a2p.y"
-{ yyval = oper1(OUPLUS,yyvsp[0]); }
-break;
-case 52:
-#line 190 "a2p.y"
-{ yyval = oper1(OPAREN,yyvsp[-1]); }
-break;
-case 53:
-#line 192 "a2p.y"
-{ yyval = oper0(OGETLINE); }
-break;
-case 54:
-#line 194 "a2p.y"
-{ yyval = oper1(OGETLINE,yyvsp[0]); }
-break;
-case 55:
-#line 196 "a2p.y"
-{ yyval = oper3(OGETLINE,Nullop,string("<",1),yyvsp[0]);
- if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 56:
-#line 199 "a2p.y"
-{ yyval = oper3(OGETLINE,yyvsp[-2],string("<",1),yyvsp[0]);
- if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 57:
-#line 202 "a2p.y"
-{ yyval = oper3(OGETLINE,Nullop,string("|",1),yyvsp[-2]);
- if (ops[yyvsp[-2]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 58:
-#line 205 "a2p.y"
-{ yyval = oper3(OGETLINE,yyvsp[0],string("|",1),yyvsp[-3]);
- if (ops[yyvsp[-3]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 59:
-#line 208 "a2p.y"
-{ yyval = oper0(yyvsp[0]); need_entire = do_chop = TRUE; }
-break;
-case 60:
-#line 210 "a2p.y"
-{ yyval = oper1(yyvsp[-2],Nullop); need_entire = do_chop = TRUE; }
-break;
-case 61:
-#line 212 "a2p.y"
-{ yyval = oper1(yyvsp[-3],yyvsp[-1]); }
-break;
-case 62:
-#line 214 "a2p.y"
-{ yyval = oper1(yyvsp[-3],yyvsp[-1]); }
-break;
-case 63:
-#line 216 "a2p.y"
-{ yyval = oper2(OUSERFUN,yyvsp[-3],yyvsp[-1]); }
-break;
-case 64:
-#line 218 "a2p.y"
-{ yyval = oper1(OSPRINTF,yyvsp[0]); }
-break;
-case 65:
-#line 220 "a2p.y"
-{ yyval = oper3(OSUBSTR,yyvsp[-5],yyvsp[-3],yyvsp[-1]); }
-break;
-case 66:
-#line 222 "a2p.y"
-{ yyval = oper2(OSUBSTR,yyvsp[-3],yyvsp[-1]); }
-break;
-case 67:
-#line 224 "a2p.y"
-{ yyval = oper3(OSPLIT,yyvsp[-5],aryrefarg(numary(yyvsp[-3])),yyvsp[-1]); }
-break;
-case 68:
-#line 226 "a2p.y"
-{ yyval = oper3(OSPLIT,yyvsp[-5],aryrefarg(numary(yyvsp[-3])),oper1(OREGEX,yyvsp[-1]));}
-break;
-case 69:
-#line 228 "a2p.y"
-{ yyval = oper2(OSPLIT,yyvsp[-3],aryrefarg(numary(yyvsp[-1]))); }
-break;
-case 70:
-#line 230 "a2p.y"
-{ yyval = oper2(OINDEX,yyvsp[-3],yyvsp[-1]); }
-break;
-case 71:
-#line 232 "a2p.y"
-{ yyval = oper2(OMATCH,yyvsp[-3],oper1(OREGEX,yyvsp[-1])); }
-break;
-case 72:
-#line 234 "a2p.y"
-{ yyval = oper2(OMATCH,yyvsp[-3],yyvsp[-1]); }
-break;
-case 73:
-#line 236 "a2p.y"
-{ yyval = oper2(OSUB,yyvsp[-3],yyvsp[-1]); }
-break;
-case 74:
-#line 238 "a2p.y"
-{ yyval = oper2(OSUB,oper1(OREGEX,yyvsp[-3]),yyvsp[-1]); }
-break;
-case 75:
-#line 240 "a2p.y"
-{ yyval = oper2(OGSUB,yyvsp[-3],yyvsp[-1]); }
-break;
-case 76:
-#line 242 "a2p.y"
-{ yyval = oper2(OGSUB,oper1(OREGEX,yyvsp[-3]),yyvsp[-1]); }
-break;
-case 77:
-#line 244 "a2p.y"
-{ yyval = oper3(OSUB,yyvsp[-5],yyvsp[-3],yyvsp[-1]); }
-break;
-case 78:
-#line 246 "a2p.y"
-{ yyval = oper3(OSUB,oper1(OREGEX,yyvsp[-5]),yyvsp[-3],yyvsp[-1]); }
-break;
-case 79:
-#line 248 "a2p.y"
-{ yyval = oper3(OGSUB,yyvsp[-5],yyvsp[-3],yyvsp[-1]); }
-break;
-case 80:
-#line 250 "a2p.y"
-{ yyval = oper3(OGSUB,oper1(OREGEX,yyvsp[-5]),yyvsp[-3],yyvsp[-1]); }
-break;
-case 81:
-#line 254 "a2p.y"
-{ yyval = oper1(OVAR,yyvsp[0]); }
-break;
-case 82:
-#line 256 "a2p.y"
-{ yyval = oper2(OVAR,aryrefarg(yyvsp[-3]),yyvsp[-1]); }
-break;
-case 83:
-#line 258 "a2p.y"
-{ yyval = oper1(OFLD,yyvsp[0]); }
-break;
-case 84:
-#line 260 "a2p.y"
-{ yyval = oper1(OVFLD,yyvsp[0]); }
-break;
-case 87:
-#line 267 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 88:
-#line 271 "a2p.y"
-{ yyval = oper3(OCOMMA,yyvsp[-3],yyvsp[-1],yyvsp[0]); }
-break;
-case 89:
-#line 273 "a2p.y"
-{ yyval = oper3(OCOMMA,yyvsp[-3],yyvsp[-1],yyvsp[0]); }
-break;
-case 90:
-#line 275 "a2p.y"
-{ yyval = yyvsp[-1]; }
-break;
-case 91:
-#line 279 "a2p.y"
-{ yyval = oper2(OJUNK,yyvsp[-1],yyvsp[0]); }
-break;
-case 92:
-#line 281 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 93:
-#line 285 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); }
-break;
-case 94:
-#line 287 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); }
-break;
-case 95:
-#line 289 "a2p.y"
-{ yyval = oper0(ONEWLINE); }
-break;
-case 96:
-#line 291 "a2p.y"
-{ yyval = oper1(OCOMMENT,yyvsp[0]); }
-break;
-case 97:
-#line 295 "a2p.y"
-{ yyval = oper2(OJUNK,yyvsp[-1],yyvsp[0]); }
-break;
-case 98:
-#line 297 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 99:
-#line 301 "a2p.y"
-{ yyval = oper0(ONEWLINE); }
-break;
-case 100:
-#line 303 "a2p.y"
-{ yyval = oper1(OCOMMENT,yyvsp[0]); }
-break;
-case 101:
-#line 308 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSEMICOLON),yyvsp[0]); }
-break;
-case 102:
-#line 310 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0]); }
-break;
-case 103:
-#line 312 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0]); }
-break;
-case 104:
-#line 314 "a2p.y"
-{ yyval = oper2(OJUNK,oper1(OSCOMMENT,yyvsp[-1]),yyvsp[0]); }
-break;
-case 105:
-#line 318 "a2p.y"
-{ yyval = oper2(OSTATES,yyvsp[-1],yyvsp[0]); }
-break;
-case 106:
-#line 320 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 107:
-#line 325 "a2p.y"
-{ yyval = oper2(OJUNK,oper2(OSTATE,yyvsp[-2],yyvsp[-1]),yyvsp[0]); }
-break;
-case 108:
-#line 327 "a2p.y"
-{ yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSEMICOLON),yyvsp[0])); }
-break;
-case 109:
-#line 329 "a2p.y"
-{ yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0])); }
-break;
-case 112:
-#line 335 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 114:
-#line 341 "a2p.y"
-{ yyval = oper3(OPRINT,yyvsp[-2],yyvsp[-1],yyvsp[0]);
- do_opens = TRUE;
- saw_ORS = saw_OFS = TRUE;
- if (!yyvsp[-2]) need_entire = TRUE;
- if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 115:
-#line 347 "a2p.y"
-{ yyval = oper1(OPRINT,yyvsp[0]);
- if (!yyvsp[0]) need_entire = TRUE;
- saw_ORS = saw_OFS = TRUE;
- }
-break;
-case 116:
-#line 352 "a2p.y"
-{ yyval = oper3(OPRINTF,yyvsp[-2],yyvsp[-1],yyvsp[0]);
- do_opens = TRUE;
- if (!yyvsp[-2]) need_entire = TRUE;
- if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 117:
-#line 357 "a2p.y"
-{ yyval = oper1(OPRINTF,yyvsp[0]);
- if (!yyvsp[0]) need_entire = TRUE;
- }
-break;
-case 118:
-#line 361 "a2p.y"
-{ yyval = oper0(OBREAK); }
-break;
-case 119:
-#line 363 "a2p.y"
-{ yyval = oper0(ONEXT); }
-break;
-case 120:
-#line 365 "a2p.y"
-{ yyval = oper0(OEXIT); }
-break;
-case 121:
-#line 367 "a2p.y"
-{ yyval = oper1(OEXIT,yyvsp[0]); }
-break;
-case 122:
-#line 369 "a2p.y"
-{ yyval = oper0(OCONTINUE); }
-break;
-case 123:
-#line 371 "a2p.y"
-{ yyval = oper0(ORETURN); }
-break;
-case 124:
-#line 373 "a2p.y"
-{ yyval = oper1(ORETURN,yyvsp[0]); }
-break;
-case 125:
-#line 375 "a2p.y"
-{ yyval = oper2(ODELETE,aryrefarg(yyvsp[-3]),yyvsp[-1]); }
-break;
-case 126:
-#line 379 "a2p.y"
-{ yyval = oper1(OREDIR,string(">",1)); }
-break;
-case 127:
-#line 381 "a2p.y"
-{ yyval = oper1(OREDIR,string(">>",2)); }
-break;
-case 128:
-#line 383 "a2p.y"
-{ yyval = oper1(OREDIR,string("|",1)); }
-break;
-case 129:
-#line 388 "a2p.y"
-{ yyval = oper2(OIF,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 130:
-#line 390 "a2p.y"
-{ yyval = oper3(OIF,yyvsp[-6],bl(yyvsp[-3],yyvsp[-4]),bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 131:
-#line 392 "a2p.y"
-{ yyval = oper2(OWHILE,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 132:
-#line 394 "a2p.y"
-{ yyval = oper2(ODO,bl(yyvsp[-4],yyvsp[-5]),yyvsp[-1]); }
-break;
-case 133:
-#line 396 "a2p.y"
-{ yyval = oper4(OFOR,yyvsp[-7],yyvsp[-5],yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 134:
-#line 398 "a2p.y"
-{ yyval = oper4(OFOR,yyvsp[-6],string("",0),yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 135:
-#line 400 "a2p.y"
-{ yyval = oper2(OFORIN,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 136:
-#line 402 "a2p.y"
-{ yyval = oper3(OBLOCK,oper2(OJUNK,yyvsp[-3],yyvsp[-2]),Nullop,yyvsp[0]); }
-break;
-#line 2660 "y.tab.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, YYFINAL, yychar, yys);
- }
-#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yyssp, yystate);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- return (1);
-yyaccept:
- return (0);
-}
diff --git a/gnu/usr.bin/pr/COPYING b/gnu/usr.bin/pr/COPYING
deleted file mode 100644
index a43ea21..0000000
--- a/gnu/usr.bin/pr/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/gnu/usr.bin/pr/getopt.h b/gnu/usr.bin/pr/getopt.h
deleted file mode 100644
index 45541f5..0000000
--- a/gnu/usr.bin/pr/getopt.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Declarations for getopt.
- Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef _GETOPT_H
-#define _GETOPT_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
-extern char *optarg;
-
-/* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
-
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns EOF, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
-extern int optind;
-
-/* Callers store zero here to inhibit the error message `getopt' prints
- for unrecognized options. */
-
-extern int opterr;
-
-/* Set to an option character which was unrecognized. */
-
-extern int optopt;
-
-/* Describe the long-named options requested by the application.
- The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
- of `struct option' terminated by an element containing a name which is
- zero.
-
- The field `has_arg' is:
- no_argument (or 0) if the option does not take an argument,
- required_argument (or 1) if the option requires an argument,
- optional_argument (or 2) if the option takes an optional argument.
-
- If the field `flag' is not NULL, it points to a variable that is set
- to the value given in the field `val' when the option is found, but
- left unchanged if the option is not found.
-
- To have a long-named option do something other than set an `int' to
- a compiled-in constant, such as set a value from `optarg', set the
- option's `flag' field to zero and its `val' field to a nonzero
- value (the equivalent single-letter option character, if there is
- one). For long options that have a zero `flag' field, `getopt'
- returns the contents of the `val' field. */
-
-struct option
-{
-#if __STDC__
- const char *name;
-#else
- char *name;
-#endif
- /* has_arg can't be an enum because some compilers complain about
- type mismatches in all the code that assumes it is an int. */
- int has_arg;
- int *flag;
- int val;
-};
-
-/* Names for the values of the `has_arg' field of `struct option'. */
-
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-#if __STDC__
-#if defined(__GNU_LIBRARY__)
-/* Many other libraries have conflicting prototypes for getopt, with
- differences in the consts, in stdlib.h. To avoid compilation
- errors, only prototype getopt for the GNU C library. */
-extern int getopt (int argc, char *const *argv, const char *shortopts);
-#else /* not __GNU_LIBRARY__ */
-extern int getopt ();
-#endif /* not __GNU_LIBRARY__ */
-extern int getopt_long (int argc, char *const *argv, const char *shortopts,
- const struct option *longopts, int *longind);
-extern int getopt_long_only (int argc, char *const *argv,
- const char *shortopts,
- const struct option *longopts, int *longind);
-
-/* Internal only. Users should not call this directly. */
-extern int _getopt_internal (int argc, char *const *argv,
- const char *shortopts,
- const struct option *longopts, int *longind,
- int long_only);
-#else /* not __STDC__ */
-extern int getopt ();
-extern int getopt_long ();
-extern int getopt_long_only ();
-
-extern int _getopt_internal ();
-#endif /* not __STDC__ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GETOPT_H */
diff --git a/gnu/usr.bin/pr/version.h b/gnu/usr.bin/pr/version.h
deleted file mode 100644
index 63de4fd..0000000
--- a/gnu/usr.bin/pr/version.h
+++ /dev/null
@@ -1 +0,0 @@
-extern const char *version_string;
diff --git a/gnu/usr.bin/ptx/ptx.info b/gnu/usr.bin/ptx/ptx.info
deleted file mode 100644
index 3bbd1bb..0000000
--- a/gnu/usr.bin/ptx/ptx.info
+++ /dev/null
@@ -1,496 +0,0 @@
-This is Info file ptx.info, produced by Makeinfo-1.47 from the input
-file ./ptx.texinfo.
-
- This file documents the `ptx' command, which has the purpose of
-generated permuted indices for group of files.
-
- Copyright (C) 1990, 1991, 1993 by the 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 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: ptx.info, Node: Top, Next: Invoking ptx, Prev: (dir), Up: (dir)
-
-Introduction
-************
-
- This is the 0.3 beta release of `ptx', the GNU version of a permuted
-index generator. This software has the main goal of providing a
-replacement for the traditional `ptx' as found on System V machines,
-able to handle small files quickly, while providing a platform for more
-development.
-
- This version reimplements and extends traditional `ptx'. Among
-other things, it can produce a readable "KWIC" (keywords in their
-context) without the need of `nroff', there is also an option to
-produce TeX compatible output. This version does not handle huge input
-files, that is, those files which do not fit in memory all at once.
-
- *Please note* that an overall renaming of all options is
-foreseeable. In fact, GNU ptx specifications are not frozen yet.
-
-* Menu:
-
-* Invoking ptx:: How to use this program
-* Compatibility:: The GNU extensions to `ptx'
-
- -- The Detailed Node Listing --
-
-How to use this program
-
-* General options:: Options which affect general program behaviour.
-* Charset selection:: Underlying character set considerations.
-* Input processing:: Input fields, contexts, and keyword selection.
-* Output formatting:: Types of output format, and sizing the fields.
-
-
-File: ptx.info, Node: Invoking ptx, Next: Compatibility, Prev: Top, Up: Top
-
-How to use this program
-***********************
-
- This tool reads a text file and essentially produces a permuted
-index, with each keyword in its context. The calling sketch is one of:
-
- ptx [OPTION ...] [FILE ...]
-
- or:
-
- ptx -G [OPTION ...] [INPUT [OUTPUT]]
-
- The `-G' (or its equivalent: `--traditional') option disables all
-GNU extensions and revert to traditional mode, thus introducing some
-limitations, and changes several of the program's default option values.
-When `-G' is not specified, GNU extensions are always enabled. GNU
-extensions to `ptx' are documented wherever appropriate in this
-document. See *Note Compatibility:: for an explicit list of them.
-
- Individual options are explained later in this document.
-
- When GNU extensions are enabled, there may be zero, one or several
-FILE after the options. If there is no FILE, the program reads the
-standard input. If there is one or several FILE, they give the name of
-input files which are all read in turn, as if all the input files were
-concatenated. However, there is a full contextual break between each
-file and, when automatic referencing is requested, file names and line
-numbers refer to individual text input files. In all cases, the
-program produces the permuted index onto the standard output.
-
- When GNU extensions are *not* enabled, that is, when the program
-operates in traditional mode, there may be zero, one or two parameters
-besides the options. If there is no parameters, the program reads the
-standard input and produces the permuted index onto the standard output.
-If there is only one parameter, it names the text INPUT to be read
-instead of the standard input. If two parameters are given, they give
-respectively the name of the INPUT file to read and the name of the
-OUTPUT file to produce. *Be very careful* to note that, in this case,
-the contents of file given by the second parameter is destroyed. This
-behaviour is dictated only by System V `ptx' compatibility, because GNU
-Standards discourage output parameters not introduced by an option.
-
- Note that for *any* file named as the value of an option or as an
-input text file, a single dash `-' may be used, in which case standard
-input is assumed. However, it would not make sense to use this
-convention more than once per program invocation.
-
-* Menu:
-
-* General options:: Options which affect general program behaviour.
-* Charset selection:: Underlying character set considerations.
-* Input processing:: Input fields, contexts, and keyword selection.
-* Output formatting:: Types of output format, and sizing the fields.
-
-
-File: ptx.info, Node: General options, Next: Charset selection, Prev: Invoking ptx, Up: Invoking ptx
-
-General options
-===============
-
-`-C'
-`--copyright'
- Prints a short note about the Copyright and copying conditions,
- then exit without further processing.
-
-`-G'
-`--traditional'
- As already explained, this option disables all GNU extensions to
- `ptx' and switch to traditional mode.
-
-`--help'
- Prints a short help on standard output, then exit without further
- processing.
-
-`--version'
- Prints the program verison on standard output, then exit without
- further processing.
-
-
-File: ptx.info, Node: Charset selection, Next: Input processing, Prev: General options, Up: Invoking ptx
-
-Charset selection
-=================
-
- As it is setup now, the program assumes that the input file is coded
-using 8-bit ISO 8859-1 code, also known as Latin-1 character set,
-*unless* if it is compiled for MS-DOS, in which case it uses the
-character set of the IBM-PC. (GNU `ptx' is not known to work on
-smaller MS-DOS machines anymore.) Compared to 7-bit ASCII, the set of
-characters which are letters is then different, this fact alters the
-behaviour of regular expression matching. Thus, the default regular
-expression for a keyword allows foreign or diacriticized letters.
-Keyword sorting, however, is still crude; it obeys the underlying
-character set ordering quite blindly.
-
-`-f'
-`--ignore-case'
- Fold lower case letters to upper case for sorting.
-
-
-File: ptx.info, Node: Input processing, Next: Output formatting, Prev: Charset selection, Up: Invoking ptx
-
-Word selection
-==============
-
-`-b FILE'
-`--break-file=FILE'
- This option is an alternative way to option `-W' for describing
- which characters make up words. This option introduces the name
- of a file which contains a list of characters which can*not* be
- part of one word, this file is called the "Break file". Any
- character which is not part of the Break file is a word
- constituent. If both options `-b' and `-W' are specified, then
- `-W' has precedence and `-b' is ignored.
-
- When GNU extensions are enabled, the only way to avoid newline as a
- break character is to write all the break characters in the file
- with no newline at all, not even at the end of the file. When GNU
- extensions are disabled, spaces, tabs and newlines are always
- considered as break characters even if not included in the Break
- file.
-
-`-i FILE'
-`--ignore-file=FILE'
- The file associated with this option contains a list of words
- which will never be taken as keywords in concordance output. It
- is called the "Ignore file". The file contains exactly one word
- in each line; the end of line separation of words is not subject
- to the value of the `-S' option.
-
- There is a default Ignore file used by `ptx' when this option is
- not specified, usually found in `/usr/local/lib/eign' if this has
- not been changed at installation time. If you want to deactivate
- the default Ignore file, specify `/dev/null' instead.
-
-`-o FILE'
-`--only-file=FILE'
- The file associated with this option contains a list of words
- which will be retained in concordance output, any word not
- mentioned in this file is ignored. The file is called the "Only
- file". The file contains exactly one word in each line; the end
- of line separation of words is not subject to the value of the
- `-S' option.
-
- There is no default for the Only file. In the case there are both
- an Only file and an Ignore file, a word will be subject to be a
- keyword only if it is given in the Only file and not given in the
- Ignore file.
-
-`-r'
-`--references'
- On each input line, the leading sequence of non white characters
- will be taken to be a reference that has the purpose of
- identifying this input line on the produced permuted index. See
- *Note Output formatting:: for more information about reference
- production. Using this option change the default value for option
- `-S'.
-
- Using this option, the program does not try very hard to remove
- references from contexts in output, but it succeeds in doing so
- *when* the context ends exactly at the newline. If option `-r' is
- used with `-S' default value, or when GNU extensions are disabled,
- this condition is always met and references are completely
- excluded from the output contexts.
-
-`-S REGEXP'
-`--sentence-regexp=REGEXP'
- This option selects which regular expression will describe the end
- of a line or the end of a sentence. In fact, there is other
- distinction between end of lines or end of sentences than the
- effect of this regular expression, and input line boundaries have
- no special significance outside this option. By default, when GNU
- extensions are enabled and if `-r' option is not used, end of
- sentences are used. In this case, the precise REGEX is imported
- from GNU emacs:
-
- [.?!][]\"')}]*\\($\\|\t\\| \\)[ \t\n]*
-
- Whenever GNU extensions are disabled or if `-r' option is used, end
- of lines are used; in this case, the default REGEXP is just:
-
- \n
-
- Using an empty REGEXP is equivalent to completely disabling end of
- line or end of sentence recognition. In this case, the whole file
- is considered to be a single big line or sentence. The user might
- want to disallow all truncation flag generation as well, through
- option `-F ""'. *Note Syntax of Regular Expressions:
- (emacs)Regexps.
-
- When the keywords happen to be near the beginning of the input
- line or sentence, this often creates an unused area at the
- beginning of the output context line; when the keywords happen to
- be near the end of the input line or sentence, this often creates
- an unused area at the end of the output context line. The program
- tries to fill those unused areas by wrapping around context in
- them; the tail of the input line or sentence is used to fill the
- unused area on the left of the output line; the head of the input
- line or sentence is used to fill the unused area on the right of
- the output line.
-
- As a matter of convenience to the user, many usual backslashed
- escape sequences, as found in the C language, are recognized and
- converted to the corresponding characters by `ptx' itself.
-
-`-W REGEXP'
-`--word-regexp=REGEXP'
- This option selects which regular expression will describe each
- keyword. By default, if GNU extensions are enabled, a word is a
- sequence of letters; the REGEXP used is `\w+'. When GNU
- extensions are disabled, a word is by default anything which ends
- with a space, a tab or a newline; the REGEXP used is `[^ \t\n]+'.
-
- An empty REGEXP is equivalent to not using this option, letting the
- default dive in. *Note Syntax of Regular Expressions:
- (emacs)Regexps.
-
- As a matter of convenience to the user, many usual backslashed
- escape sequences, as found in the C language, are recognized and
- converted to the corresponding characters by `ptx' itself.
-
-
-File: ptx.info, Node: Output formatting, Prev: Input processing, Up: Invoking ptx
-
-Output formatting
-=================
-
- Output format is mainly controlled by `-O' and `-T' options,
-described in the table below. When neither `-O' nor `-T' is selected,
-and if GNU extensions are enabled, the program choose an output format
-suited for a dumb terminal. Each keyword occurrence is output to the
-center of one line, surrounded by its left and right contexts. Each
-field is properly justified, so the concordance output could readily be
-observed. As a special feature, if automatic references are selected
-by option `-A' and are output before the left context, that is, if
-option `-R' is *not* selected, then a colon is added after the
-reference; this nicely interfaces with GNU Emacs `next-error'
-processing. In this default output format, each white space character,
-like newline and tab, is merely changed to exactly one space, with no
-special attempt to compress consecutive spaces. This might change in
-the future. Except for those white space characters, every other
-character of the underlying set of 256 characters is transmitted
-verbatim.
-
- Output format is further controlled by the following options.
-
-`-g NUMBER'
-`--gap-size=NUMBER'
- Select the size of the minimum white gap between the fields on the
- output line.
-
-`-w NUMBER'
-`--width=NUMBER'
- Select the output maximum width of each final line. If references
- are used, they are included or excluded from the output maximum
- width depending on the value of option `-R'. If this option is not
- selected, that is, when references are output before the left
- context, the output maximum width takes into account the maximum
- length of all references. If this options is selected, that is,
- when references are output after the right context, the output
- maximum width does not take into account the space taken by
- references, nor the gap that precedes them.
-
-`-A'
-`--auto-reference'
- Select automatic references. Each input line will have an
- automatic reference made up of the file name and the line ordinal,
- with a single colon between them. However, the file name will be
- empty when standard input is being read. If both `-A' and `-r'
- are selected, then the input reference is still read and skipped,
- but the automatic reference is used at output time, overriding the
- input reference.
-
-`-R'
-`--right-side-refs'
- In default output format, when option `-R' is not used, any
- reference produced by the effect of options `-r' or `-A' are given
- to the far right of output lines, after the right context. In
- default output format, when option `-R' is specified, references
- are rather given to the beginning of each output line, before the
- left context. For any other output format, option `-R' is almost
- ignored, except for the fact that the width of references is *not*
- taken into account in total output width given by `-w' whenever
- `-R' is selected.
-
- This option is automatically selected whenever GNU extensions are
- disabled.
-
-`-F STRING'
-`--flac-truncation=STRING'
- This option will request that any truncation in the output be
- reported using the string STRING. Most output fields
- theoretically extend towards the beginning or the end of the
- current line, or current sentence, as selected with option `-S'.
- But there is a maximum allowed output line width, changeable
- through option `-w', which is further divided into space for
- various output fields. When a field has to be truncated because
- cannot extend until the beginning or the end of the current line
- to fit in the, then a truncation occurs. By default, the string
- used is a single slash, as in `-F /'.
-
- STRING may have more than one character, as in `-F ...'. Also, in
- the particular case STRING is empty (`-F ""'), truncation flagging
- is disabled, and no truncation marks are appended in this case.
-
- As a matter of convenience to the user, many usual backslashed
- escape sequences, as found in the C language, are recognized and
- converted to the corresponding characters by `ptx' itself.
-
-`-M STRING'
-`--macro-name=STRING'
- Select another STRING to be used instead of `xx', while generating
- output suitable for `nroff', `troff' or TeX.
-
-`-O'
-`--format=roff'
- Choose an output format suitable for `nroff' or `troff'
- processing. Each output line will look like:
-
- .xx "TAIL" "BEFORE" "KEYWORD_AND_AFTER" "HEAD" "REF"
-
- so it will be possible to write an `.xx' roff macro to take care of
- the output typesetting. This is the default output format when GNU
- extensions are disabled. Option `-M' might be used to change `xx'
- to another macro name.
-
- In this output format, each non-graphical character, like newline
- and tab, is merely changed to exactly one space, with no special
- attempt to compress consecutive spaces. Each quote character: `"'
- is doubled so it will be correctly processed by `nroff' or `troff'.
-
-`-T'
-`--format=tex'
- Choose an output format suitable for TeX processing. Each output
- line will look like:
-
- \xx {TAIL}{BEFORE}{KEYWORD}{AFTER}{HEAD}{REF}
-
- so it will be possible to write write a `\xx' definition to take
- care of the output typesetting. Note that when references are not
- being produced, that is, neither option `-A' nor option `-r' is
- selected, the last parameter of each `\xx' call is inhibited.
- Option `-M' might be used to change `xx' to another macro name.
-
- In this output format, some special characters, like `$', `%',
- `&', `#' and `_' are automatically protected with a backslash.
- Curly brackets `{', `}' are also protected with a backslash, but
- also enclosed in a pair of dollar signs to force mathematical
- mode. The backslash itself produces the sequence `\backslash{}'.
- Circumflex and tilde diacritics produce the sequence `^\{ }' and
- `~\{ }' respectively. Other diacriticized characters of the
- underlying character set produce an appropriate TeX sequence as
- far as possible. The other non-graphical characters, like newline
- and tab, and all others characters which are not part of ASCII,
- are merely changed to exactly one space, with no special attempt
- to compress consecutive spaces. Let me know how to improve this
- special character processing for TeX.
-
-
-File: ptx.info, Node: Compatibility, Prev: Invoking ptx, Up: Top
-
-The GNU extensions to `ptx'
-***************************
-
- This version of `ptx' contains a few features which do not exist in
-System V `ptx'. These extra features are suppressed by using the `-G'
-command line option, unless overridden by other command line options.
-Some GNU extensions cannot be recovered by overriding, so the simple
-rule is to avoid `-G' if you care about GNU extensions. Here are the
-differences between this program and System V `ptx'.
-
- * This program can read many input files at once, it always writes
- the resulting concordance on standard output. On the other end,
- System V `ptx' reads only one file and produce the result on
- standard output or, if a second FILE parameter is given on the
- command, to that FILE.
-
- Having output parameters not introduced by options is a quite
- dangerous practice which GNU avoids as far as possible. So, for
- using `ptx' portably between GNU and System V, you should pay
- attention to always use it with a single input file, and always
- expect the result on standard output. You might also want to
- automatically configure in a `-G' option to `ptx' calls in
- products using `ptx', if the configurator finds that the installed
- `ptx' accepts `-G'.
-
- * The only options available in System V `ptx' are options `-b',
- `-f', `-g', `-i', `-o', `-r', `-t' and `-w'. All other options
- are GNU extensions and are not repeated in this enumeration.
- Moreover, some options have a slightly different meaning when GNU
- extensions are enabled, as explained below.
-
- * By default, concordance output is not formatted for `troff' or
- `nroff'. It is rather formatted for a dumb terminal. `troff' or
- `nroff' output may still be selected through option `-O'.
-
- * Unless `-R' option is used, the maximum reference width is
- subtracted from the total output line width. With GNU extensions
- disabled, width of references is not taken into account in the
- output line width computations.
-
- * All 256 characters, even `NUL's, are always read and processed from
- input file with no adverse effect, even if GNU extensions are
- disabled. However, System V `ptx' does not accept 8-bit
- characters, a few control characters are rejected, and the tilda
- `~' is condemned.
-
- * Input line length is only limited by available memory, even if GNU
- extensions are disabled. However, System V `ptx' processes only
- the first 200 characters in each line.
-
- * The break (non-word) characters default to be every character
- except all letters of the underlying character set, diacriticized
- or not. When GNU extensions are disabled, the break characters
- default to space, tab and newline only.
-
- * The program makes better use of output line width. If GNU
- extensions are disabled, the program rather tries to imitate
- System V `ptx', but still, there are some slight disposition
- glitches this program does not completely reproduce.
-
- * The user can specify both an Ignore file and an Only file. This
- is not allowed with System V `ptx'.
-
-
-
-Tag Table:
-Node: Top939
-Node: Invoking ptx2298
-Node: General options5025
-Node: Charset selection5639
-Node: Input processing6514
-Node: Output formatting12205
-Node: Compatibility18737
-
-End Tag Table
diff --git a/gnu/usr.bin/ptx/ptx.texinfo b/gnu/usr.bin/ptx/ptx.texinfo
deleted file mode 100644
index e690c55..0000000
--- a/gnu/usr.bin/ptx/ptx.texinfo
+++ /dev/null
@@ -1,554 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header
-@setfilename ptx.info
-@settitle GNU @code{ptx} reference manual
-@finalout
-@c %**end of header
-
-@ifinfo
-This file documents the @code{ptx} command, which has the purpose of
-generated permuted indices for group of files.
-
-Copyright (C) 1990, 1991, 1993 by the 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.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end ifinfo
-
-@titlepage
-@title ptx
-@subtitle The GNU permuted indexer
-@subtitle Edition 0.3, for ptx version 0.3
-@subtitle November 1993
-@author by Francois Pinard
-
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1990, 1991, 1993 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 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 titlepage
-
-@node Top, Invoking ptx, (dir), (dir)
-@chapter Introduction
-
-This is the 0.3 beta release of @code{ptx}, the GNU version of a
-permuted index generator. This software has the main goal of providing
-a replacement for the traditional @code{ptx} as found on System V
-machines, able to handle small files quickly, while providing a platform
-for more development.
-
-This version reimplements and extends traditional @code{ptx}. Among
-other things, it can produce a readable @dfn{KWIC} (keywords in their
-context) without the need of @code{nroff}, there is also an option to
-produce @TeX{} compatible output. This version does not handle huge
-input files, that is, those files which do not fit in memory all at
-once.
-
-@emph{Please note} that an overall renaming of all options is
-foreseeable. In fact, GNU ptx specifications are not frozen yet.
-
-@menu
-* Invoking ptx:: How to use this program
-* Compatibility:: The GNU extensions to @code{ptx}
-
- --- The Detailed Node Listing ---
-
-How to use this program
-
-* General options:: Options which affect general program behaviour.
-* Charset selection:: Underlying character set considerations.
-* Input processing:: Input fields, contexts, and keyword selection.
-* Output formatting:: Types of output format, and sizing the fields.
-@end menu
-
-@node Invoking ptx, Compatibility, Top, Top
-@chapter How to use this program
-
-This tool reads a text file and essentially produces a permuted index, with
-each keyword in its context. The calling sketch is one of:
-
-@example
-ptx [@var{option} @dots{}] [@var{file} @dots{}]
-@end example
-
-or:
-
-@example
-ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
-@end example
-
-The @samp{-G} (or its equivalent: @samp{--traditional}) option disables
-all GNU extensions and revert to traditional mode, thus introducing some
-limitations, and changes several of the program's default option values.
-When @samp{-G} is not specified, GNU extensions are always enabled. GNU
-extensions to @code{ptx} are documented wherever appropriate in this
-document. See @xref{Compatibility} for an explicit list of them.
-
-Individual options are explained later in this document.
-
-When GNU extensions are enabled, there may be zero, one or several
-@var{file} after the options. If there is no @var{file}, the program
-reads the standard input. If there is one or several @var{file}, they
-give the name of input files which are all read in turn, as if all the
-input files were concatenated. However, there is a full contextual
-break between each file and, when automatic referencing is requested,
-file names and line numbers refer to individual text input files. In
-all cases, the program produces the permuted index onto the standard
-output.
-
-When GNU extensions are @emph{not} enabled, that is, when the program
-operates in traditional mode, there may be zero, one or two parameters
-besides the options. If there is no parameters, the program reads the
-standard input and produces the permuted index onto the standard output.
-If there is only one parameter, it names the text @var{input} to be read
-instead of the standard input. If two parameters are given, they give
-respectively the name of the @var{input} file to read and the name of
-the @var{output} file to produce. @emph{Be very careful} to note that,
-in this case, the contents of file given by the second parameter is
-destroyed. This behaviour is dictated only by System V @code{ptx}
-compatibility, because GNU Standards discourage output parameters not
-introduced by an option.
-
-Note that for @emph{any} file named as the value of an option or as an
-input text file, a single dash @kbd{-} may be used, in which case
-standard input is assumed. However, it would not make sense to use this
-convention more than once per program invocation.
-
-@menu
-* General options:: Options which affect general program behaviour.
-* Charset selection:: Underlying character set considerations.
-* Input processing:: Input fields, contexts, and keyword selection.
-* Output formatting:: Types of output format, and sizing the fields.
-@end menu
-
-@node General options, Charset selection, Invoking ptx, Invoking ptx
-@section General options
-
-@table @code
-
-@item -C
-@itemx --copyright
-Prints a short note about the Copyright and copying conditions, then
-exit without further processing.
-
-@item -G
-@itemx --traditional
-As already explained, this option disables all GNU extensions to
-@code{ptx} and switch to traditional mode.
-
-@item --help
-Prints a short help on standard output, then exit without further
-processing.
-
-@item --version
-Prints the program verison on standard output, then exit without further
-processing.
-
-@end table
-
-@node Charset selection, Input processing, General options, Invoking ptx
-@section Charset selection
-
-As it is setup now, the program assumes that the input file is coded
-using 8-bit ISO 8859-1 code, also known as Latin-1 character set,
-@emph{unless} if it is compiled for MS-DOS, in which case it uses the
-character set of the IBM-PC. (GNU @code{ptx} is not known to work on
-smaller MS-DOS machines anymore.) Compared to 7-bit ASCII, the set of
-characters which are letters is then different, this fact alters the
-behaviour of regular expression matching. Thus, the default regular
-expression for a keyword allows foreign or diacriticized letters.
-Keyword sorting, however, is still crude; it obeys the underlying
-character set ordering quite blindly.
-
-@table @code
-
-@item -f
-@itemx --ignore-case
-Fold lower case letters to upper case for sorting.
-
-@end table
-
-@node Input processing, Output formatting, Charset selection, Invoking ptx
-@section Word selection
-
-@table @code
-
-@item -b @var{file}
-@item --break-file=@var{file}
-
-This option is an alternative way to option @code{-W} for describing
-which characters make up words. This option introduces the name of a
-file which contains a list of characters which can@emph{not} be part of
-one word, this file is called the @dfn{Break file}. Any character which
-is not part of the Break file is a word constituent. If both options
-@code{-b} and @code{-W} are specified, then @code{-W} has precedence and
-@code{-b} is ignored.
-
-When GNU extensions are enabled, the only way to avoid newline as a
-break character is to write all the break characters in the file with no
-newline at all, not even at the end of the file. When GNU extensions
-are disabled, spaces, tabs and newlines are always considered as break
-characters even if not included in the Break file.
-
-@item -i @var{file}
-@itemx --ignore-file=@var{file}
-
-The file associated with this option contains a list of words which will
-never be taken as keywords in concordance output. It is called the
-@dfn{Ignore file}. The file contains exactly one word in each line; the
-end of line separation of words is not subject to the value of the
-@code{-S} option.
-
-There is a default Ignore file used by @code{ptx} when this option is
-not specified, usually found in @file{/usr/local/lib/eign} if this has
-not been changed at installation time. If you want to deactivate the
-default Ignore file, specify @code{/dev/null} instead.
-
-@item -o @var{file}
-@itemx --only-file=@var{file}
-
-The file associated with this option contains a list of words which will
-be retained in concordance output, any word not mentioned in this file
-is ignored. The file is called the @dfn{Only file}. The file contains
-exactly one word in each line; the end of line separation of words is
-not subject to the value of the @code{-S} option.
-
-There is no default for the Only file. In the case there are both an
-Only file and an Ignore file, a word will be subject to be a keyword
-only if it is given in the Only file and not given in the Ignore file.
-
-@item -r
-@itemx --references
-
-On each input line, the leading sequence of non white characters will be
-taken to be a reference that has the purpose of identifying this input
-line on the produced permuted index. See @xref{Output formatting} for
-more information about reference production. Using this option change
-the default value for option @code{-S}.
-
-Using this option, the program does not try very hard to remove
-references from contexts in output, but it succeeds in doing so
-@emph{when} the context ends exactly at the newline. If option
-@code{-r} is used with @code{-S} default value, or when GNU extensions
-are disabled, this condition is always met and references are completely
-excluded from the output contexts.
-
-@item -S @var{regexp}
-@itemx --sentence-regexp=@var{regexp}
-
-This option selects which regular expression will describe the end of a
-line or the end of a sentence. In fact, there is other distinction
-between end of lines or end of sentences than the effect of this regular
-expression, and input line boundaries have no special significance
-outside this option. By default, when GNU extensions are enabled and if
-@code{-r} option is not used, end of sentences are used. In this
-case, the precise @var{regex} is imported from GNU emacs:
-
-@example
-[.?!][]\"')@}]*\\($\\|\t\\| \\)[ \t\n]*
-@end example
-
-Whenever GNU extensions are disabled or if @code{-r} option is used, end
-of lines are used; in this case, the default @var{regexp} is just:
-
-@example
-\n
-@end example
-
-Using an empty REGEXP is equivalent to completely disabling end of line or end
-of sentence recognition. In this case, the whole file is considered to
-be a single big line or sentence. The user might want to disallow all
-truncation flag generation as well, through option @code{-F ""}.
-@xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
-Manual}.
-
-When the keywords happen to be near the beginning of the input line or
-sentence, this often creates an unused area at the beginning of the
-output context line; when the keywords happen to be near the end of the
-input line or sentence, this often creates an unused area at the end of
-the output context line. The program tries to fill those unused areas
-by wrapping around context in them; the tail of the input line or
-sentence is used to fill the unused area on the left of the output line;
-the head of the input line or sentence is used to fill the unused area
-on the right of the output line.
-
-As a matter of convenience to the user, many usual backslashed escape
-sequences, as found in the C language, are recognized and converted to
-the corresponding characters by @code{ptx} itself.
-
-@item -W @var{regexp}
-@itemx --word-regexp=@var{regexp}
-
-This option selects which regular expression will describe each keyword.
-By default, if GNU extensions are enabled, a word is a sequence of
-letters; the @var{regexp} used is @code{\w+}. When GNU extensions are
-disabled, a word is by default anything which ends with a space, a tab
-or a newline; the @var{regexp} used is @code{[^ \t\n]+}.
-
-An empty REGEXP is equivalent to not using this option, letting the
-default dive in. @xref{Regexps, , Syntax of Regular Expressions, emacs,
-The GNU Emacs Manual}.
-
-As a matter of convenience to the user, many usual backslashed escape
-sequences, as found in the C language, are recognized and converted to
-the corresponding characters by @code{ptx} itself.
-
-@end table
-
-@node Output formatting, , Input processing, Invoking ptx
-@section Output formatting
-
-Output format is mainly controlled by @code{-O} and @code{-T} options,
-described in the table below. When neither @code{-O} nor @code{-T} is
-selected, and if GNU extensions are enabled, the program choose an
-output format suited for a dumb terminal. Each keyword occurrence is
-output to the center of one line, surrounded by its left and right
-contexts. Each field is properly justified, so the concordance output
-could readily be observed. As a special feature, if automatic
-references are selected by option @code{-A} and are output before the
-left context, that is, if option @code{-R} is @emph{not} selected, then
-a colon is added after the reference; this nicely interfaces with GNU
-Emacs @code{next-error} processing. In this default output format, each
-white space character, like newline and tab, is merely changed to
-exactly one space, with no special attempt to compress consecutive
-spaces. This might change in the future. Except for those white space
-characters, every other character of the underlying set of 256
-characters is transmitted verbatim.
-
-Output format is further controlled by the following options.
-
-@table @code
-
-@item -g @var{number}
-@itemx --gap-size=@var{number}
-
-Select the size of the minimum white gap between the fields on the output
-line.
-
-@item -w @var{number}
-@itemx --width=@var{number}
-
-Select the output maximum width of each final line. If references are
-used, they are included or excluded from the output maximum width
-depending on the value of option @code{-R}. If this option is not
-selected, that is, when references are output before the left context,
-the output maximum width takes into account the maximum length of all
-references. If this options is selected, that is, when references are
-output after the right context, the output maximum width does not take
-into account the space taken by references, nor the gap that precedes
-them.
-
-@item -A
-@itemx --auto-reference
-
-Select automatic references. Each input line will have an automatic
-reference made up of the file name and the line ordinal, with a single
-colon between them. However, the file name will be empty when standard
-input is being read. If both @code{-A} and @code{-r} are selected, then
-the input reference is still read and skipped, but the automatic
-reference is used at output time, overriding the input reference.
-
-@item -R
-@itemx --right-side-refs
-
-In default output format, when option @code{-R} is not used, any
-reference produced by the effect of options @code{-r} or @code{-A} are
-given to the far right of output lines, after the right context. In
-default output format, when option @code{-R} is specified, references
-are rather given to the beginning of each output line, before the left
-context. For any other output format, option @code{-R} is almost
-ignored, except for the fact that the width of references is @emph{not}
-taken into account in total output width given by @code{-w} whenever
-@code{-R} is selected.
-
-This option is automatically selected whenever GNU extensions are
-disabled.
-
-@item -F @var{string}
-@itemx --flac-truncation=@var{string}
-
-This option will request that any truncation in the output be reported
-using the string @var{string}. Most output fields theoretically extend
-towards the beginning or the end of the current line, or current
-sentence, as selected with option @code{-S}. But there is a maximum
-allowed output line width, changeable through option @code{-w}, which is
-further divided into space for various output fields. When a field has
-to be truncated because cannot extend until the beginning or the end of
-the current line to fit in the, then a truncation occurs. By default,
-the string used is a single slash, as in @code{-F /}.
-
-@var{string} may have more than one character, as in @code{-F ...}.
-Also, in the particular case @var{string} is empty (@code{-F ""}),
-truncation flagging is disabled, and no truncation marks are appended in
-this case.
-
-As a matter of convenience to the user, many usual backslashed escape
-sequences, as found in the C language, are recognized and converted to
-the corresponding characters by @code{ptx} itself.
-
-@item -M @var{string}
-@itemx --macro-name=@var{string}
-
-Select another @var{string} to be used instead of @samp{xx}, while
-generating output suitable for @code{nroff}, @code{troff} or @TeX{}.
-
-@item -O
-@itemx --format=roff
-
-Choose an output format suitable for @code{nroff} or @code{troff}
-processing. Each output line will look like:
-
-@example
-.xx "@var{tail}" "@var{before}" "@var{keyword_and_after}" "@var{head}" "@var{ref}"
-@end example
-
-so it will be possible to write an @samp{.xx} roff macro to take care of
-the output typesetting. This is the default output format when GNU
-extensions are disabled. Option @samp{-M} might be used to change
-@samp{xx} to another macro name.
-
-In this output format, each non-graphical character, like newline and
-tab, is merely changed to exactly one space, with no special attempt to
-compress consecutive spaces. Each quote character: @kbd{"} is doubled
-so it will be correctly processed by @code{nroff} or @code{troff}.
-
-@item -T
-@itemx --format=tex
-
-Choose an output format suitable for @TeX{} processing. Each output
-line will look like:
-
-@example
-\xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@{@var{after}@}@{@var{head}@}@{@var{ref}@}
-@end example
-
-@noindent
-so it will be possible to write write a @code{\xx} definition to take
-care of the output typesetting. Note that when references are not being
-produced, that is, neither option @code{-A} nor option @code{-r} is
-selected, the last parameter of each @code{\xx} call is inhibited.
-Option @samp{-M} might be used to change @samp{xx} to another macro
-name.
-
-In this output format, some special characters, like @kbd{$}, @kbd{%},
-@kbd{&}, @kbd{#} and @kbd{_} are automatically protected with a
-backslash. Curly brackets @kbd{@{}, @kbd{@}} are also protected with a
-backslash, but also enclosed in a pair of dollar signs to force
-mathematical mode. The backslash itself produces the sequence
-@code{\backslash@{@}}. Circumflex and tilde diacritics produce the
-sequence @code{^\@{ @}} and @code{~\@{ @}} respectively. Other
-diacriticized characters of the underlying character set produce an
-appropriate @TeX{} sequence as far as possible. The other non-graphical
-characters, like newline and tab, and all others characters which are
-not part of ASCII, are merely changed to exactly one space, with no
-special attempt to compress consecutive spaces. Let me know how to
-improve this special character processing for @TeX{}.
-
-@end table
-
-@node Compatibility, , Invoking ptx, Top
-@chapter The GNU extensions to @code{ptx}
-
-This version of @code{ptx} contains a few features which do not exist in
-System V @code{ptx}. These extra features are suppressed by using the
-@samp{-G} command line option, unless overridden by other command line
-options. Some GNU extensions cannot be recovered by overriding, so the
-simple rule is to avoid @samp{-G} if you care about GNU extensions.
-Here are the differences between this program and System V @code{ptx}.
-
-@itemize @bullet
-
-@item
-This program can read many input files at once, it always writes the
-resulting concordance on standard output. On the other end, System V
-@code{ptx} reads only one file and produce the result on standard output
-or, if a second @var{file} parameter is given on the command, to that
-@var{file}.
-
-Having output parameters not introduced by options is a quite dangerous
-practice which GNU avoids as far as possible. So, for using @code{ptx}
-portably between GNU and System V, you should pay attention to always
-use it with a single input file, and always expect the result on
-standard output. You might also want to automatically configure in a
-@samp{-G} option to @code{ptx} calls in products using @code{ptx}, if
-the configurator finds that the installed @code{ptx} accepts @samp{-G}.
-
-@item
-The only options available in System V @code{ptx} are options @samp{-b},
-@samp{-f}, @samp{-g}, @samp{-i}, @samp{-o}, @samp{-r}, @samp{-t} and
-@samp{-w}. All other options are GNU extensions and are not repeated in
-this enumeration. Moreover, some options have a slightly different
-meaning when GNU extensions are enabled, as explained below.
-
-@item
-By default, concordance output is not formatted for @code{troff} or
-@code{nroff}. It is rather formatted for a dumb terminal. @code{troff}
-or @code{nroff} output may still be selected through option @code{-O}.
-
-@item
-Unless @code{-R} option is used, the maximum reference width is
-subtracted from the total output line width. With GNU extensions
-disabled, width of references is not taken into account in the output
-line width computations.
-
-@item
-All 256 characters, even @kbd{NUL}s, are always read and processed from
-input file with no adverse effect, even if GNU extensions are disabled.
-However, System V @code{ptx} does not accept 8-bit characters, a few
-control characters are rejected, and the tilda @kbd{~} is condemned.
-
-@item
-Input line length is only limited by available memory, even if GNU
-extensions are disabled. However, System V @code{ptx} processes only
-the first 200 characters in each line.
-
-@item
-The break (non-word) characters default to be every character except all
-letters of the underlying character set, diacriticized or not. When GNU
-extensions are disabled, the break characters default to space, tab and
-newline only.
-
-@item
-The program makes better use of output line width. If GNU extensions
-are disabled, the program rather tries to imitate System V @code{ptx},
-but still, there are some slight disposition glitches this program does
-not completely reproduce.
-
-@item
-The user can specify both an Ignore file and an Only file. This is not
-allowed with System V @code{ptx}.
-
-@end itemize
-
-@bye
diff --git a/gnu/usr.bin/tar/regex.h b/gnu/usr.bin/tar/regex.h
deleted file mode 100644
index 0840861..0000000
--- a/gnu/usr.bin/tar/regex.h
+++ /dev/null
@@ -1,490 +0,0 @@
-/* Definitions for data structures and routines for the regular
- expression library, version 0.11.
-
- Copyright (C) 1985, 89, 90, 91, 92 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef __REGEXP_LIBRARY_H__
-#define __REGEXP_LIBRARY_H__
-
-/* POSIX says that <sys/types.h> must be included (by the caller) before
- <regex.h>. */
-
-#ifdef VMS
-/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
- should be there. */
-#include <stddef.h>
-#endif
-
-
-/* The following bits are used to determine the regexp syntax we
- recognize. The set/not-set meanings are chosen so that Emacs syntax
- remains the value 0. The bits are given in alphabetical order, and
- the definitions shifted by one from the previous bit; thus, when we
- add or remove a bit, only one other definition need change. */
-typedef unsigned reg_syntax_t;
-
-/* If this bit is not set, then \ inside a bracket expression is literal.
- If set, then such a \ quotes the following character. */
-#define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
-
-/* If this bit is not set, then + and ? are operators, and \+ and \? are
- literals.
- If set, then \+ and \? are operators and + and ? are literals. */
-#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
-
-/* If this bit is set, then character classes are supported. They are:
- [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
- [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
- If not set, then character classes are not supported. */
-#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
-
-/* If this bit is set, then ^ and $ are always anchors (outside bracket
- expressions, of course).
- If this bit is not set, then it depends:
- ^ is an anchor if it is at the beginning of a regular
- expression or after an open-group or an alternation operator;
- $ is an anchor if it is at the end of a regular expression, or
- before a close-group or an alternation operator.
-
- This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
- POSIX draft 11.2 says that * etc. in leading positions is undefined.
- We already implemented a previous draft which made those constructs
- invalid, though, so we haven't changed the code back. */
-#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
-
-/* If this bit is set, then special characters are always special
- regardless of where they are in the pattern.
- If this bit is not set, then special characters are special only in
- some contexts; otherwise they are ordinary. Specifically,
- * + ? and intervals are only special when not after the beginning,
- open-group, or alternation operator. */
-#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
-
-/* If this bit is set, then *, +, ?, and { cannot be first in an re or
- immediately after an alternation or begin-group operator. */
-#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
-
-/* If this bit is set, then . matches newline.
- If not set, then it doesn't. */
-#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
-
-/* If this bit is set, then . doesn't match NUL.
- If not set, then it does. */
-#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
-
-/* If this bit is set, nonmatching lists [^...] do not match newline.
- If not set, they do. */
-#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
-
-/* If this bit is set, either \{...\} or {...} defines an
- interval, depending on RE_NO_BK_BRACES.
- If not set, \{, \}, {, and } are literals. */
-#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
-
-/* If this bit is set, +, ? and | aren't recognized as operators.
- If not set, they are. */
-#define RE_LIMITED_OPS (RE_INTERVALS << 1)
-
-/* If this bit is set, newline is an alternation operator.
- If not set, newline is literal. */
-#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
-
-/* If this bit is set, then `{...}' defines an interval, and \{ and \}
- are literals.
- If not set, then `\{...\}' defines an interval. */
-#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
-
-/* If this bit is set, (...) defines a group, and \( and \) are literals.
- If not set, \(...\) defines a group, and ( and ) are literals. */
-#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
-
-/* If this bit is set, then \<digit> matches <digit>.
- If not set, then \<digit> is a back-reference. */
-#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
-
-/* If this bit is set, then | is an alternation operator, and \| is literal.
- If not set, then \| is an alternation operator, and | is literal. */
-#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
-
-/* If this bit is set, then an ending range point collating higher
- than the starting range point, as in [z-a], is invalid.
- If not set, then when ending range point collates higher than the
- starting range point, the range is ignored. */
-#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
-
-/* If this bit is set, then an unmatched ) is ordinary.
- If not set, then an unmatched ) is invalid. */
-#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
-
-/* This global variable defines the particular regexp syntax to use (for
- some interfaces). When a regexp is compiled, the syntax used is
- stored in the pattern buffer, so changing this does not affect
- already-compiled regexps. */
-extern reg_syntax_t re_syntax_options;
-
-/* Define combinations of the above bits for the standard possibilities.
- (The [[[ comments delimit what gets put into the Texinfo file, so
- don't delete them!) */
-/* [[[begin syntaxes]]] */
-#define RE_SYNTAX_EMACS 0
-
-#define RE_SYNTAX_AWK \
- (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
- | RE_NO_BK_PARENS | RE_NO_BK_REFS \
- | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
- | RE_UNMATCHED_RIGHT_PAREN_ORD)
-
-#define RE_SYNTAX_POSIX_AWK \
- (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
-
-#define RE_SYNTAX_GREP \
- (RE_BK_PLUS_QM | RE_CHAR_CLASSES \
- | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
- | RE_NEWLINE_ALT)
-
-#define RE_SYNTAX_EGREP \
- (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
- | RE_NEWLINE_ALT | RE_NO_BK_PARENS \
- | RE_NO_BK_VBAR)
-
-#define RE_SYNTAX_POSIX_EGREP \
- (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
-
-/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
-#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
-
-#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
-
-/* Syntax bits common to both basic and extended POSIX regex syntax. */
-#define _RE_SYNTAX_POSIX_COMMON \
- (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
- | RE_INTERVALS | RE_NO_EMPTY_RANGES)
-
-#define RE_SYNTAX_POSIX_BASIC \
- (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
-
-/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
- RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
- isn't minimal, since other operators, such as \`, aren't disabled. */
-#define RE_SYNTAX_POSIX_MINIMAL_BASIC \
- (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
-
-#define RE_SYNTAX_POSIX_EXTENDED \
- (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
- | RE_NO_BK_PARENS | RE_NO_BK_VBAR \
- | RE_UNMATCHED_RIGHT_PAREN_ORD)
-
-/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
- replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
-#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
- (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
- | RE_NO_BK_PARENS | RE_NO_BK_REFS \
- | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
-/* [[[end syntaxes]]] */
-
-/* Maximum number of duplicates an interval can allow. Some systems
- (erroneously) define this in other header files, but we want our
- value, so remove any previous define. */
-#ifdef RE_DUP_MAX
-#undef RE_DUP_MAX
-#endif
-#define RE_DUP_MAX ((1 << 15) - 1)
-
-
-/* POSIX `cflags' bits (i.e., information for `regcomp'). */
-
-/* If this bit is set, then use extended regular expression syntax.
- If not set, then use basic regular expression syntax. */
-#define REG_EXTENDED 1
-
-/* If this bit is set, then ignore case when matching.
- If not set, then case is significant. */
-#define REG_ICASE (REG_EXTENDED << 1)
-
-/* If this bit is set, then anchors do not match at newline
- characters in the string.
- If not set, then anchors do match at newlines. */
-#define REG_NEWLINE (REG_ICASE << 1)
-
-/* If this bit is set, then report only success or fail in regexec.
- If not set, then returns differ between not matching and errors. */
-#define REG_NOSUB (REG_NEWLINE << 1)
-
-
-/* POSIX `eflags' bits (i.e., information for regexec). */
-
-/* If this bit is set, then the beginning-of-line operator doesn't match
- the beginning of the string (presumably because it's not the
- beginning of a line).
- If not set, then the beginning-of-line operator does match the
- beginning of the string. */
-#define REG_NOTBOL 1
-
-/* Like REG_NOTBOL, except for the end-of-line. */
-#define REG_NOTEOL (1 << 1)
-
-
-/* If any error codes are removed, changed, or added, update the
- `re_error_msg' table in regex.c. */
-typedef enum
-{
- REG_NOERROR = 0, /* Success. */
- REG_NOMATCH, /* Didn't find a match (for regexec). */
-
- /* POSIX regcomp return error codes. (In the order listed in the
- standard.) */
- REG_BADPAT, /* Invalid pattern. */
- REG_ECOLLATE, /* Not implemented. */
- REG_ECTYPE, /* Invalid character class name. */
- REG_EESCAPE, /* Trailing backslash. */
- REG_ESUBREG, /* Invalid back reference. */
- REG_EBRACK, /* Unmatched left bracket. */
- REG_EPAREN, /* Parenthesis imbalance. */
- REG_EBRACE, /* Unmatched \{. */
- REG_BADBR, /* Invalid contents of \{\}. */
- REG_ERANGE, /* Invalid range end. */
- REG_ESPACE, /* Ran out of memory. */
- REG_BADRPT, /* No preceding re for repetition op. */
-
- /* Error codes we've added. */
- REG_EEND, /* Premature end. */
- REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
- REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
-} reg_errcode_t;
-
-/* This data structure represents a compiled pattern. Before calling
- the pattern compiler, the fields `buffer', `allocated', `fastmap',
- `translate', and `no_sub' can be set. After the pattern has been
- compiled, the `re_nsub' field is available. All other fields are
- private to the regex routines. */
-
-struct re_pattern_buffer
-{
-/* [[[begin pattern_buffer]]] */
- /* Space that holds the compiled pattern. It is declared as
- `unsigned char *' because its elements are
- sometimes used as array indexes. */
- unsigned char *buffer;
-
- /* Number of bytes to which `buffer' points. */
- unsigned long allocated;
-
- /* Number of bytes actually used in `buffer'. */
- unsigned long used;
-
- /* Syntax setting with which the pattern was compiled. */
- reg_syntax_t syntax;
-
- /* Pointer to a fastmap, if any, otherwise zero. re_search uses
- the fastmap, if there is one, to skip over impossible
- starting points for matches. */
- char *fastmap;
-
- /* Either a translate table to apply to all characters before
- comparing them, or zero for no translation. The translation
- is applied to a pattern when it is compiled and to a string
- when it is matched. */
- char *translate;
-
- /* Number of subexpressions found by the compiler. */
- size_t re_nsub;
-
- /* Zero if this pattern cannot match the empty string, one else.
- Well, in truth it's used only in `re_search_2', to see
- whether or not we should use the fastmap, so we don't set
- this absolutely perfectly; see `re_compile_fastmap' (the
- `duplicate' case). */
- unsigned can_be_null : 1;
-
- /* If REGS_UNALLOCATED, allocate space in the `regs' structure
- for `max (RE_NREGS, re_nsub + 1)' groups.
- If REGS_REALLOCATE, reallocate space if necessary.
- If REGS_FIXED, use what's there. */
-#define REGS_UNALLOCATED 0
-#define REGS_REALLOCATE 1
-#define REGS_FIXED 2
- unsigned regs_allocated : 2;
-
- /* Set to zero when `regex_compile' compiles a pattern; set to one
- by `re_compile_fastmap' if it updates the fastmap. */
- unsigned fastmap_accurate : 1;
-
- /* If set, `re_match_2' does not return information about
- subexpressions. */
- unsigned no_sub : 1;
-
- /* If set, a beginning-of-line anchor doesn't match at the
- beginning of the string. */
- unsigned not_bol : 1;
-
- /* Similarly for an end-of-line anchor. */
- unsigned not_eol : 1;
-
- /* If true, an anchor at a newline matches. */
- unsigned newline_anchor : 1;
-
-/* [[[end pattern_buffer]]] */
-};
-
-typedef struct re_pattern_buffer regex_t;
-
-
-/* search.c (search_buffer) in Emacs needs this one opcode value. It is
- defined both in `regex.c' and here. */
-#define RE_EXACTN_VALUE 1
-
-/* Type for byte offsets within the string. POSIX mandates this. */
-typedef int regoff_t;
-
-
-/* This is the structure we store register match data in. See
- regex.texinfo for a full description of what registers match. */
-struct re_registers
-{
- unsigned num_regs;
- regoff_t *start;
- regoff_t *end;
-};
-
-
-/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
- `re_match_2' returns information about at least this many registers
- the first time a `regs' structure is passed. */
-#ifndef RE_NREGS
-#define RE_NREGS 30
-#endif
-
-
-/* POSIX specification for registers. Aside from the different names than
- `re_registers', POSIX uses an array of structures, instead of a
- structure of arrays. */
-typedef struct
-{
- regoff_t rm_so; /* Byte offset from string's start to substring's start. */
- regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
-} regmatch_t;
-
-/* Declarations for routines. */
-
-/* To avoid duplicating every routine declaration -- once with a
- prototype (if we are ANSI), and once without (if we aren't) -- we
- use the following macro to declare argument types. This
- unfortunately clutters up the declarations a bit, but I think it's
- worth it. */
-
-#if __STDC__
-
-#define _RE_ARGS(args) args
-
-#else /* not __STDC__ */
-
-#define _RE_ARGS(args) ()
-
-#endif /* not __STDC__ */
-
-/* Sets the current default syntax to SYNTAX, and return the old syntax.
- You can also simply assign to the `re_syntax_options' variable. */
-extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
-
-/* Compile the regular expression PATTERN, with length LENGTH
- and syntax given by the global `re_syntax_options', into the buffer
- BUFFER. Return NULL if successful, and an error string if not. */
-extern const char *re_compile_pattern
- _RE_ARGS ((const char *pattern, int length,
- struct re_pattern_buffer *buffer));
-
-
-/* Compile a fastmap for the compiled pattern in BUFFER; used to
- accelerate searches. Return 0 if successful and -2 if was an
- internal error. */
-extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
-
-
-/* Search in the string STRING (with length LENGTH) for the pattern
- compiled into BUFFER. Start searching at position START, for RANGE
- characters. Return the starting position of the match, -1 for no
- match, or -2 for an internal error. Also return register
- information in REGS (if REGS and BUFFER->no_sub are nonzero). */
-extern int re_search
- _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
- int length, int start, int range, struct re_registers *regs));
-
-
-/* Like `re_search', but search in the concatenation of STRING1 and
- STRING2. Also, stop searching at index START + STOP. */
-extern int re_search_2
- _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
- int length1, const char *string2, int length2,
- int start, int range, struct re_registers *regs, int stop));
-
-
-/* Like `re_search', but return how many characters in STRING the regexp
- in BUFFER matched, starting at position START. */
-extern int re_match
- _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
- int length, int start, struct re_registers *regs));
-
-
-/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
-extern int re_match_2
- _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
- int length1, const char *string2, int length2,
- int start, struct re_registers *regs, int stop));
-
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
- ENDS. Subsequent matches using BUFFER and REGS will use this memory
- for recording register information. STARTS and ENDS must be
- allocated with malloc, and must each be at least `NUM_REGS * sizeof
- (regoff_t)' bytes long.
-
- If NUM_REGS == 0, then subsequent matches should allocate their own
- register data.
-
- Unless this function is called, the first search or match using
- PATTERN_BUFFER will allocate its own register data, without
- freeing the old data. */
-extern void re_set_registers
- _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
- unsigned num_regs, regoff_t *starts, regoff_t *ends));
-
-/* 4.2 bsd compatibility. */
-extern char *re_comp _RE_ARGS ((const char *));
-extern int re_exec _RE_ARGS ((const char *));
-
-/* POSIX compatibility. */
-extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
-extern int regexec
- _RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch,
- regmatch_t pmatch[], int eflags));
-extern size_t regerror
- _RE_ARGS ((int errcode, const regex_t *preg, char *errbuf,
- size_t errbuf_size));
-extern void regfree _RE_ARGS ((regex_t *preg));
-
-#endif /* not __REGEXP_LIBRARY_H__ */
-
-/*
-Local variables:
-make-backup-files: t
-version-control: t
-trim-versions-without-asking: nil
-End:
-*/
diff --git a/gnu/usr.bin/tar/y.tab.h b/gnu/usr.bin/tar/y.tab.h
deleted file mode 100644
index 4a541d2..0000000
--- a/gnu/usr.bin/tar/y.tab.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#define tAGO 257
-#define tDAY 258
-#define tDAYZONE 259
-#define tID 260
-#define tMERIDIAN 261
-#define tMINUTE_UNIT 262
-#define tMONTH 263
-#define tMONTH_UNIT 264
-#define tSEC_UNIT 265
-#define tSNUMBER 266
-#define tUNUMBER 267
-#define tZONE 268
-#define tDST 269
-typedef union {
- time_t Number;
- enum _MERIDIAN Meridian;
-} YYSTYPE;
-extern YYSTYPE yylval;
diff --git a/gnu/usr.bin/texinfo/info-files/info-stnd.info b/gnu/usr.bin/texinfo/info-files/info-stnd.info
deleted file mode 100644
index 31f486a..0000000
--- a/gnu/usr.bin/texinfo/info-files/info-stnd.info
+++ /dev/null
@@ -1,1259 +0,0 @@
-This is Info file info-stnd.info, produced by Makeinfo-1.55 from the
-input file info-stnd.texi.
-
-This file documents GNU Info, a program for viewing the on-line
-formatted versions of Texinfo files. This documentation is different
-from the documentation for the Info reader that is part of GNU Emacs.
-If you do not know how to use Info, but have a working Info reader, you
-should read that documentation first.
-
-Copyright (C) 1992, 1993 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 and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-sections entitled "Copying" and "GNU General Public License" are
-included exactly as in the original, 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,
-except that this permission notice may be stated in a translation
-approved by the Free Software Foundation.
-
-
-File: info-stnd.info, Node: Top, Next: What is Info, Prev: (dir), Up: (dir)
-
-The GNU Info Program
-********************
-
-This file documents GNU Info, a program for viewing the on-line
-formatted versions of Texinfo files, version 2.9. This documentation
-is different from the documentation for the Info reader that is part of
-GNU Emacs.
-
-* Menu:
-
-* What is Info::
-* Options:: Options you can pass on the command line.
-* Cursor Commands:: Commands which move the cursor within a node.
-* Scrolling Commands:: Commands for moving the node around
- in a window.
-* Node Commands:: Commands for selecting a new node.
-* Searching Commands:: Commands for searching an Info file.
-* Xref Commands:: Commands for selecting cross references.
-* Window Commands:: Commands which manipulate multiple windows.
-* Printing Nodes:: How to print out the contents of a node.
-* Miscellaneous Commands:: A few commands that defy categories.
-* Variables:: How to change the default behavior of Info.
-* GNU Info Global Index:: Global index containing keystrokes,
- command names, variable names,
- and general concepts.
-
-
-File: info-stnd.info, Node: What is Info, Next: Options, Prev: Top, Up: Top
-
-What is Info?
-*************
-
-"Info" is a program which is used to view Info files on an ASCII
-terminal. "Info files" are the result of processing Texinfo files with
-the program `makeinfo' or with one of the Emacs commands, such as `M-x
-texinfo-format-buffer'. Texinfo itself is a documentation system that
-uses a single source file to produce both on-line information and
-printed output. You can typeset and print the files that you read in
-Info.
-
-
-File: info-stnd.info, Node: Options, Next: Cursor Commands, Prev: What is Info, Up: Top
-
-Command Line Options
-********************
-
-GNU Info accepts several options to control the initial node being
-viewed, and to specify which directories to search for Info files. Here
-is a template showing an invocation of GNU Info from the shell:
-
- info [--OPTION-NAME OPTION-VALUE] MENU-ITEM...
-
-The following OPTION-NAMES are available when invoking Info from the
-shell:
-
-`--directory DIRECTORY-PATH'
-`-d DIRECTORY-PATH'
- Add DIRECTORY-PATH to the list of directory paths searched when
- Info needs to find a file. You may issue `--directory' multiple
- times; once for each directory which contains Info files.
- Alternatively, you may specify a value for the environment variable
- `INFOPATH'; if `--directory' is not given, the value of `INFOPATH'
- is used. The value of `INFOPATH' is a colon separated list of
- directory names. If you do not supply `INFOPATH' or
- `--directory-path', Info uses a default path.
-
-`--file FILENAME'
-`-f FILENAME'
- Specify a particular Info file to visit. By default, Info visits
- the file `dir'; if you use this option, Info will start with
- `(FILENAME)Top' as the first file and node.
-
-`--node NODENAME'
-`-n NODENAME'
- Specify a particular node to visit in the initial file that Info
- loads. This is especially useful in conjunction with `--file'(1)
- (*note Options-Footnotes::). You may specify `--node' multiple
- times; for an interactive Info, each NODENAME is visited in its
- own window, for a non-interactive Info (such as when `--output' is
- given) each NODENAME is processed sequentially.
-
-`--output FILENAME'
-`-o FILENAME'
- Specify FILENAME as the name of a file to which to direct output.
- Each node that Info visits will be output to FILENAME instead of
- interactively viewed. A value of `-' for FILENAME specifies the
- standard output.
-
-`--subnodes'
- This option only has meaning when given in conjunction with
- `--output'. It means to recursively output the nodes appearing in
- the menus of each node being output. Menu items which resolve to
- external Info files are not output, and neither are menu items
- which are members of an index. Each node is only output once.
-
-`--help'
-`-h'
- Produces a relatively brief description of the available Info
- options.
-
-`--version'
- Prints the version information of Info and exits.
-
-`MENU-ITEM'
- Info treats its remaining arguments as the names of menu items.
- The first argument is a menu item in the initial node visited,
- while the second argument is a menu item in the first argument's
- node. You can easily move to the node of your choice by
- specifying the menu names which describe the path to that node.
- For example,
-
- info emacs buffers
-
- first selects the menu item `Emacs' in the node `(dir)Top', and
- then selects the menu item `Buffers' in the node `(emacs)Top'.
-
-
-File: info-stnd.info, Node: Options-Footnotes, Up: Options
-
-(1) Of course, you can specify both the file and node in a `--node'
-command; but don't forget to escape the open and close parentheses from
-the shell as in: `info --node '(emacs)Buffers''
-
-
-File: info-stnd.info, Node: Cursor Commands, Next: Scrolling Commands, Prev: Options, Up: Top
-
-Moving the Cursor
-*****************
-
-Many people find that reading screens of text page by page is made
-easier when one is able to indicate particular pieces of text with some
-kind of pointing device. Since this is the case, GNU Info (both the
-Emacs and standalone versions) have several commands which allow you to
-move the cursor about the screen. The notation used in this manual to
-describe keystrokes is identical to the notation used within the Emacs
-manual, and the GNU Readline manual. *Note Character Conventions:
-(emacs)Characters, if you are unfamiliar with the notation.
-
-The following table lists the basic cursor movement commands in Info.
-Each entry consists of the key sequence you should type to execute the
-cursor movement, the `M-x'(1) (*note Cursor Commands-Footnotes::)
-command name (displayed in parentheses), and a short description of
-what the command does. All of the cursor motion commands can take an
-"numeric" argument (*note `universal-argument': Miscellaneous
-Commands.), to find out how to supply them. With a numeric argument,
-the motion commands are simply executed that many times; for example, a
-numeric argument of 4 given to `next-line' causes the cursor to move
-down 4 lines. With a negative numeric argument, the motion is
-reversed; an argument of -4 given to the `next-line' command would
-cause the cursor to move *up* 4 lines.
-
-`C-n' (`next-line')
- Move the cursor down to the next line.
-
-`C-p' (`prev-line')
- Move the cursor up to the previous line.
-
-`C-a' (`beginning-of-line')
- Move the cursor to the start of the current line.
-
-`C-e' (`end-of-line')
- Move the cursor to the end of the current line.
-
-`C-f' (`forward-char')
- Move the cursor forward a character.
-
-`C-b' (`backward-char')
- Move the cursor backward a character.
-
-`M-f' (`forward-word')
- Move the cursor forward a word.
-
-`M-b' (`backward-word')
- Move the cursor backward a word.
-
-`M-<' (`beginning-of-node')
-`b'
- Move the cursor to the start of the current node.
-
-`M->' (`end-of-node')
- Move the cursor to the end of the current node.
-
-`M-r' (`move-to-window-line')
- Move the cursor to a specific line of the window. Without a
- numeric argument, `M-r' moves the cursor to the start of the line
- in the center of the window. With a numeric argument of N, `M-r'
- moves the cursor to the start of the Nth line in the window.
-
-
-File: info-stnd.info, Node: Cursor Commands-Footnotes, Up: Cursor Commands
-
-(1) `M-x' is also a command; it invokes `execute-extended-command'.
-*Note Executing an extended command: (emacs)M-x, for more detailed
-information.
-
-
-File: info-stnd.info, Node: Scrolling Commands, Next: Node Commands, Prev: Cursor Commands, Up: Top
-
-Moving Text Within a Window
-***************************
-
-Sometimes you are looking at a screenful of text, and only part of the
-current paragraph you are reading is visible on the screen. The
-commands detailed in this section are used to shift which part of the
-current node is visible on the screen.
-
-`SPC' (`scroll-forward')
-`C-v'
- Shift the text in this window up. That is, show more of the node
- which is currently below the bottom of the window. With a numeric
- argument, show that many more lines at the bottom of the window; a
- numeric argument of 4 would shift all of the text in the window up
- 4 lines (discarding the top 4 lines), and show you four new lines
- at the bottom of the window. Without a numeric argument, SPC
- takes the bottom two lines of the window and places them at the
- top of the window, redisplaying almost a completely new screenful
- of lines.
-
-`DEL' (`scroll-backward')
-`M-v'
- Shift the text in this window down. The inverse of
- `scroll-forward'.
-
-The `scroll-forward' and `scroll-backward' commands can also move
-forward and backward through the node structure of the file. If you
-press SPC while viewing the end of a node, or DEL while viewing the
-beginning of a node, what happens is controlled by the variable
-`scroll-behavior'. *Note `scroll-behavior': Variables, for more
-information.
-
-`C-l' (`redraw-display')
- Redraw the display from scratch, or shift the line containing the
- cursor to a specified location. With no numeric argument, `C-l'
- clears the screen, and then redraws its entire contents. Given a
- numeric argument of N, the line containing the cursor is shifted
- so that it is on the Nth line of the window.
-
-`C-x w' (`toggle-wrap')
- Toggles the state of line wrapping in the current window.
- Normally, lines which are longer than the screen width "wrap",
- i.e., they are continued on the next line. Lines which wrap have
- a `\' appearing in the rightmost column of the screen. You can
- cause such lines to be terminated at the rightmost column by
- changing the state of line wrapping in the window with `C-x w'.
- When a line which needs more space than one screen width to
- display is displayed, a `$' appears in the rightmost column of the
- screen, and the remainder of the line is invisible.
-
-
-File: info-stnd.info, Node: Node Commands, Next: Searching Commands, Prev: Scrolling Commands, Up: Top
-
-Selecting a New Node
-********************
-
-This section details the numerous Info commands which select a new node
-to view in the current window.
-
-The most basic node commands are `n', `p', `u', and `l'.
-
-When you are viewing a node, the top line of the node contains some Info
-"pointers" which describe where the next, previous, and up nodes are.
-Info uses this line to move about the node structure of the file when
-you use the following commands:
-
-`n' (`next-node')
- Select the `Next' node.
-
-`p' (`prev-node')
- Select the `Prev' node.
-
-`u' (`up-node')
- Select the `Up' node.
-
-You can easily select a node that you have already viewed in this window
-by using the `l' command - this name stands for "last", and actually
-moves through the list of already visited nodes for this window. `l'
-with a negative numeric argument moves forward through the history of
-nodes for this window, so you can quickly step between two adjacent (in
-viewing history) nodes.
-
-`l' (`history-node')
- Select the most recently selected node in this window.
-
-Two additional commands make it easy to select the most commonly
-selected nodes; they are `t' and `d'.
-
-`t' (`top-node')
- Select the node `Top' in the current Info file.
-
-`d' (`dir-node')
- Select the directory node (i.e., the node `(dir)').
-
-Here are some other commands which immediately result in the selection
-of a different node in the current window:
-
-`<' (`first-node')
- Selects the first node which appears in this file. This node is
- most often `Top', but it does not have to be.
-
-`>' (`last-node')
- Select the last node which appears in this file.
-
-`]' (`global-next-node')
- Move forward or down through node structure. If the node that you
- are currently viewing has a `Next' pointer, that node is selected.
- Otherwise, if this node has a menu, the first menu item is
- selected. If there is no `Next' and no menu, the same process is
- tried with the `Up' node of this node.
-
-`[' (`global-prev-node')
- Move backward or up through node structure. If the node that you
- are currently viewing has a `Prev' pointer, that node is selected.
- Otherwise, if the node has an `Up' pointer, that node is selected,
- and if it has a menu, the last item in the menu is selected.
-
-You can get the same behavior as `global-next-node' and
-`global-prev-node' while simply scrolling through the file with SPC and
-DEL; *Note `scroll-behavior': Variables, for more information.
-
-`g' (`goto-node')
- Read the name of a node and select it. No completion is done while
- reading the node name, since the desired node may reside in a
- separate file. The node must be typed exactly as it appears in
- the Info file. A file name may be included as with any node
- specification, for example
-
- `g(emacs)Buffers'
-
- finds the node `Buffers' in the Info file `emacs'.
-
-`C-x k' (`kill-node')
- Kill a node. The node name is prompted for in the echo area, with
- a default of the current node. "Killing" a node means that Info
- tries hard to forget about it, removing it from the list of
- history nodes kept for the window where that node is found.
- Another node is selected in the window which contained the killed
- node.
-
-`C-x C-f' (`view-file')
- Read the name of a file and selects the entire file. The command
- `C-x C-f FILENAME'
- is equivalent to typing
- `g(FILENAME)*'
-
-`C-x C-b' (`list-visited-nodes')
- Make a window containing a menu of all of the currently visited
- nodes. This window becomes the selected window, and you may use
- the standard Info commands within it.
-
-`C-x b' (`select-visited-node')
- Select a node which has been previously visited in a visible
- window. This is similar to `C-x C-b' followed by `m', but no
- window is created.
-
-
-File: info-stnd.info, Node: Searching Commands, Next: Xref Commands, Prev: Node Commands, Up: Top
-
-Searching an Info File
-**********************
-
-GNU Info allows you to search for a sequence of characters throughout an
-entire Info file, search through the indices of an Info file, or find
-areas within an Info file which discuss a particular topic.
-
-`s' (`search')
- Read a string in the echo area and search for it.
-
-`C-s' (`isearch-forward')
- Interactively search forward through the Info file for a string as
- you type it.
-
-`C-r' (`isearch-backward')
- Interactively search backward through the Info file for a string as
- you type it.
-
-`i' (`index-search')
- Look up a string in the indices for this Info file, and select a
- node where the found index entry points to.
-
-`,' (`next-index-match')
- Move to the node containing the next matching index item from the
- last `i' command.
-
-The most basic searching command is `s' (`search'). The `s' command
-prompts you for a string in the echo area, and then searches the
-remainder of the Info file for an occurrence of that string. If the
-string is found, the node containing it is selected, and the cursor is
-left positioned at the start of the found string. Subsequent `s'
-commands show you the default search string within `[' and `]';
-pressing RET instead of typing a new string will use the default search
-string.
-
-"Incremental searching" is similar to basic searching, but the string
-is looked up while you are typing it, instead of waiting until the
-entire search string has been specified.
-
-
-File: info-stnd.info, Node: Xref Commands, Next: Window Commands, Prev: Searching Commands, Up: Top
-
-Selecting Cross References
-**************************
-
-We have already discussed the `Next', `Prev', and `Up' pointers which
-appear at the top of a node. In addition to these pointers, a node may
-contain other pointers which refer you to a different node, perhaps in
-another Info file. Such pointers are called "cross references", or
-"xrefs" for short.
-
-* Menu:
-
-* Parts of an Xref:: What a cross reference is made of.
-* Selecting Xrefs:: Commands for selecting menu or note items.
-
-
-File: info-stnd.info, Node: Parts of an Xref, Next: Selecting Xrefs, Up: Xref Commands
-
-Parts of an Xref
-================
-
-Cross references have two major parts: the first part is called the
-"label"; it is the name that you can use to refer to the cross
-reference, and the second is the "target"; it is the full name of the
-node that the cross reference points to.
-
-The target is separated from the label by a colon `:'; first the label
-appears, and then the target. For example, in the sample menu cross
-reference below, the single colon separates the label from the target.
-
- * Foo Label: Foo Target. More information about Foo.
-
-Note the `.' which ends the name of the target. The `.' is not part of
-the target; it serves only to let Info know where the target name ends.
-
-A shorthand way of specifying references allows two adjacent colons to
-stand for a target name which is the same as the label name:
-
- * Foo Commands:: Commands pertaining to Foo.
-
-In the above example, the name of the target is the same as the name of
-the label, in this case `Foo Commands'.
-
-You will normally see two types of cross reference while viewing nodes:
-"menu" references, and "note" references. Menu references appear
-within a node's menu; they begin with a `*' at the beginning of a line,
-and continue with a label, a target, and a comment which describes what
-the contents of the node pointed to contains.
-
-Note references appear within the body of the node text; they begin with
-`*Note', and continue with a label and a target.
-
-Like `Next', `Prev', and `Up' pointers, cross references can point to
-any valid node. They are used to refer you to a place where more
-detailed information can be found on a particular subject. Here is a
-cross reference which points to a node within the Texinfo
-documentation: *Note Writing an Xref: (texinfo)xref, for more
-information on creating your own texinfo cross references.
-
-
-File: info-stnd.info, Node: Selecting Xrefs, Prev: Parts of an Xref, Up: Xref Commands
-
-Selecting Xrefs
-===============
-
-The following table lists the Info commands which operate on menu items.
-
-`1' (`menu-digit')
-`2' ... `9'
- Within an Info window, pressing a single digit, (such as `1'),
- selects that menu item, and places its node in the current window.
- For convenience, there is one exception; pressing `0' selects the
- *last* item in the node's menu.
-
-`0' (`last-menu-item')
- Select the last item in the current node's menu.
-
-`m' (`menu-item')
- Reads the name of a menu item in the echo area and selects its
- node. Completion is available while reading the menu label.
-
-`M-x find-menu'
- Move the cursor to the start of this node's menu.
-
-This table lists the Info commands which operate on note cross
-references.
-
-`f' (`xref-item')
-`r'
- Reads the name of a note cross reference in the echo area and
- selects its node. Completion is available while reading the cross
- reference label.
-
-Finally, the next few commands operate on menu or note references alike:
-
-`TAB' (`move-to-next-xref')
- Move the cursor to the start of the next nearest menu item or note
- reference in this node. You can then use RET
- (`select-reference-this-line') to select the menu or note
- reference.
-
-`M-TAB' (`move-to-prev-xref')
- Move the cursor the start of the nearest previous menu item or note
- reference in this node.
-
-`RET' (`select-reference-this-line')
- Select the menu item or note reference appearing on this line.
-
-
-File: info-stnd.info, Node: Window Commands, Next: Printing Nodes, Prev: Xref Commands, Up: Top
-
-Manipulating Multiple Windows
-*****************************
-
-A "window" is a place to show the text of a node. Windows have a view
-area where the text of the node is displayed, and an associated "mode
-line", which briefly describes the node being viewed.
-
-GNU Info supports multiple windows appearing in a single screen; each
-window is separated from the next by its modeline. At any time, there
-is only one "active" window, that is, the window in which the cursor
-appears. There are commands available for creating windows, changing
-the size of windows, selecting which window is active, and for deleting
-windows.
-
-* Menu:
-
-* The Mode Line:: What appears in the mode line?
-* Basic Windows:: Manipulating windows in Info.
-* The Echo Area:: Used for displaying errors and reading input.
-
-
-File: info-stnd.info, Node: The Mode Line, Next: Basic Windows, Up: Window Commands
-
-The Mode Line
-=============
-
-A "mode line" is a line of inverse video which appears at the bottom of
-an Info window. It describes the contents of the window just above it;
-this information includes the name of the file and node appearing in
-that window, the number of screen lines it takes to display the node,
-and the percentage of text that is above the top of the window. It can
-also tell you if the indirect tags table for this Info file needs to be
-updated, and whether or not the Info file was compressed when stored on
-disk.
-
-Here is a sample mode line for a window containing an uncompressed file
-named `dir', showing the node `Top'.
-
- -----Info: (dir)Top, 40 lines --Top---------------------------------------
- ^^ ^ ^^^ ^^
- (file)Node #lines where
-
-When a node comes from a file which is compressed on disk, this is
-indicated in the mode line with two small `z''s. In addition, if the
-Info file containing the node has been split into subfiles, the name of
-the subfile containing the node appears in the modeline as well:
-
- --zz-Info: (emacs)Top, 291 lines --Top-- Subfile: emacs-1.Z---------------
-
-When Info makes a node internally, such that there is no corresponding
-info file on disk, the name of the node is surrounded by asterisks
-(`*'). The name itself tells you what the contents of the window are;
-the sample mode line below shows an internally constructed node showing
-possible completions:
-
- -----Info: *Completions*, 7 lines --All-----------------------------------
-
-
-File: info-stnd.info, Node: Basic Windows, Next: The Echo Area, Prev: The Mode Line, Up: Window Commands
-
-Window Commands
-===============
-
-It can be convenient to view more than one node at a time. To allow
-this, Info can display more than one "window". Each window has its own
-mode line (*note The Mode Line::.) and history of nodes viewed in that
-window (*note `history-node': Node Commands.).
-
-`C-x o' (`next-window')
- Select the next window on the screen. Note that the echo area can
- only be selected if it is already in use, and you have left it
- temporarily. Normally, `C-x o' simply moves the cursor into the
- next window on the screen, or if you are already within the last
- window, into the first window on the screen. Given a numeric
- argument, `C-x o' moves over that many windows. A negative
- argument causes `C-x o' to select the previous window on the
- screen.
-
-`M-x prev-window'
- Select the previous window on the screen. This is identical to
- `C-x o' with a negative argument.
-
-`C-x 2' (`split-window')
- Split the current window into two windows, both showing the same
- node. Each window is one half the size of the original window,
- and the cursor remains in the original window. The variable
- `automatic-tiling' can cause all of the windows on the screen to
- be resized for you automatically, please *note automatic-tiling:
- Variables. for more information.
-
-`C-x 0' (`delete-window')
- Delete the current window from the screen. If you have made too
- many windows and your screen appears cluttered, this is the way to
- get rid of some of them.
-
-`C-x 1' (`keep-one-window')
- Delete all of the windows excepting the current one.
-
-`ESC C-v' (`scroll-other-window')
- Scroll the other window, in the same fashion that `C-v' might
- scroll the current window. Given a negative argument, scroll the
- "other" window backward.
-
-`C-x ^' (`grow-window')
- Grow (or shrink) the current window. Given a numeric argument,
- grow the current window that many lines; with a negative numeric
- argument, shrink the window instead.
-
-`C-x t' (`tile-windows')
- Divide the available screen space among all of the visible windows.
- Each window is given an equal portion of the screen in which to
- display its contents. The variable `automatic-tiling' can cause
- `tile-windows' to be called when a window is created or deleted.
- *Note `automatic-tiling': Variables.
-
-
-File: info-stnd.info, Node: The Echo Area, Prev: Basic Windows, Up: Window Commands
-
-The Echo Area
-=============
-
-The "echo area" is a one line window which appears at the bottom of the
-screen. It is used to display informative or error messages, and to
-read lines of input from you when that is necessary. Almost all of the
-commands available in the echo area are identical to their Emacs
-counterparts, so please refer to that documentation for greater depth of
-discussion on the concepts of editing a line of text. The following
-table briefly lists the commands that are available while input is being
-read in the echo area:
-
-`C-f' (`echo-area-forward')
- Move forward a character.
-
-`C-b' (`echo-area-backward')
- Move backward a character.
-
-`C-a' (`echo-area-beg-of-line')
- Move to the start of the input line.
-
-`C-e' (`echo-area-end-of-line')
- Move to the end of the input line.
-
-`M-f' (`echo-area-forward-word')
- Move forward a word.
-
-`M-b' (`echo-area-backward-word')
- Move backward a word.
-
-`C-d' (`echo-area-delete')
- Delete the character under the cursor.
-
-`DEL' (`echo-area-rubout')
- Delete the character behind the cursor.
-
-`C-g' (`echo-area-abort')
- Cancel or quit the current operation. If completion is being read,
- `C-g' discards the text of the input line which does not match any
- completion. If the input line is empty, `C-g' aborts the calling
- function.
-
-`RET' (`echo-area-newline')
- Accept (or forces completion of) the current input line.
-
-`C-q' (`echo-area-quoted-insert')
- Insert the next character verbatim. This is how you can insert
- control characters into a search string, for example.
-
-PRINTING CHARACTER (`echo-area-insert')
- Insert the character.
-
-`M-TAB' (`echo-area-tab-insert')
- Insert a TAB character.
-
-`C-t' (`echo-area-transpose-chars')
- Transpose the characters at the cursor.
-
-The next group of commands deal with "killing", and "yanking" text.
-For an in depth discussion of killing and yanking, *note Killing and
-Deleting: (emacs)Killing.
-
-`M-d' (`echo-area-kill-word')
- Kill the word following the cursor.
-
-`M-DEL' (`echo-area-backward-kill-word')
- Kill the word preceding the cursor.
-
-`C-k' (`echo-area-kill-line')
- Kill the text from the cursor to the end of the line.
-
-`C-x DEL' (`echo-area-backward-kill-line')
- Kill the text from the cursor to the beginning of the line.
-
-`C-y' (`echo-area-yank')
- Yank back the contents of the last kill.
-
-`M-y' (`echo-area-yank-pop')
- Yank back a previous kill, removing the last yanked text first.
-
-Sometimes when reading input in the echo area, the command that needed
-input will only accept one of a list of several choices. The choices
-represent the "possible completions", and you must respond with one of
-them. Since there are a limited number of responses you can make, Info
-allows you to abbreviate what you type, only typing as much of the
-response as is necessary to uniquely identify it. In addition, you can
-request Info to fill in as much of the response as is possible; this is
-called "completion".
-
-The following commands are available when completing in the echo area:
-
-`TAB' (`echo-area-complete')
-`SPC'
- Insert as much of a completion as is possible.
-
-`?' (`echo-area-possible-completions')
- Display a window containing a list of the possible completions of
- what you have typed so far. For example, if the available choices
- are:
-
- bar
- foliate
- food
- forget
-
- and you have typed an `f', followed by `?', the possible
- completions would contain:
-
- foliate
- food
- forget
-
- i.e., all of the choices which begin with `f'. Pressing SPC or
- TAB would result in `fo' appearing in the echo area, since all of
- the choices which begin with `f' continue with `o'. Now, typing
- `l' followed by `TAB' results in `foliate' appearing in the echo
- area, since that is the only choice which begins with `fol'.
-
-`ESC C-v' (`echo-area-scroll-completions-window')
- Scroll the completions window, if that is visible, or the "other"
- window if not.
-
-
-File: info-stnd.info, Node: Printing Nodes, Next: Miscellaneous Commands, Prev: Window Commands, Up: Top
-
-Printing Out Nodes
-******************
-
-You may wish to print out the contents of a node as a quick reference
-document for later use. Info provides you with a command for doing
-this. In general, we recommend that you use TeX to format the document
-and print sections of it, by running `tex' on the Texinfo source file.
-
-`M-x print-node'
- Pipe the contents of the current node through the command in the
- environment variable `INFO_PRINT_COMMAND'. If the variable does
- not exist, the node is simply piped to `lpr'.
-
-
-File: info-stnd.info, Node: Miscellaneous Commands, Next: Variables, Prev: Printing Nodes, Up: Top
-
-Miscellaneous Commands
-**********************
-
-GNU Info contains several commands which self-document GNU Info:
-
-`M-x describe-command'
- Read the name of an Info command in the echo area and then display
- a brief description of what that command does.
-
-`M-x describe-key'
- Read a key sequence in the echo area, and then display the name and
- documentation of the Info command that the key sequence invokes.
-
-`M-x describe-variable'
- Read the name of a variable in the echo area and then display a
- brief description of what the variable affects.
-
-`M-x where-is'
- Read the name of an Info command in the echo area, and then display
- a key sequence which can be typed in order to invoke that command.
-
-`C-h' (`get-help-window')
-`?'
- Create (or Move into) the window displaying `*Help*', and place a
- node containing a quick reference card into it. This window
- displays the most concise information about GNU Info available.
-
-`h' (`get-info-help-node')
- Try hard to visit the node `(info)Help'. The Info file
- `info.texi' distributed with GNU Info contains this node. Of
- course, the file must first be processed with `makeinfo', and then
- placed into the location of your Info directory.
-
-Here are the commands for creating a numeric argument:
-
-`C-u' (`universal-argument')
- Start (or multiply by 4) the current numeric argument. `C-u' is a
- good way to give a small numeric argument to cursor movement or
- scrolling commands; `C-u C-v' scrolls the screen 4 lines, while
- `C-u C-u C-n' moves the cursor down 16 lines.
-
-`M-1' (`add-digit-to-numeric-arg')
-`M-2' ... `M-9'
- Add the digit value of the invoking key to the current numeric
- argument. Once Info is reading a numeric argument, you may just
- type the digits of the argument, without the Meta prefix. For
- example, you might give `C-l' a numeric argument of 32 by typing:
-
- `C-u 3 2 C-l'
-
- or
-
- `M-3 2 C-l'
-
-`C-g' is used to abort the reading of a multi-character key sequence,
-to cancel lengthy operations (such as multi-file searches) and to
-cancel reading input in the echo area.
-
-`C-g' (`abort-key')
- Cancel current operation.
-
-The `q' command of Info simply quits running Info.
-
-`q' (`quit')
- Exit GNU Info.
-
-If the operating system tells GNU Info that the screen is 60 lines tall,
-and it is actually only 40 lines tall, here is a way to tell Info that
-the operating system is correct.
-
-`M-x set-screen-height'
- Read a height value in the echo area and set the height of the
- displayed screen to that value.
-
-Finally, Info provides a convenient way to display footnotes which might
-be associated with the current node that you are viewing:
-
-`ESC C-f' (`show-footnotes')
- Show the footnotes (if any) associated with the current node in
- another window. You can have Info automatically display the
- footnotes associated with a node when the node is selected by
- setting the variable `automatic-footnotes'. *Note
- `automatic-footnotes': Variables.
-
-
-File: info-stnd.info, Node: Variables, Next: GNU Info Global Index, Prev: Miscellaneous Commands, Up: Top
-
-Manipulating Variables
-**********************
-
-GNU Info contains several "variables" whose values are looked at by
-various Info commands. You can change the values of these variables,
-and thus change the behavior of Info to more closely match your
-environment and Info file reading manner.
-
-`M-x set-variable'
- Read the name of a variable, and the value for it, in the echo
- area and then set the variable to that value. Completion is
- available when reading the variable name; often, completion is
- available when reading the value to give to the variable, but that
- depends on the variable itself. If a variable does *not* supply
- multiple choices to complete over, it expects a numeric value.
-
-`M-x describe-variable'
- Read the name of a variable in the echo area and then display a
- brief description of what the variable affects.
-
-Here is a list of the variables that you can set in Info.
-
-`automatic-footnotes'
- When set to `On', footnotes appear and disappear automatically.
- This variable is `On' by default. When a node is selected, a
- window containing the footnotes which appear in that node is
- created, and the footnotes are displayed within the new window.
- The window that Info creates to contain the footnotes is called
- `*Footnotes*'. If a node is selected which contains no footnotes,
- and a `*Footnotes*' window is on the screen, the `*Footnotes*'
- window is deleted. Footnote windows created in this fashion are
- not automatically tiled so that they can use as little of the
- display as is possible.
-
-`automatic-tiling'
- When set to `On', creating or deleting a window resizes other
- windows. This variable is `Off' by default. Normally, typing
- `C-x 2' divides the current window into two equal parts. When
- `automatic-tiling' is set to `On', all of the windows are resized
- automatically, keeping an equal number of lines visible in each
- window. There are exceptions to the automatic tiling;
- specifically, the windows `*Completions*' and `*Footnotes*' are
- *not* resized through automatic tiling; they remain their original
- size.
-
-`visible-bell'
- When set to `On', GNU Info attempts to flash the screen instead of
- ringing the bell. This variable is `Off' by default. Of course,
- Info can only flash the screen if the terminal allows it; in the
- case that the terminal does not allow it, the setting of this
- variable has no effect. However, you can make Info perform
- quietly by setting the `errors-ring-bell' variable to `Off'.
-
-`errors-ring-bell'
- When set to `On', errors cause the bell to ring. The default
- setting of this variable is `On'.
-
-`gc-compressed-files'
- When set to `On', Info garbage collects files which had to be
- uncompressed. The default value of this variable is `Off'.
- Whenever a node is visited in Info, the Info file containing that
- node is read into core, and Info reads information about the tags
- and nodes contained in that file. Once the tags information is
- read by Info, it is never forgotten. However, the actual text of
- the nodes does not need to remain in core unless a particular Info
- window needs it. For non-compressed files, the text of the nodes
- does not remain in core when it is no longer in use. But
- de-compressing a file can be a time consuming operation, and so
- Info tries hard not to do it twice. `gc-compressed-files' tells
- Info it is okay to garbage collect the text of the nodes of a file
- which was compressed on disk.
-
-`show-index-match'
- When set to `On', the portion of the matched search string is
- highlighted in the message which explains where the matched search
- string was found. The default value of this variable is `On'.
- When Info displays the location where an index match was found,
- (*note `next-index-match': Searching Commands.), the portion of the
- string that you had typed is highlighted by displaying it in the
- inverse case from its surrounding characters.
-
-`scroll-behavior'
- Control what happens when forward scrolling is requested at the
- end of a node, or when backward scrolling is requested at the
- beginning of a node. The default value for this variable is
- `Continuous'. There are three possible values for this variable:
-
- `Continuous'
- Try to get the first item in this node's menu, or failing
- that, the `Next' node, or failing that, the `Next' of the
- `Up'. This behavior is identical to using the `]'
- (`global-next-node') and `[' (`global-prev-node') commands.
-
- `Next Only'
- Only try to get the `Next' node.
-
- `Page Only'
- Simply give up, changing nothing. If `scroll-behavior' is
- `Page Only', no scrolling command can change the node that is
- being viewed.
-
-`scroll-step'
- The number of lines to scroll when the cursor moves out of the
- window. Scrolling happens automatically if the cursor has moved
- out of the visible portion of the node text when it is time to
- display. Usually the scrolling is done so as to put the cursor on
- the center line of the current window. However, if the variable
- `scroll-step' has a nonzero value, Info attempts to scroll the
- node text by that many lines; if that is enough to bring the
- cursor back into the window, that is what is done. The default
- value of this variable is 0, thus placing the cursor (and the text
- it is attached to) in the center of the window. Setting this
- variable to 1 causes a kind of "smooth scrolling" which some
- people prefer.
-
-`ISO-Latin'
- When set to `On', Info accepts and displays ISO Latin characters.
- By default, Info assumes an ASCII character set. `ISO-Latin' tells
- Info that it is running in an environment where the European
- standard character set is in use, and allows you to input such
- characters to Info, as well as display them.
-
-
-File: info-stnd.info, Node: GNU Info Global Index, Prev: Variables, Up: Top
-
-Global Index
-************
-
-* Menu:
-
-* ,: Searching Commands.
-* 0, in Info windows: Selecting Xrefs.
-* 1 ... 9, in Info windows: Selecting Xrefs.
-* 1 ... 9, in Info windows: Selecting Xrefs.
-* <: Node Commands.
-* >: Node Commands.
-* ?, in Info windows: Miscellaneous Commands.
-* ?, in the echo area: The Echo Area.
-* -subnodes, command line option: Options.
-* abort-key: Miscellaneous Commands.
-* add-digit-to-numeric-arg: Miscellaneous Commands.
-* arguments, command line: Options.
-* automatic-footnotes: Variables.
-* automatic-tiling: Variables.
-* b, in Info windows: Cursor Commands.
-* backward-char: Cursor Commands.
-* backward-word: Cursor Commands.
-* beginning-of-line: Cursor Commands.
-* beginning-of-node: Cursor Commands.
-* C-a, in Info windows: Cursor Commands.
-* C-a, in the echo area: The Echo Area.
-* C-b, in Info windows: Cursor Commands.
-* C-b, in the echo area: The Echo Area.
-* C-d, in the echo area: The Echo Area.
-* C-e, in Info windows: Cursor Commands.
-* C-e, in the echo area: The Echo Area.
-* C-f, in Info windows: Cursor Commands.
-* C-f, in the echo area: The Echo Area.
-* C-g, in Info windows: Miscellaneous Commands.
-* C-g, in the echo area: The Echo Area.
-* C-h: Miscellaneous Commands.
-* C-k, in the echo area: The Echo Area.
-* C-l: Scrolling Commands.
-* C-n: Cursor Commands.
-* C-p: Cursor Commands.
-* C-q, in the echo area: The Echo Area.
-* C-r: Searching Commands.
-* C-s: Searching Commands.
-* C-t, in the echo area: The Echo Area.
-* C-u: Miscellaneous Commands.
-* C-v: Scrolling Commands.
-* C-w: Scrolling Commands.
-* C-x 0: Basic Windows.
-* C-x 1: Basic Windows.
-* C-x 2: Basic Windows.
-* C-x b: Node Commands.
-* C-x C-b: Node Commands.
-* C-x C-f: Node Commands.
-* C-x DEL, in the echo area: The Echo Area.
-* C-x k: Node Commands.
-* C-x o: Basic Windows.
-* C-x t: Basic Windows.
-* C-x ^: Basic Windows.
-* C-y, in the echo area: The Echo Area.
-* cancelling the current operation: Miscellaneous Commands.
-* cancelling typeahead: Miscellaneous Commands.
-* command line options: Options.
-* commands, describing: Miscellaneous Commands.
-* cursor, moving: Cursor Commands.
-* d: Node Commands.
-* DEL, in Info windows: Scrolling Commands.
-* DEL, in the echo area: The Echo Area.
-* delete-window: Basic Windows.
-* describe-command: Miscellaneous Commands.
-* describe-key: Miscellaneous Commands.
-* describe-variable: Variables.
-* dir-node: Node Commands.
-* directory path: Options.
-* echo area: The Echo Area.
-* echo-area-abort: The Echo Area.
-* echo-area-backward: The Echo Area.
-* echo-area-backward-kill-line: The Echo Area.
-* echo-area-backward-kill-word: The Echo Area.
-* echo-area-backward-word: The Echo Area.
-* echo-area-beg-of-line: The Echo Area.
-* echo-area-complete: The Echo Area.
-* echo-area-delete: The Echo Area.
-* echo-area-end-of-line: The Echo Area.
-* echo-area-forward: The Echo Area.
-* echo-area-forward-word: The Echo Area.
-* echo-area-insert: The Echo Area.
-* echo-area-kill-line: The Echo Area.
-* echo-area-kill-word: The Echo Area.
-* echo-area-newline: The Echo Area.
-* echo-area-possible-completions: The Echo Area.
-* echo-area-quoted-insert: The Echo Area.
-* echo-area-rubout: The Echo Area.
-* echo-area-scroll-completions-window: The Echo Area.
-* echo-area-tab-insert: The Echo Area.
-* echo-area-transpose-chars: The Echo Area.
-* echo-area-yank: The Echo Area.
-* echo-area-yank-pop: The Echo Area.
-* end-of-line: Cursor Commands.
-* end-of-node: Cursor Commands.
-* errors-ring-bell: Variables.
-* ESC C-f: Miscellaneous Commands.
-* ESC C-v, in Info windows: Basic Windows.
-* ESC C-v, in the echo area: The Echo Area.
-* f: Selecting Xrefs.
-* file, outputting to: Options.
-* find-menu: Selecting Xrefs.
-* first-node: Node Commands.
-* footnotes, displaying: Miscellaneous Commands.
-* forward-char: Cursor Commands.
-* forward-word: Cursor Commands.
-* functions, describing: Miscellaneous Commands.
-* g: Node Commands.
-* gc-compressed-files: Variables.
-* get-help-window: Miscellaneous Commands.
-* get-info-help-node: Miscellaneous Commands.
-* global-next-node: Node Commands.
-* global-prev-node: Node Commands.
-* goto-node: Node Commands.
-* grow-window: Basic Windows.
-* h: Miscellaneous Commands.
-* history-node: Node Commands.
-* i: Searching Commands.
-* index-search: Searching Commands.
-* Info file, selecting: Options.
-* INFO_PRINT_COMMAND, environment variable: Printing Nodes.
-* isearch-backward: Searching Commands.
-* isearch-forward: Searching Commands.
-* ISO Latin characters: Variables.
-* ISO-Latin: Variables.
-* keep-one-window: Basic Windows.
-* keys, describing: Miscellaneous Commands.
-* kill-node: Node Commands.
-* l: Node Commands.
-* last-menu-item: Selecting Xrefs.
-* last-node: Node Commands.
-* list-visited-nodes: Node Commands.
-* m: Selecting Xrefs.
-* M-1 ... M-9: Miscellaneous Commands.
-* M-<: Cursor Commands.
-* M->: Cursor Commands.
-* M-b, in Info windows: Cursor Commands.
-* M-b, in the echo area: The Echo Area.
-* M-d, in the echo area: The Echo Area.
-* M-DEL, in the echo area: The Echo Area.
-* M-f, in Info windows: Cursor Commands.
-* M-f, in the echo area: The Echo Area.
-* M-r: Cursor Commands.
-* M-TAB, in Info windows: Selecting Xrefs.
-* M-TAB, in the echo area: The Echo Area.
-* M-v: Scrolling Commands.
-* M-y, in the echo area: The Echo Area.
-* menu, following: Options.
-* menu-digit: Selecting Xrefs.
-* menu-item: Selecting Xrefs.
-* move-to-next-xref: Selecting Xrefs.
-* move-to-prev-xref: Selecting Xrefs.
-* move-to-window-line: Cursor Commands.
-* n: Node Commands.
-* next-index-match: Searching Commands.
-* next-line: Cursor Commands.
-* next-node: Node Commands.
-* next-window: Basic Windows.
-* node, selecting: Options.
-* nodes, selection of: Node Commands.
-* numeric arguments: Miscellaneous Commands.
-* outputting to a file: Options.
-* p: Node Commands.
-* prev-line: Cursor Commands.
-* prev-node: Node Commands.
-* prev-window: Basic Windows.
-* print-node: Printing Nodes.
-* printing: Printing Nodes.
-* printing characters, in the echo area: The Echo Area.
-* q: Miscellaneous Commands.
-* quit: Miscellaneous Commands.
-* quitting: Miscellaneous Commands.
-* r: Selecting Xrefs.
-* redraw-display: Scrolling Commands.
-* RET, in Info windows: Selecting Xrefs.
-* RET, in the echo area: The Echo Area.
-* s: Searching Commands.
-* screen, changing the height of: Miscellaneous Commands.
-* scroll-backward: Scrolling Commands.
-* scroll-behavior: Variables.
-* scroll-forward: Scrolling Commands.
-* scroll-other-window: Basic Windows.
-* scroll-step: Variables.
-* scrolling: Scrolling Commands.
-* scrolling through node structure: Scrolling Commands.
-* search: Searching Commands.
-* searching: Searching Commands.
-* select-reference-this-line: Selecting Xrefs.
-* select-visited-node: Node Commands.
-* set-screen-height: Miscellaneous Commands.
-* set-variable: Variables.
-* show-footnotes: Miscellaneous Commands.
-* show-index-match: Variables.
-* SPC, in Info windows: Scrolling Commands.
-* SPC, in the echo area: The Echo Area.
-* split-window: Basic Windows.
-* t: Node Commands.
-* TAB, in Info windows: Selecting Xrefs.
-* TAB, in the echo area: The Echo Area.
-* tile-windows: Basic Windows.
-* tiling: Basic Windows.
-* toggle-wrap: Scrolling Commands.
-* top-node: Node Commands.
-* u: Node Commands.
-* universal-argument: Miscellaneous Commands.
-* up-node: Node Commands.
-* variables, describing: Variables.
-* variables, setting: Variables.
-* version information: Options.
-* view-file: Node Commands.
-* visible-bell: Variables.
-* where-is: Miscellaneous Commands.
-* windows, creating: Basic Windows.
-* windows, deleting: Basic Windows.
-* windows, manipulating: Window Commands.
-* windows, selecting: Basic Windows.
-* xref-item: Selecting Xrefs.
-* [: Node Commands.
-* ]: Node Commands.
-
-
-
-Tag Table:
-Node: Top1263
-Node: What is Info2593
-Node: Options3127
-Node: Options-Footnotes6157
-Node: Cursor Commands6411
-Node: Cursor Commands-Footnotes8906
-Node: Scrolling Commands9136
-Node: Node Commands11600
-Node: Searching Commands15563
-Node: Xref Commands17151
-Node: Parts of an Xref17766
-Node: Selecting Xrefs19711
-Node: Window Commands21298
-Node: The Mode Line22233
-Node: Basic Windows23872
-Node: The Echo Area26374
-Node: Printing Nodes30531
-Node: Miscellaneous Commands31174
-Node: Variables34345
-Node: GNU Info Global Index40515
-
-End Tag Table
diff --git a/gnu/usr.bin/texinfo/info-files/info.info b/gnu/usr.bin/texinfo/info-files/info.info
deleted file mode 100644
index b6fd850..0000000
--- a/gnu/usr.bin/texinfo/info-files/info.info
+++ /dev/null
@@ -1,777 +0,0 @@
-This is Info file info.info, produced by Makeinfo-1.55 from the input
-file info.texi.
-
- This file describes how to use Info, the on-line, menu-driven GNU
-documentation system.
-
- Copyright (C) 1989, 1992 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 and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: info.info, Node: Top, Next: Getting Started, Prev: (dir), Up: (dir)
-
-Info: An Introduction
-*********************
-
- Info is a program for reading documentation, which you are using now.
-
- To learn how to use Info, type the command `h'. It brings you to a
-programmed instruction sequence.
-
- To learn advanced Info commands, type `n' twice. This brings you to
-`Info for Experts', skipping over the . `Getting Started' chapter.
-
-* Menu:
-
-* Getting Started::
-* Advanced Info::
-* Create an Info File::
-
-
-File: info.info, Node: Getting Started, Next: Advanced Info, Prev: Top, Up: Top
-
-Getting Started
-***************
-
- This first part of the Info manual describes how to get around inside
-of Info. The second part of the manual describes various advanced Info
-commands, and how to write an Info as distinct from a Texinfo file.
-The third part is about how to generate Info files from Texinfo files.
-
-* Menu:
-
-* Help-Small-Screen:: Starting Info on a Small Screen
-* Help:: How to use Info
-* Help-P:: Returning to the Previous node
-* Help-^L:: The Space, Rubout, B and ^L commands.
-* Help-M:: Menus
-* Help-Adv:: Some advanced Info commands
-* Help-Q:: Quitting Info
-
-
-File: info.info, Node: Help-Small-Screen, Next: Help, Up: Getting Started
-
-Starting Info on a Small Screen
-===============================
-
- Since your terminal has an unusually small number of lines on its
-screen, it is necessary to give you special advice at the beginning.
-
- If you see the text `--All----' at near the bottom right corner of
-the screen, it means the entire text you are looking at fits on the
-screen. If you see `--Top----' instead, it means that there is more
-text below that does not fit. To move forward through the text and see
-another screen full, press the Space bar, SPC. To move back up, press
-the key labeled `Rubout' or `Delete' or DEL.
-
- Here are 40 lines of junk, so you can try SPC and DEL and see what
-they do. At the end are instructions of what you should do next.
-
- This is line 17
-This is line 18
-This is line 19
-This is line 20
-This is line 21
-This is line 22
-This is line 23
-This is line 24
-This is line 25
-This is line 26
-This is line 27
-This is line 28
-This is line 29
-This is line 30
-This is line 31
-This is line 32
-This is line 33
-This is line 34
-This is line 35
-This is line 36
-This is line 37
-This is line 38
-This is line 39
-This is line 40
-This is line 41
-This is line 42
-This is line 43
-This is line 44
-This is line 45
-This is line 46
-This is line 47
-This is line 48
-This is line 49
-This is line 50
-This is line 51
-This is line 52
-This is line 53
-This is line 54
-This is line 55
-This is line 56
-If you have managed to get here, go back to the beginning with DEL, and
-come back here again, then you understand SPC and DEL. So now type an
-`n'--just one character; do not type the quotes and do not type the
-Return key, RET, afterward--to get to the normal start of the course.
-
-
-File: info.info, Node: Help, Next: Help-P, Prev: Help-Small-Screen, Up: Getting Started
-
-How to use Info
-===============
-
- You are talking to the program Info, for reading documentation.
-
- Right now you are looking at one "Node" of Information. A node
-contains text describing a specific topic at a specific level of
-detail. This node's topic is "how to use Info".
-
- The top line of a node is its "header". This node's header (look at
-it now) says that it is the node named `Help' in the file `info'. It
-says that the `Next' node after this one is the node called `Help-P'.
-An advanced Info command lets you go to any node whose name you know.
-
- Besides a `Next', a node can have a `Previous' or an `Up'. This
-node has a `Previous' but no `Up', as you can see.
-
- Now it is time to move on to the `Next' node, named `Help-P'.
-
- >> Type `n' to move there. Type just one character; do not type
-the quotes and do not type a RET afterward.
-
- `>>' in the margin means it is really time to try a command.
-
-
-File: info.info, Node: Help-P, Next: Help-^L, Prev: Help, Up: Getting Started
-
-Returning to the Previous node
-==============================
-
- This node is called `Help-P'. The `Previous' node, as you see, is
-`Help', which is the one you just came from using the `n' command.
-Another `n' command now would take you to the next node, `Help-^L'.
-
- >> But do not do that yet. First, try the `p' command, which takes
- you to the `Previous' node. When you get there, you can do an `n'
-again to return here.
-
- This all probably seems insultingly simple so far, but *do not* be
-led into skimming. Things will get more complicated soon. Also, do
-not try a new command until you are told it is time to. Otherwise, you
-may make Info skip past an important warning that was coming up.
-
- >> Now do an `n' to get to the node `Help-^L' and learn more.
-
-
-File: info.info, Node: Help-^L, Next: Help-M, Prev: Help-P, Up: Getting Started
-
-The Space, Rubout, B and ^L commands.
-=====================================
-
- This node's header tells you that you are now at node `Help-^L', and
-that `p' would get you back to `Help-P'. The node's title is
-underlined; it says what the node is about (most nodes have titles).
-
- This is a big node and it does not all fit on your display screen.
-You can tell that there is more that is not visible because you can see
-the string `--Top-----' rather than `--All----' near the bottom right
-corner of the screen.
-
- The SPC, DEL and `b' commands exist to allow you to "move around" in
-a node that does not all fit on the screen at once. SPC moves forward,
-to show what was below the bottom of the screen. DEL moves backward,
-to show what was above the top of the screen (there is not anything
-above the top until you have typed some spaces).
-
- >> Now try typing a SPC (afterward, type a DEL to return here).
-
- When you type the SPC, the two lines that were at the bottom of the
-screen appear at the top, followed by more lines. DEL takes the two
-lines from the top and moves them to the bottom, *usually*, but if
-there are not a full screen's worth of lines above them they may not
-make it all the way to the bottom.
-
- If you type a SPC when there is no more to see, it rings the bell
-and otherwise does nothing. The same goes for a DEL when the header of
-the node is visible.
-
- If your screen is ever garbaged, you can tell Info to print it out
-again by typing `C-l' (`Control-L', that is--hold down "Control" and
-type an L or `l').
-
- >> Type `C-l' now.
-
- To move back to the beginning of the node you are on, you can type a
-lot of DELs. You can also type simply `b' for beginning.
-
- >> Try that now. (I have put in enough verbiage to make sure you are
- not on the first screenful now). Then come back, typing SPC
-several times.
-
- You have just learned a considerable number of commands. If you
-want to use one but have trouble remembering which, you should type a ?
-which prints out a brief list of commands. When you are finished
-looking at the list, make it go away by typing a SPC.
-
- >> Type a ? now. After it finishes, type a SPC.
-
- (If you are using the standalone Info reader, type `l' to return
-here.)
-
- From now on, you will encounter large nodes without warning, and
-will be expected to know how to use SPC and DEL to move around in them
-without being told. Since not all terminals have the same size screen,
-it would be impossible to warn you anyway.
-
- >> Now type `n' to see the description of the `m' command.
-
-
-File: info.info, Node: Help-M, Next: Help-Adv, Prev: Help-^L, Up: Getting Started
-
-Menus
-=====
-
- Menus and the `m' command
-
- With only the `n' and `p' commands for moving between nodes, nodes
-are restricted to a linear sequence. Menus allow a branching
-structure. A menu is a list of other nodes you can move to. It is
-actually just part of the text of the node formatted specially so that
-Info can interpret it. The beginning of a menu is always identified by
-a line which starts with `* Menu:'. A node contains a menu if and only
-if it has a line in it which starts that way. The only menu you can
-use at any moment is the one in the node you are in. To use a menu in
-any other node, you must move to that node first.
-
- After the start of the menu, each line that starts with a `*'
-identifies one subtopic. The line usually contains a brief name for
-the subtopic (followed by a `:'), the name of the node that talks about
-that subtopic, and optionally some further description of the subtopic.
-Lines in the menu that do not start with a `*' have no special
-meaning--they are only for the human reader's benefit and do not define
-additional subtopics. Here is an example:
-
- * Foo: FOO's Node This tells about FOO
-
- The subtopic name is Foo, and the node describing it is `FOO's Node'.
-The rest of the line is just for the reader's Information. [[ But this
-line is not a real menu item, simply because there is no line above it
-which starts with `* Menu:'.]]
-
- When you use a menu to go to another node (in a way that will be
-described soon), what you specify is the subtopic name, the first thing
-in the menu line. Info uses it to find the menu line, extracts the
-node name from it, and goes to that node. The reason that there is
-both a subtopic name and a node name is that the node name must be
-meaningful to the computer and may therefore have to be ugly looking.
-The subtopic name can be chosen just to be convenient for the user to
-specify. Often the node name is convenient for the user to specify and
-so both it and the subtopic name are the same. There is an
-abbreviation for this:
-
- * Foo:: This tells about FOO
-
-This means that the subtopic name and node name are the same; they are
-both `Foo'.
-
- >> Now use SPCs to find the menu in this node, then come back to
-the front with a `b'. As you see, a menu is actually visible in its
-node. If you cannot find a menu in a node by looking at it, then
-the node does not have a menu and the `m' command is not available.
-
- The command to go to one of the subnodes is `m'--but *do not do it
-yet!* Before you use `m', you must understand the difference between
-commands and arguments. So far, you have learned several commands that
-do not need arguments. When you type one, Info processes it and is
-instantly ready for another command. The `m' command is different: it
-is incomplete without the "name of the subtopic". Once you have typed
-`m', Info tries to read the subtopic name.
-
- Now look for the line containing many dashes near the bottom of the
-screen. There is one more line beneath that one, but usually it is
-blank If it is empty, Info is ready for a command, such as `n' or `b'
-or SPC or `m'. If that line contains text ending in a colon, it mean
-Info is trying to read the "argument" to a command. At such times,
-commands do not work, because Info tries to use them as the argument.
-You must either type the argument and finish the command you started,
-or type `Control-g' to cancel the command. When you have done one of
-those things, the line becomes blank again.
-
- The command to go to a subnode via a menu is `m'. After you type
-the `m', the line at the bottom of the screen says `Menu item: '. You
-must then type the name of the subtopic you want, and end it with a RET.
-
- You can abbreviate the subtopic name. If the abbreviation is not
-unique, the first matching subtopic is chosen. Some menus put the
-shortest possible abbreviation for each subtopic name in capital
-letters, so you can see how much you need to type. It does not matter
-whether you use upper case or lower case when you type the subtopic.
-You should not put any spaces at the end, or inside of the item name,
-except for one space where a space appears in the item in the menu.
-
- Here is a menu to give you a chance to practice.
-
- * Menu: The menu starts here.
-
- This menu givs you three ways of going to one place, Help-FOO.
-
- * Foo: Help-FOO. A node you can visit for fun.
-* Bar: Help-FOO. Strange! two ways to get to the same place.
-* Help-FOO:: And yet another!
->> Now type just an `m' and see what happens:
-
- Now you are "inside" an `m' command. Commands cannot be used now;
-the next thing you will type must be the name of a subtopic.
-
- You can change your mind about doing the `m' by typing Control-g.
-
- >> Try that now; notice the bottom line clear.
-
- >> Then type another `m'.
-
- >> Now type `BAR' item name. Do not type RET yet.
-
- While you are typing the item name, you can use the DEL character to
-cancel one character at a time if you make a mistake.
-
- >> Type one to cancel the `R'. You could type another `R' to
-replace it. You do not have to, since `BA' is a valid abbreviation.
-
- >> Now you are ready to go. Type a RET.
-
- After visiting Help-FOO, you should return here.
-
- >> Type `n' to see more commands.
-
- Here is another way to get to Help-FOO, a menu. You can ignore this
-if you want, or else try it (but then please come back to here).
-
-* Menu:
-
-* Help-FOO::
-
-
-File: info.info, Node: Help-FOO, Up: Help-M
-
-The `u' command
----------------
-
- Congratulations! This is the node `Help-FOO'. Unlike the other
-nodes you have seen, this one has an `Up': `Help-M', the node you just
-came from via the `m' command. This is the usual convention--the nodes
-you reach from a menu have `Up' nodes that lead back to the menu.
-Menus move Down in the tree, and `Up' moves Up. `Previous', on the
-other hand, is usually used to "stay on the same level but go backwards"
-
- You can go back to the node `Help-M' by typing the command `u' for
-"Up". That puts you at the *front* of the node--to get back to where
-you were reading you have to type some SPCs.
-
- >> Now type `u' to move back up to `Help-M'.
-
-
-File: info.info, Node: Help-Adv, Next: Help-Q, Prev: Help-M, Up: Getting Started
-
-Some advanced Info commands
-===========================
-
- The course is almost over, so please stick with it to the end.
-
- If you have been moving around to different nodes and wish to
-retrace your steps, the `l' command (`l' for "last") will do that, one
-node at a time. If you have been following directions, an `l' command
-now will get you back to `Help-M'. Another `l' command would undo the
-`u' and get you back to `Help-FOO'. Another `l' would undo the `m' and
-get you back to `Help-M'.
-
- >> Try typing three `l''s, pausing in between to see what each
-`l' does.
-
- Then follow directions again and you will end up back here.
-
- Note the difference between `l' and `p': `l' moves to where *you*
-last were, whereas `p' always moves to the node which the header says
-is the `Previous' node (from this node, to `Help-M').
-
- The `d' command gets you instantly to the Directory node. This
-node, which is the first one you saw when you entered Info, has a menu
-which leads (directly, or indirectly through other menus), to all the
-nodes that exist.
-
- >> Try doing a `d', then do an `l' to return here (yes, *do*
-return).
-
- Sometimes, in Info documentation, you will see a cross reference.
-Cross references look like this: *Note Cross: Help-Cross. That is a
-real, live cross reference which is named `Cross' and points at the
-node named `Help-Cross'.
-
- If you wish to follow a cross reference, you must use the `f'
-command. The `f' must be followed by the cross reference name (in this
-case, `Cross'). You can use DEL to edit the name, and if you change
-your mind about following any reference you can use `Control-g' to
-cancel the command.
-
- Completion is available in the `f' command; you can complete among
-all the cross reference names in the current node.
-
- >> Type `f', followed by `Cross', and a RET.
-
- To get a list of all the cross references in the current node, you
-can type `?' after an `f'. The `f' continues to await a cross
-reference name even after printing the list, so if you do not actually
-want to follow a reference you should type a `Control-g' to cancel the
-`f'.
-
- >> Type "f?" to get a list of the footnotes in this node. Then type
-a `Control-g' and see how the `f' gives up.
-
- >> Now type `n' to see the last node of the course.
-
-
-File: info.info, Node: Help-Cross, Up: Help-Adv
-
-The node reached by the cross reference in Info
------------------------------------------------
-
- This is the node reached by the cross reference named `Cross'.
-
- While this node is specifically intended to be reached by a cross
-reference, most cross references lead to nodes that "belong" someplace
-else far away in the structure of Info. So you cannot expect the
-footnote to have a `Next', `Previous' or `Up' pointing back to where
-you came from. In general, the `l' (el) command is the only way to get
-back there.
-
- >> Type `l' to return to the node where the cross reference was.
-
-
-File: info.info, Node: Help-Q, Prev: Help-Adv, Up: Getting Started
-
-Quitting Info
-=============
-
- To get out of Info, back to what you were doing before, type `q' for
-"Quit".
-
- This is the end of the course on using Info. There are some other
-commands that are not essential or are meant for experienced users;
-they are useful, and you can find them by looking in the directory for
-documentation on Info. Finding them will be a good exercise in using
-Info in the usual manner.
-
- >> Type `d' to go to the Info directory node; then type `mInfo'
-and RET, to get to the node about Info and see what other help is
-available.
-
-
-File: info.info, Node: Advanced Info, Next: Create an Info File, Prev: Getting Started, Up: Top
-
-Info for Experts
-****************
-
- This chapter describes various advanced Info commands, and how to
-write an Info as distinct from a Texinfo file. (However, in most
-cases, writing a Texinfo file is better, since you can use it *both* to
-generate an Info file and to make a printed manual. *Note Overview of
-Texinfo: (texinfo)Top.)
-
-* Menu:
-
-* Expert:: Advanced Info commands: g, s, e, and 1 - 5.
-* Add:: Describes how to add new nodes to the hierarchy.
- Also tells what nodes look like.
-* Menus:: How to add to or create menus in Info nodes.
-* Cross-refs:: How to add cross-references to Info nodes.
-* Tags:: How to make tag tables for Info files.
-* Checking:: Checking an Info File
-
-
-File: info.info, Node: Expert, Next: Add, Up: Advanced Info
-
-Advanced Info Commands
-======================
-
- `g', `s', `1', - `5', and `e'
-
- If you know a node's name, you can go there by typing `g', the name,
-and RET. Thus, `gTopRET' would go to the node called `Top' in this
-file (its directory node). `gExpertRET' would come back here.
-
- Unlike `m', `g' does not allow the use of abbreviations.
-
- To go to a node in another file, you can include the filename in the
-node name by putting it at the front, in parentheses. Thus,
-`g(dir)TopRET' would go to the Info Directory node, which is node `Top'
-in the file `dir'.
-
- The node name `*' specifies the whole file. So you can look at all
-of the current file by typing `g*RET' or all of any other file with
-`g(FILENAME)RET'.
-
- The `s' command allows you to search a whole file for a string. It
-switches to the next node if and when that is necessary. You type `s'
-followed by the string to search for, terminated by RET. To search for
-the same string again, just `s' followed by RET will do. The file's
-nodes are scanned in the order they are in in the file, which has no
-necessary relationship to the order that they may be in in the tree
-structure of menus and `next' pointers. But normally the two orders
-are not very different. In any case, you can always do a `b' to find
-out what node you have reached, if the header is not visible (this can
-happen, because `s' puts your cursor at the occurrence of the string,
-not at the beginning of the node).
-
- If you grudge the system each character of type-in it requires, you
-might like to use the commands `1', `2', `3', `4', and `5'. They are
-short for the `m' command together with an argument. "1", "2", "3",
-"4", and "5". `1' goes through the first item in the current node's
-menu; `2' goes through the second item, etc. Note that numbers larger
-than 5 are not allowed. If the item you want is that far down, you are
-better off using an abbreviation for its name than counting.
-
- The Info command `e' changes from Info mode to an ordinary Emacs
-editing mode, so that you can edit the text of the current node. Type
-`C-c C-c' to switch back to Info. The `e' command is allowed only if
-the variable `Info-enable-edit' is non-`nil'.
-
-
-File: info.info, Node: Add, Next: Menus, Prev: Expert, Up: Advanced Info
-
-Adding a new node to Info
-=========================
-
- To add a new topic to the list in the directory, you must:
-
- 1. Create a node, in some file, to document that topic.
-
- 2. Put that topic in the menu in the directory. *Note Menu: Menus.
-
- The new node can live in an existing documentation file, or in a new
-one. It must have a ^_ character before it (invisible to the user;
-this node has one but you cannot see it), and it ends with either a ^_,
-a ^L, or the end of file. Note: If you put in a ^L to end a new node,
-be sure that there is a ^_ after it to start the next one, since ^L
-cannot *start* a node. Also, a nicer way to make a node boundary be a
-page boundary as well is to put a ^L *right after* the ^_.
-
- The ^_ starting a node must be followed by a newline or a ^L
-newline, after which comes the node's header line. The header line
-must give the node's name (by which Info finds it), and state the names
-of the `Next', `Previous', and `Up' nodes (if there are any). As you
-can see, this node's `Up' node is the node `Top', which points at all
-the documentation for Info. The `Next' node is `Menus'.
-
- The keywords "Node", "Previous", "Up" and "Next", may appear in any
-order, anywhere in the header line, but the recommended order is the
-one in this sentence. Each keyword must be followed by a colon, spaces
-and tabs, and then the appropriate name. The name may be terminated
-with a tab, a comma, or a newline. A space does not end it; node names
-may contain spaces. The case of letters in the names is insignificant.
-
- A node name has two forms. A node in the current file is named by
-what appears after the `Node: ' in that node's first line. For
-example, this node's name is `Add'. A node in another file is named by
-`(FILENAME)NODE-WITHIN-FILE', as in `(info)Add' for this node. If the
-file name is relative, it is taken starting from the standard Info file
-directory of your site. The name `(FILENAME)Top' can be abbreviated to
-just `(FILENAME)'. By convention, the name `Top' is used for the
-"highest" node in any single file--the node whose `Up' points out of
-the file. The Directory node is `(dir)'. The `Top' node of a document
-file listed in the Directory should have an `Up: (dir)' in it.
-
- The node name `*' is special: it refers to the entire file. Thus,
-`g*' shows you the whole current file. The use of the node `*' is to
-make it possible to make old-fashioned, unstructured files into nodes
-of the tree.
-
- The `Node:' name, in which a node states its own name, must not
-contain a filename, since Info when searching for a node does not
-expect one to be there. The `Next', `Previous' and `Up' names may
-contain them. In this node, since the `Up' node is in the same file,
-it was not necessary to use one.
-
- Note that the nodes in this file have a file name in the header
-line. The file names are ignored by Info, but they serve as comments
-to help identify the node for the user.
-
-
-File: info.info, Node: Menus, Next: Cross-refs, Prev: Add, Up: Advanced Info
-
-How to Create Menus
-===================
-
- Any node in the Info hierarchy may have a "menu"--a list of subnodes.
-The `m' command searches the current node's menu for the topic which it
-reads from the terminal.
-
- A menu begins with a line starting with `* Menu:'. The rest of the
-line is a comment. After the starting line, every line that begins
-with a `* ' lists a single topic. The name of the topic-the argument
-that the user must give to the `m' command to select this topic--comes
-right after the star and space, and is followed by a colon, spaces and
-tabs, and the name of the node which discusses that topic. The node
-name, like node names following `Next', `Previous' and `Up', may be
-terminated with a tab, comma, or newline; it may also be terminated
-with a period.
-
- If the node name and topic name are the same, than rather than
-giving the name twice, the abbreviation `* NAME::' may be used (and
-should be used, whenever possible, as it reduces the visual clutter in
-the menu).
-
- It is considerate to choose the topic names so that they differ from
-each other very near the beginning--this allows the user to type short
-abbreviations. In a long menu, it is a good idea to capitalize the
-beginning of each item name which is the minimum acceptable
-abbreviation for it (a long menu is more than 5 or so entries).
-
- The nodes listed in a node's menu are called its "subnodes", and it
-is their "superior". They should each have an `Up:' pointing at the
-superior. It is often useful to arrange all or most of the subnodes in
-a sequence of `Next' and `Previous' pointers so that someone who wants
-to see them all need not keep revisiting the Menu.
-
- The Info Directory is simply the menu of the node `(dir)Top'--that
-is, node `Top' in file `.../info/dir'. You can put new entries in that
-menu just like any other menu. The Info Directory is *not* the same as
-the file directory called `info'. It happens that many of Info's files
-live on that file directory, but they do not have to; and files on that
-directory are not automatically listed in the Info Directory node.
-
- Also, although the Info node graph is claimed to be a "hierarchy",
-in fact it can be *any* directed graph. Shared structures and pointer
-cycles are perfectly possible, and can be used if they are appropriate
-to the meaning to be expressed. There is no need for all the nodes in
-a file to form a connected structure. In fact, this file has two
-connected components. You are in one of them, which is under the node
-`Top'; the other contains the node `Help' which the `h' command goes
-to. In fact, since there is no garbage collector, nothing terrible
-happens if a substructure is not pointed to, but such a substructure is
-rather useless since nobody can ever find out that it exists.
-
-
-File: info.info, Node: Cross-refs, Next: Tags, Prev: Menus, Up: Advanced Info
-
-Creating Cross References
-=========================
-
- A cross reference can be placed anywhere in the text, unlike a menu
-item which must go at the front of a line. A cross reference looks
-like a menu item except that it has `*note' instead of `*'. It
-*cannot* be terminated by a `)', because `)''s are so often part of
-node names. If you wish to enclose a cross reference in parentheses,
-terminate it with a period first. Here are two examples of cross
-references pointers:
-
- *Note details: commands. (See *note 3: Full Proof.)
-
- They are just examples. The places they "lead to" do not really
-exist!
-
-
-File: info.info, Node: Tags, Next: Checking, Prev: Cross-refs, Up: Advanced Info
-
-Tag Tables for Info Files
-=========================
-
- You can speed up the access to nodes of a large Info file by giving
-it a tag table. Unlike the tag table for a program, the tag table for
-an Info file lives inside the file itself and is used automatically
-whenever Info reads in the file.
-
- To make a tag table, go to a node in the file using Emacs Info mode
-and type `M-x Info-tagify'. Then you must use `C-x C-s' to save the
-file.
-
- Once the Info file has a tag table, you must make certain it is up
-to date. If, as a result of deletion of text, any node moves back more
-than a thousand characters in the file from the position recorded in
-the tag table, Info will no longer be able to find that node. To
-update the tag table, use the `Info-tagify' command again.
-
- An Info file tag table appears at the end of the file and looks like
-this:
-
- ^_
- Tag Table:
- File: info, Node: Cross-refs^?21419
- File: info, Node: Tags^?22145
- ^_
- End Tag Table
-
-Note that it contains one line per node, and this line contains the
-beginning of the node's header (ending just after the node name), a DEL
-character, and the character position in the file of the beginning of
-the node.
-
-
-File: info.info, Node: Checking, Prev: Tags, Up: Advanced Info
-
-Checking an Info File
-=====================
-
- When creating an Info file, it is easy to forget the name of a node
-when you are making a pointer to it from another node. If you put in
-the wrong name for a node, this is not detected until someone tries to
-go through the pointer using Info. Verification of the Info file is an
-automatic process which checks all pointers to nodes and reports any
-pointers which are invalid. Every `Next', `Previous', and `Up' is
-checked, as is every menu item and every cross reference. In addition,
-any `Next' which does not have a `Previous' pointing back is reported.
-Only pointers within the file are checked, because checking pointers to
-other files would be terribly slow. But those are usually few.
-
- To check an Info file, do `M-x Info-validate' while looking at any
-node of the file with Emacs Info mode.
-
-
-File: info.info, Node: Create an Info File, Prev: Advanced Info, Up: Top
-
-Creating an Info File from a Makeinfo file
-******************************************
-
- `makeinfo' is a utility that converts a Texinfo file into an Info
-file; `texinfo-format-region' and `texinfo-format-buffer' are GNU Emacs
-functions that do the same.
-
- *Note Creating an Info File: (texinfo)Create an Info File, to learn
-how to create an Info file from a Texinfo file.
-
- *Note Overview of Texinfo: (texinfo)Top, to learn how to write a
-Texinfo file.
-
-
-
-Tag Table:
-Node: Top913
-Node: Getting Started1431
-Node: Help-Small-Screen2179
-Node: Help3921
-Node: Help-P4949
-Node: Help-^L5811
-Node: Help-M8462
-Node: Help-FOO14030
-Node: Help-Adv14766
-Node: Help-Cross17148
-Node: Help-Q17794
-Node: Advanced Info18434
-Node: Expert19330
-Node: Add21601
-Node: Menus24635
-Node: Cross-refs27509
-Node: Tags28211
-Node: Checking29510
-Node: Create an Info File30434
-
-End Tag Table
diff --git a/gnu/usr.bin/texinfo/info-files/makeinfo.info b/gnu/usr.bin/texinfo/info-files/makeinfo.info
deleted file mode 100644
index 81dbe14..0000000
--- a/gnu/usr.bin/texinfo/info-files/makeinfo.info
+++ /dev/null
@@ -1,224 +0,0 @@
-This is Info file makeinfo.info, produced by Makeinfo-1.55 from the
-input file makeinfo.texi.
-
-This file is an extract from the `Texinfo' manual.
-It documents `makeinfo', a program that converts Texinfo files into
-Info files.
-
-Copyright (C) 1992, 1993 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 and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation
-approved by the Free Software Foundation.
-
-
-File: makeinfo.info, Node: Top, Next: What is makeinfo, Prev: (dir), Up: (dir)
-
-`makeinfo'
-**********
-
-This file documents the use of the `makeinfo' program, versions 1.51
-and later. It is an extract from the `Texinfo' manual.
-
-* Menu:
-
-* What is makeinfo::
-
-
-File: makeinfo.info, Node: What is makeinfo, Prev: Top, Up: Top
-
-What is `makeinfo'?
-*******************
-
-`makeinfo' is a program for converting "Texinfo" files into "Info"
-files. Texinfo is a documentation system that uses a single source
-file to produce both on-line information and printed output.
-
-You can read the on-line information using Info; type `info' to learn
-about Info. *Note Texinfo: (texinfo.texi)Top, to learn about the
-Texinfo documentation system.
-
-* Menu:
-
-* Formatting Control::
-* Options::
-* Pointer Validation::
-
-
-File: makeinfo.info, Node: Formatting Control, Next: Options, Up: What is makeinfo
-
-Controlling Paragraph Formats
-=============================
-
-In general, `makeinfo' "fills" the paragraphs that it outputs to an
-Info file. Filling is the process of breaking and connecting lines so
-that lines are the same length as or shorter than the number specified
-as the fill column. Lines are broken between words. With `makeinfo',
-you can control:
-
- * The width of each paragraph (the "fill-column").
-
- * The amount of indentation that the first line of each paragraph
- receives (the "paragraph-indentation").
-
-
-File: makeinfo.info, Node: Options, Next: Pointer Validation, Prev: Formatting Control, Up: What is makeinfo
-
-Command Line Options
-====================
-
-The following command line options are available for `makeinfo'.
-
-`-D VAR'
- Cause VAR to be defined. This is equivalent to `@set VAR' in the
- Texinfo file.
-
-`--error-limit LIMIT'
- Set the maximum number of errors that `makeinfo' will report
- before exiting (on the assumption that continuing would be
- useless). The default number of errors that can be reported before
- `makeinfo' gives up is 100.
-
-`--fill-column WIDTH'
- Specify the maximum number of columns in a line; this is the
- right-hand edge of a line. Paragraphs that are filled will be
- filled to this width. The default value for `fill-column' is 72.
-
-`--footnote-style STYLE'
- Set the footnote style to STYLE, either `end' for the end node
- style or `separate' for the separate node style. The value set by
- this option overrides the value set in a Texinfo file by an
- `@footnotestyle' command. When the footnote style is `separate',
- `makeinfo' makes a new node containing the footnotes found in the
- current node. When the footnote style is `end', `makeinfo' places
- the footnote references at the end of the current node.
-
-`-I DIR'
- Add `dir' to the directory search list for finding files that are
- included using the `@include' command. By default, `makeinfo'
- searches only the current directory.
-
-`--no-headers'
- Do not include menus or node lines in the output. This results in
- an ASCII file that you cannot read in Info since it does not
- contain the requisite nodes or menus; but you can print such a
- file in a single, typewriter-like font and produce acceptable
- output.
-
-`--no-split'
- Suppress the splitting stage of `makeinfo'. Normally, large
- output files (where the size is greater than 70k bytes) are split
- into smaller subfiles, each one approximately 50k bytes. If you
- specify `--no-split', `makeinfo' will not split up the output file.
-
-`--no-pointer-validate'
-`--no-validate'
- Suppress the pointer-validation phase of `makeinfo'. Normally,
- after a Texinfo file is processed, some consistency checks are
- made to ensure that cross references can be resolved, etc. *Note
- Pointer Validation::.
-
-`--no-warn'
- Suppress the output of warning messages. This does *not* suppress
- the output of error messages, only warnings. You might want this
- if the file you are creating has examples of Texinfo cross
- references within it, and the nodes that are referenced do not
- actually exist.
-
-`--no-number-footnotes'
- Supress automatic footnote numbering. By default, `makeinfo'
- numbers each footnote sequentially in a single node, resetting the
- current footnote number to 1 at the start of each node.
-
-`--output FILE'
-`-o FILE'
- Specify that the output should be directed to FILE and not to the
- file name specified in the `@setfilename' command found in the
- Texinfo source. FILE can be the special token `-', which specifies
- standard output.
-
-`--paragraph-indent INDENT'
- Set the paragraph indentation style to INDENT. The value set by
- this option overrides the value set in a Texinfo file by an
- `@paragraphindent' command. The value of INDENT is interpreted as
- follows:
-
- * If the value of INDENT is `asis', do not change the existing
- indentation at the starts of paragraphs.
-
- * If the value of INDENT is zero, delete any existing
- indentation.
-
- * If the value of INDENT is greater than zero, indent each
- paragraph by that number of spaces.
-
-`--reference-limit LIMIT'
- Set the value of the number of references to a node that
- `makeinfo' will make without reporting a warning. If a node has
- more than this number of references in it, `makeinfo' will make the
- references but also report a warning.
-
-`-U VAR'
- Cause VAR to be undefined. This is equivalent to `@clear VAR' in
- the Texinfo file.
-
-`--verbose'
- Cause `makeinfo' to display messages saying what it is doing.
- Normally, `makeinfo' only outputs messages if there are errors or
- warnings.
-
-`--version'
- Report the version number of this copy of `makeinfo'.
-
-
-File: makeinfo.info, Node: Pointer Validation, Prev: Options, Up: What is makeinfo
-
-Pointer Validation
-==================
-
-If you do not suppress pointer-validation (by using the
-`--no-pointer-validation' option), `makeinfo' will check the validity
-of the final Info file. Mostly, this means ensuring that nodes you
-have referenced really exist. Here is a complete list of what is
-checked:
-
- 1. If a `Next', `Previous', or `Up' node reference is a reference to a
- node in the current file and is not an external reference such as
- to `(dir)', then the referenced node must exist.
-
- 2. In every node, if the `Previous' node is different from the `Up'
- node, then the `Previous' node must also be pointed to by a `Next'
- node.
-
- 3. Every node except the `Top' node must have an `Up' pointer.
-
- 4. The node referenced by an `Up' pointer must contain a reference to
- the current node in some manner other than through a `Next'
- reference. This includes menu entries and cross references.
-
- 5. If the `Next' reference of a node is not the same as the `Next'
- reference of the `Up' reference, then the node referenced by the
- `Next' pointer must have a `Previous' pointer that points back to
- the current node. This rule allows the last node in a section to
- point to the first node of the next chapter.
-
-
-
-Tag Table:
-Node: Top949
-Node: What is makeinfo1215
-Node: Formatting Control1758
-Node: Options2377
-Node: Pointer Validation6743
-
-End Tag Table
diff --git a/gnu/usr.bin/texinfo/info-files/texi-files/info-stnd.texi b/gnu/usr.bin/texinfo/info-files/texi-files/info-stnd.texi
deleted file mode 100644
index 286973b..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi-files/info-stnd.texi
+++ /dev/null
@@ -1,1359 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header
-@setfilename info-stnd.info
-@settitle GNU Info
-@set InfoProgVer 2.9
-@paragraphindent none
-@footnotestyle separate
-@synindex vr cp
-@synindex fn cp
-@synindex ky cp
-@comment %**end of header
-
-@ifinfo
-This file documents GNU Info, a program for viewing the on-line formatted
-versions of Texinfo files. This documentation is different from the
-documentation for the Info reader that is part of GNU Emacs. If you do
-not know how to use Info, but have a working Info reader, you should
-read that documentation first.
-
-Copyright @copyright{} 1992, 1993 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.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries a 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 also that the
-sections entitled ``Copying'' and ``GNU General Public License'' are
-included exactly as in the original, 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,
-except that this permission notice may be stated in a translation
-approved by the Free Software Foundation.
-@end ifinfo
-
-@titlepage
-@title GNU Info User's Guide
-@subtitle For GNU Info version @value{InfoProgVer}
-@author Brian J. Fox (bfox@@ai.mit.edu)
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1992, 1993 Free Software Foundation
-
-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
-sections entitled ``Copying'' and ``GNU General Public License'' are
-included exactly as in the original, 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,
-except that this permission notice may be stated in a translation
-approved by the Free Software Foundation.
-@end titlepage
-
-@ifinfo
-@node Top, What is Info, (dir), (dir)
-@top The GNU Info Program
-
-This file documents GNU Info, a program for viewing the on-line
-formatted versions of Texinfo files, version @value{InfoProgVer}. This
-documentation is different from the documentation for the Info reader
-that is part of GNU Emacs.
-@end ifinfo
-
-@menu
-* What is Info::
-* Options:: Options you can pass on the command line.
-* Cursor Commands:: Commands which move the cursor within a node.
-* Scrolling Commands:: Commands for moving the node around
- in a window.
-* Node Commands:: Commands for selecting a new node.
-* Searching Commands:: Commands for searching an Info file.
-* Xref Commands:: Commands for selecting cross references.
-* Window Commands:: Commands which manipulate multiple windows.
-* Printing Nodes:: How to print out the contents of a node.
-* Miscellaneous Commands:: A few commands that defy categories.
-* Variables:: How to change the default behavior of Info.
-* GNU Info Global Index:: Global index containing keystrokes,
- command names, variable names,
- and general concepts.
-@end menu
-
-@node What is Info, Options, Top, Top
-@chapter What is Info?
-
-@iftex
-This file documents GNU Info, a program for viewing the on-line formatted
-versions of Texinfo files, version @value{InfoProgVer}.
-@end iftex
-
-@dfn{Info} is a program which is used to view Info files on an ASCII
-terminal. @dfn{Info files} are the result of processing Texinfo files
-with the program @code{makeinfo} or with one of the Emacs commands, such
-as @code{M-x texinfo-format-buffer}. Texinfo itself is a documentation
-system that uses a single source file to produce both on-line
-information and printed output. You can typeset and print the
-files that you read in Info.@refill
-
-@node Options, Cursor Commands, What is Info, Top
-@chapter Command Line Options
-@cindex command line options
-@cindex arguments, command line
-
-GNU Info accepts several options to control the initial node being
-viewed, and to specify which directories to search for Info files. Here
-is a template showing an invocation of GNU Info from the shell:
-
-@example
-info [--@var{option-name} @var{option-value}] @var{menu-item}@dots{}
-@end example
-
-The following @var{option-names} are available when invoking Info from
-the shell:
-
-@table @code
-@cindex directory path
-@item --directory @var{directory-path}
-@itemx -d @var{directory-path}
-Add @var{directory-path} to the list of directory paths searched when
-Info needs to find a file. You may issue @code{--directory} multiple
-times; once for each directory which contains Info files.
-Alternatively, you may specify a value for the environment variable
-@code{INFOPATH}; if @code{--directory} is not given, the value of
-@code{INFOPATH} is used. The value of @code{INFOPATH} is a colon
-separated list of directory names. If you do not supply @code{INFOPATH}
-or @code{--directory-path}, Info uses a default path.
-
-@item --file @var{filename}
-@itemx -f @var{filename}
-@cindex Info file, selecting
-Specify a particular Info file to visit. By default, Info visits
-the file @code{dir}; if you use this option, Info will start with
-@code{(@var{filename})Top} as the first file and node.
-
-@item --node @var{nodename}
-@itemx -n @var{nodename}
-@cindex node, selecting
-Specify a particular node to visit in the initial file that Info
-loads. This is especially useful in conjunction with
-@code{--file}@footnote{Of course, you can specify both the file and node
-in a @code{--node} command; but don't forget to escape the open and
-close parentheses from the shell as in: @code{info --node
-'(emacs)Buffers'}}. You may specify @code{--node} multiple times; for
-an interactive Info, each @var{nodename} is visited in its own window,
-for a non-interactive Info (such as when @code{--output} is given) each
-@var{nodename} is processed sequentially.
-
-@item --output @var{filename}
-@itemx -o @var{filename}
-@cindex file, outputting to
-@cindex outputting to a file
-Specify @var{filename} as the name of a file to which to direct output.
-Each node that Info visits will be output to @var{filename} instead of
-interactively viewed. A value of @code{-} for @var{filename} specifies
-the standard output.
-
-@item --subnodes
-@cindex @code{--subnodes}, command line option
-This option only has meaning when given in conjunction with
-@code{--output}. It means to recursively output the nodes appearing in
-the menus of each node being output. Menu items which resolve to
-external Info files are not output, and neither are menu items which are
-members of an index. Each node is only output once.
-
-@item --help
-@itemx -h
-Produces a relatively brief description of the available Info options.
-
-@item --version
-@cindex version information
-Prints the version information of Info and exits.
-
-@item @var{menu-item}
-@cindex menu, following
-Info treats its remaining arguments as the names of menu items. The
-first argument is a menu item in the initial node visited, while
-the second argument is a menu item in the first argument's node.
-You can easily move to the node of your choice by specifying the menu
-names which describe the path to that node. For example,
-
-@example
-info emacs buffers
-@end example
-
-@noindent
-first selects the menu item @samp{Emacs} in the node @samp{(dir)Top},
-and then selects the menu item @samp{Buffers} in the node
-@samp{(emacs)Top}.
-@end table
-
-@node Cursor Commands, Scrolling Commands, Options, Top
-@chapter Moving the Cursor
-@cindex cursor, moving
-
-Many people find that reading screens of text page by page is made
-easier when one is able to indicate particular pieces of text with some
-kind of pointing device. Since this is the case, GNU Info (both the
-Emacs and standalone versions) have several commands which allow you to
-move the cursor about the screen. The notation used in this manual to
-describe keystrokes is identical to the notation used within the Emacs
-manual, and the GNU Readline manual. @xref{Characters, , Character
-Conventions, emacs, the GNU Emacs Manual}, if you are unfamiliar with the
-notation.
-
-The following table lists the basic cursor movement commands in Info.
-Each entry consists of the key sequence you should type to execute the
-cursor movement, the @code{M-x}@footnote{@code{M-x} is also a command; it
-invokes @code{execute-extended-command}. @xref{M-x, , Executing an
-extended command, emacs, the GNU Emacs Manual}, for more detailed
-information.} command name (displayed in parentheses), and a short
-description of what the command does. All of the cursor motion commands
-can take an @dfn{numeric} argument (@pxref{Miscellaneous Commands,
-@code{universal-argument}}), to find out how to supply them. With a
-numeric argument, the motion commands are simply executed that
-many times; for example, a numeric argument of 4 given to
-@code{next-line} causes the cursor to move down 4 lines. With a
-negative numeric argument, the motion is reversed; an argument of -4
-given to the @code{next-line} command would cause the cursor to move
-@emph{up} 4 lines.
-
-@table @asis
-@item @code{C-n} (@code{next-line})
-@kindex C-n
-@findex next-line
-Move the cursor down to the next line.
-
-@item @code{C-p} (@code{prev-line})
-@kindex C-p
-@findex prev-line
-Move the cursor up to the previous line.
-
-@item @code{C-a} (@code{beginning-of-line})
-@kindex C-a, in Info windows
-@findex beginning-of-line
-Move the cursor to the start of the current line.
-
-@item @code{C-e} (@code{end-of-line})
-@kindex C-e, in Info windows
-@findex end-of-line
-Move the cursor to the end of the current line.
-
-@item @code{C-f} (@code{forward-char})
-@kindex C-f, in Info windows
-@findex forward-char
-Move the cursor forward a character.
-
-@item @code{C-b} (@code{backward-char})
-@kindex C-b, in Info windows
-@findex backward-char
-Move the cursor backward a character.
-
-@item @code{M-f} (@code{forward-word})
-@kindex M-f, in Info windows
-@findex forward-word
-Move the cursor forward a word.
-
-@item @code{M-b} (@code{backward-word})
-@kindex M-b, in Info windows
-@findex backward-word
-Move the cursor backward a word.
-
-@item @code{M-<} (@code{beginning-of-node})
-@itemx @code{b}
-@kindex b, in Info windows
-@kindex M-<
-@findex beginning-of-node
-Move the cursor to the start of the current node.
-
-@item @code{M->} (@code{end-of-node})
-@kindex M->
-@findex end-of-node
-Move the cursor to the end of the current node.
-
-@item @code{M-r} (@code{move-to-window-line})
-@kindex M-r
-@findex move-to-window-line
-Move the cursor to a specific line of the window. Without a numeric
-argument, @code{M-r} moves the cursor to the start of the line in the
-center of the window. With a numeric argument of @var{n}, @code{M-r}
-moves the cursor to the start of the @var{n}th line in the window.
-@end table
-
-@node Scrolling Commands, Node Commands, Cursor Commands, Top
-@chapter Moving Text Within a Window
-@cindex scrolling
-
-Sometimes you are looking at a screenful of text, and only part of the
-current paragraph you are reading is visible on the screen. The
-commands detailed in this section are used to shift which part of the
-current node is visible on the screen.
-
-@table @asis
-@item @code{SPC} (@code{scroll-forward})
-@itemx @code{C-v}
-@kindex SPC, in Info windows
-@kindex C-v
-@findex scroll-forward
-Shift the text in this window up. That is, show more of the node which
-is currently below the bottom of the window. With a numeric argument,
-show that many more lines at the bottom of the window; a numeric
-argument of 4 would shift all of the text in the window up 4 lines
-(discarding the top 4 lines), and show you four new lines at the bottom
-of the window. Without a numeric argument, @key{SPC} takes the bottom
-two lines of the window and places them at the top of the window,
-redisplaying almost a completely new screenful of lines.
-
-@item @code{DEL} (@code{scroll-backward})
-@itemx @code{M-v}
-@kindex DEL, in Info windows
-@kindex M-v
-@findex scroll-backward
-Shift the text in this window down. The inverse of
-@code{scroll-forward}.
-@end table
-
-@cindex scrolling through node structure
-The @code{scroll-forward} and @code{scroll-backward} commands can also
-move forward and backward through the node structure of the file. If
-you press @key{SPC} while viewing the end of a node, or @key{DEL} while
-viewing the beginning of a node, what happens is controlled by the
-variable @code{scroll-behavior}. @xref{Variables,
-@code{scroll-behavior}}, for more information.
-
-@table @asis
-@item @code{C-l} (@code{redraw-display})
-@kindex C-l
-@findex redraw-display
-Redraw the display from scratch, or shift the line containing the cursor
-to a specified location. With no numeric argument, @samp{C-l} clears
-the screen, and then redraws its entire contents. Given a numeric
-argument of @var{n}, the line containing the cursor is shifted so that
-it is on the @var{n}th line of the window.
-
-@item @code{C-x w} (@code{toggle-wrap})
-@kindex C-w
-@findex toggle-wrap
-Toggles the state of line wrapping in the current window. Normally,
-lines which are longer than the screen width @dfn{wrap}, i.e., they are
-continued on the next line. Lines which wrap have a @samp{\} appearing
-in the rightmost column of the screen. You can cause such lines to be
-terminated at the rightmost column by changing the state of line
-wrapping in the window with @code{C-x w}. When a line which needs more
-space than one screen width to display is displayed, a @samp{$} appears
-in the rightmost column of the screen, and the remainder of the line is
-invisible.
-@end table
-
-@node Node Commands, Searching Commands, Scrolling Commands, Top
-@chapter Selecting a New Node
-@cindex nodes, selection of
-
-This section details the numerous Info commands which select a new node
-to view in the current window.
-
-The most basic node commands are @samp{n}, @samp{p}, @samp{u}, and
-@samp{l}.
-
-When you are viewing a node, the top line of the node contains some Info
-@dfn{pointers} which describe where the next, previous, and up nodes
-are. Info uses this line to move about the node structure of the file
-when you use the following commands:
-
-@table @asis
-@item @code{n} (@code{next-node})
-@kindex n
-@findex next-node
-Select the `Next' node.
-
-@item @code{p} (@code{prev-node})
-@kindex p
-@findex prev-node
-Select the `Prev' node.
-
-@item @code{u} (@code{up-node})
-@kindex u
-@findex up-node
-Select the `Up' node.
-@end table
-
-You can easily select a node that you have already viewed in this window
-by using the @samp{l} command -- this name stands for "last", and
-actually moves through the list of already visited nodes for this
-window. @samp{l} with a negative numeric argument moves forward through
-the history of nodes for this window, so you can quickly step between
-two adjacent (in viewing history) nodes.
-
-@table @asis
-@item @code{l} (@code{history-node})
-@kindex l
-@findex history-node
-Select the most recently selected node in this window.
-@end table
-
-Two additional commands make it easy to select the most commonly
-selected nodes; they are @samp{t} and @samp{d}.
-
-@table @asis
-@item @code{t} (@code{top-node})
-@kindex t
-@findex top-node
-Select the node @samp{Top} in the current Info file.
-
-@item @code{d} (@code{dir-node})
-@kindex d
-@findex dir-node
-Select the directory node (i.e., the node @samp{(dir)}).
-@end table
-
-Here are some other commands which immediately result in the selection
-of a different node in the current window:
-
-@table @asis
-@item @code{<} (@code{first-node})
-@kindex <
-@findex first-node
-Selects the first node which appears in this file. This node is most
-often @samp{Top}, but it does not have to be.
-
-@item @code{>} (@code{last-node})
-@kindex >
-@findex last-node
-Select the last node which appears in this file.
-
-@item @code{]} (@code{global-next-node})
-@kindex ]
-@findex global-next-node
-Move forward or down through node structure. If the node that you are
-currently viewing has a @samp{Next} pointer, that node is selected.
-Otherwise, if this node has a menu, the first menu item is selected. If
-there is no @samp{Next} and no menu, the same process is tried with the
-@samp{Up} node of this node.
-
-@item @code{[} (@code{global-prev-node})
-@kindex [
-@findex global-prev-node
-Move backward or up through node structure. If the node that you are
-currently viewing has a @samp{Prev} pointer, that node is selected.
-Otherwise, if the node has an @samp{Up} pointer, that node is selected,
-and if it has a menu, the last item in the menu is selected.
-@end table
-
-You can get the same behavior as @code{global-next-node} and
-@code{global-prev-node} while simply scrolling through the file with
-@key{SPC} and @key{DEL}; @xref{Variables, @code{scroll-behavior}}, for
-more information.
-
-@table @asis
-@item @code{g} (@code{goto-node})
-@kindex g
-@findex goto-node
-Read the name of a node and select it. No completion is done while
-reading the node name, since the desired node may reside in a separate
-file. The node must be typed exactly as it appears in the Info file. A
-file name may be included as with any node specification, for example
-
-@example
-@code{g(emacs)Buffers}
-@end example
-
-finds the node @samp{Buffers} in the Info file @file{emacs}.
-
-@item @code{C-x k} (@code{kill-node})
-@kindex C-x k
-@findex kill-node
-Kill a node. The node name is prompted for in the echo area, with a
-default of the current node. @dfn{Killing} a node means that Info tries
-hard to forget about it, removing it from the list of history nodes kept
-for the window where that node is found. Another node is selected in
-the window which contained the killed node.
-
-@item @code{C-x C-f} (@code{view-file})
-@kindex C-x C-f
-@findex view-file
-Read the name of a file and selects the entire file. The command
-@example
-@code{C-x C-f @var{filename}}
-@end example
-is equivalent to typing
-@example
-@code{g(@var{filename})*}
-@end example
-
-@item @code{C-x C-b} (@code{list-visited-nodes})
-@kindex C-x C-b
-@findex list-visited-nodes
-Make a window containing a menu of all of the currently visited nodes.
-This window becomes the selected window, and you may use the standard
-Info commands within it.
-
-@item @code{C-x b} (@code{select-visited-node})
-@kindex C-x b
-@findex select-visited-node
-Select a node which has been previously visited in a visible window.
-This is similar to @samp{C-x C-b} followed by @samp{m}, but no window is
-created.
-@end table
-
-@node Searching Commands, Xref Commands, Node Commands, Top
-@chapter Searching an Info File
-@cindex searching
-
-GNU Info allows you to search for a sequence of characters throughout an
-entire Info file, search through the indices of an Info file, or find
-areas within an Info file which discuss a particular topic.
-
-@table @asis
-@item @code{s} (@code{search})
-@kindex s
-@findex search
-Read a string in the echo area and search for it.
-
-@item @code{C-s} (@code{isearch-forward})
-@kindex C-s
-@findex isearch-forward
-Interactively search forward through the Info file for a string as you
-type it.
-
-@item @code{C-r} (@code{isearch-backward})
-@kindex C-r
-@findex isearch-backward
-Interactively search backward through the Info file for a string as
-you type it.
-
-@item @code{i} (@code{index-search})
-@kindex i
-@findex index-search
-Look up a string in the indices for this Info file, and select a node
-where the found index entry points to.
-
-@item @code{,} (@code{next-index-match})
-@kindex ,
-@findex next-index-match
-Move to the node containing the next matching index item from the last
-@samp{i} command.
-@end table
-
-The most basic searching command is @samp{s} (@code{search}). The
-@samp{s} command prompts you for a string in the echo area, and then
-searches the remainder of the Info file for an occurrence of that string.
-If the string is found, the node containing it is selected, and the
-cursor is left positioned at the start of the found string. Subsequent
-@samp{s} commands show you the default search string within @samp{[} and
-@samp{]}; pressing @key{RET} instead of typing a new string will use the
-default search string.
-
-@dfn{Incremental searching} is similar to basic searching, but the
-string is looked up while you are typing it, instead of waiting until
-the entire search string has been specified.
-
-@node Xref Commands, Window Commands, Searching Commands, Top
-@chapter Selecting Cross References
-
-We have already discussed the @samp{Next}, @samp{Prev}, and @samp{Up}
-pointers which appear at the top of a node. In addition to these
-pointers, a node may contain other pointers which refer you to a
-different node, perhaps in another Info file. Such pointers are called
-@dfn{cross references}, or @dfn{xrefs} for short.
-
-@menu
-* Parts of an Xref:: What a cross reference is made of.
-* Selecting Xrefs:: Commands for selecting menu or note items.
-@end menu
-
-@node Parts of an Xref, Selecting Xrefs, , Xref Commands
-@section Parts of an Xref
-
-Cross references have two major parts: the first part is called the
-@dfn{label}; it is the name that you can use to refer to the cross
-reference, and the second is the @dfn{target}; it is the full name of
-the node that the cross reference points to.
-
-The target is separated from the label by a colon @samp{:}; first the
-label appears, and then the target. For example, in the sample menu
-cross reference below, the single colon separates the label from the
-target.
-
-@example
-* Foo Label: Foo Target. More information about Foo.
-@end example
-
-Note the @samp{.} which ends the name of the target. The @samp{.} is
-not part of the target; it serves only to let Info know where the target
-name ends.
-
-A shorthand way of specifying references allows two adjacent colons to
-stand for a target name which is the same as the label name:
-
-@example
-* Foo Commands:: Commands pertaining to Foo.
-@end example
-
-In the above example, the name of the target is the same as the name of
-the label, in this case @code{Foo Commands}.
-
-You will normally see two types of cross reference while viewing nodes:
-@dfn{menu} references, and @dfn{note} references. Menu references
-appear within a node's menu; they begin with a @samp{*} at the beginning
-of a line, and continue with a label, a target, and a comment which
-describes what the contents of the node pointed to contains.
-
-Note references appear within the body of the node text; they begin with
-@code{*Note}, and continue with a label and a target.
-
-Like @samp{Next}, @samp{Prev}, and @samp{Up} pointers, cross references
-can point to any valid node. They are used to refer you to a place
-where more detailed information can be found on a particular subject.
-Here is a cross reference which points to a node within the Texinfo
-documentation: @xref{xref, , Writing an Xref, texinfo, the Texinfo
-Manual}, for more information on creating your own texinfo cross
-references.
-
-@node Selecting Xrefs, , Parts of an Xref, Xref Commands
-@section Selecting Xrefs
-
-The following table lists the Info commands which operate on menu items.
-
-@table @asis
-@item @code{1} (@code{menu-digit})
-@itemx @code{2} @dots{} @code{9}
-@cindex 1 @dots{} 9, in Info windows
-@kindex 1 @dots{} 9, in Info windows
-@findex menu-digit
-Within an Info window, pressing a single digit, (such as @samp{1}),
-selects that menu item, and places its node in the current window.
-For convenience, there is one exception; pressing @samp{0} selects the
-@emph{last} item in the node's menu.
-
-@item @code{0} (@code{last-menu-item})
-@kindex 0, in Info windows
-@findex last-menu-item
-Select the last item in the current node's menu.
-
-@item @code{m} (@code{menu-item})
-@kindex m
-@findex menu-item
-Reads the name of a menu item in the echo area and selects its node.
-Completion is available while reading the menu label.
-
-@item @code{M-x find-menu}
-@findex find-menu
-Move the cursor to the start of this node's menu.
-@end table
-
-This table lists the Info commands which operate on note cross references.
-
-@table @asis
-@item @code{f} (@code{xref-item})
-@itemx @code{r}
-@kindex f
-@kindex r
-@findex xref-item
-Reads the name of a note cross reference in the echo area and selects
-its node. Completion is available while reading the cross reference
-label.
-@end table
-
-Finally, the next few commands operate on menu or note references alike:
-
-@table @asis
-@item @code{TAB} (@code{move-to-next-xref})
-@kindex TAB, in Info windows
-@findex move-to-next-xref
-Move the cursor to the start of the next nearest menu item or note
-reference in this node. You can then use @key{RET}
-(@code{select-reference-this-line}) to select the menu or note reference.
-
-@item @code{M-TAB} (@code{move-to-prev-xref})
-@kindex M-TAB, in Info windows
-@findex move-to-prev-xref
-Move the cursor the start of the nearest previous menu item or note
-reference in this node.
-
-@item @code{RET} (@code{select-reference-this-line})
-@kindex RET, in Info windows
-@findex select-reference-this-line
-Select the menu item or note reference appearing on this line.
-@end table
-
-@node Window Commands, Printing Nodes, Xref Commands, Top
-@chapter Manipulating Multiple Windows
-@cindex windows, manipulating
-
-A @dfn{window} is a place to show the text of a node. Windows have a
-view area where the text of the node is displayed, and an associated
-@dfn{mode line}, which briefly describes the node being viewed.
-
-GNU Info supports multiple windows appearing in a single screen; each
-window is separated from the next by its modeline. At any time, there
-is only one @dfn{active} window, that is, the window in which the cursor
-appears. There are commands available for creating windows, changing
-the size of windows, selecting which window is active, and for deleting
-windows.
-
-@menu
-* The Mode Line:: What appears in the mode line?
-* Basic Windows:: Manipulating windows in Info.
-* The Echo Area:: Used for displaying errors and reading input.
-@end menu
-
-@node The Mode Line, Basic Windows, , Window Commands
-@section The Mode Line
-
-A @dfn{mode line} is a line of inverse video which appears at the bottom
-of an Info window. It describes the contents of the window just above
-it; this information includes the name of the file and node appearing in
-that window, the number of screen lines it takes to display the node,
-and the percentage of text that is above the top of the window. It can
-also tell you if the indirect tags table for this Info file needs to be
-updated, and whether or not the Info file was compressed when stored on
-disk.
-
-Here is a sample mode line for a window containing an uncompressed file
-named @file{dir}, showing the node @samp{Top}.
-
-@example
-@group
------Info: (dir)Top, 40 lines --Top---------------------------------------
- ^^ ^ ^^^ ^^
- (file)Node #lines where
-@end group
-@end example
-
-When a node comes from a file which is compressed on disk, this is
-indicated in the mode line with two small @samp{z}'s. In addition, if
-the Info file containing the node has been split into subfiles, the name
-of the subfile containing the node appears in the modeline as well:
-
-@example
---zz-Info: (emacs)Top, 291 lines --Top-- Subfile: emacs-1.Z---------------
-@end example
-
-When Info makes a node internally, such that there is no corresponding
-info file on disk, the name of the node is surrounded by asterisks
-(@samp{*}). The name itself tells you what the contents of the window
-are; the sample mode line below shows an internally constructed node
-showing possible completions:
-
-@example
------Info: *Completions*, 7 lines --All-----------------------------------
-@end example
-
-@node Basic Windows, The Echo Area, The Mode Line, Window Commands
-@section Window Commands
-
-It can be convenient to view more than one node at a time. To allow
-this, Info can display more than one @dfn{window}. Each window has its
-own mode line (@pxref{The Mode Line}) and history of nodes viewed in that
-window (@pxref{Node Commands, , @code{history-node}}).
-
-@table @asis
-@item @code{C-x o} (@code{next-window})
-@cindex windows, selecting
-@kindex C-x o
-@findex next-window
-Select the next window on the screen. Note that the echo area can only be
-selected if it is already in use, and you have left it temporarily.
-Normally, @samp{C-x o} simply moves the cursor into the next window on
-the screen, or if you are already within the last window, into the first
-window on the screen. Given a numeric argument, @samp{C-x o} moves over
-that many windows. A negative argument causes @samp{C-x o} to select
-the previous window on the screen.
-
-@item @code{M-x prev-window}
-@findex prev-window
-Select the previous window on the screen. This is identical to
-@samp{C-x o} with a negative argument.
-
-@item @code{C-x 2} (@code{split-window})
-@cindex windows, creating
-@kindex C-x 2
-@findex split-window
-Split the current window into two windows, both showing the same node.
-Each window is one half the size of the original window, and the cursor
-remains in the original window. The variable @code{automatic-tiling}
-can cause all of the windows on the screen to be resized for you
-automatically, please @pxref{Variables, , automatic-tiling} for more
-information.
-
-@item @code{C-x 0} (@code{delete-window})
-@cindex windows, deleting
-@kindex C-x 0
-@findex delete-window
-Delete the current window from the screen. If you have made too many
-windows and your screen appears cluttered, this is the way to get rid of
-some of them.
-
-@item @code{C-x 1} (@code{keep-one-window})
-@kindex C-x 1
-@findex keep-one-window
-Delete all of the windows excepting the current one.
-
-@item @code{ESC C-v} (@code{scroll-other-window})
-@kindex ESC C-v, in Info windows
-@findex scroll-other-window
-Scroll the other window, in the same fashion that @samp{C-v} might
-scroll the current window. Given a negative argument, scroll the
-"other" window backward.
-
-@item @code{C-x ^} (@code{grow-window})
-@kindex C-x ^
-@findex grow-window
-Grow (or shrink) the current window. Given a numeric argument, grow
-the current window that many lines; with a negative numeric argument,
-shrink the window instead.
-
-@item @code{C-x t} (@code{tile-windows})
-@cindex tiling
-@kindex C-x t
-@findex tile-windows
-Divide the available screen space among all of the visible windows.
-Each window is given an equal portion of the screen in which to display
-its contents. The variable @code{automatic-tiling} can cause
-@code{tile-windows} to be called when a window is created or deleted.
-@xref{Variables, , @code{automatic-tiling}}.
-@end table
-
-@node The Echo Area, , Basic Windows, Window Commands
-@section The Echo Area
-@cindex echo area
-
-The @dfn{echo area} is a one line window which appears at the bottom of
-the screen. It is used to display informative or error messages, and to
-read lines of input from you when that is necessary. Almost all of the
-commands available in the echo area are identical to their Emacs
-counterparts, so please refer to that documentation for greater depth of
-discussion on the concepts of editing a line of text. The following
-table briefly lists the commands that are available while input is being
-read in the echo area:
-
-@table @asis
-@item @code{C-f} (@code{echo-area-forward})
-@kindex C-f, in the echo area
-@findex echo-area-forward
-Move forward a character.
-
-@item @code{C-b} (@code{echo-area-backward})
-@kindex C-b, in the echo area
-@findex echo-area-backward
-Move backward a character.
-
-@item @code{C-a} (@code{echo-area-beg-of-line})
-@kindex C-a, in the echo area
-@findex echo-area-beg-of-line
-Move to the start of the input line.
-
-@item @code{C-e} (@code{echo-area-end-of-line})
-@kindex C-e, in the echo area
-@findex echo-area-end-of-line
-Move to the end of the input line.
-
-@item @code{M-f} (@code{echo-area-forward-word})
-@kindex M-f, in the echo area
-@findex echo-area-forward-word
-Move forward a word.
-
-@item @code{M-b} (@code{echo-area-backward-word})
-@kindex M-b, in the echo area
-@findex echo-area-backward-word
-Move backward a word.
-
-@item @code{C-d} (@code{echo-area-delete})
-@kindex C-d, in the echo area
-@findex echo-area-delete
-Delete the character under the cursor.
-
-@item @code{DEL} (@code{echo-area-rubout})
-@kindex DEL, in the echo area
-@findex echo-area-rubout
-Delete the character behind the cursor.
-
-@item @code{C-g} (@code{echo-area-abort})
-@kindex C-g, in the echo area
-@findex echo-area-abort
-Cancel or quit the current operation. If completion is being read,
-@samp{C-g} discards the text of the input line which does not match any
-completion. If the input line is empty, @samp{C-g} aborts the calling
-function.
-
-@item @code{RET} (@code{echo-area-newline})
-@kindex RET, in the echo area
-@findex echo-area-newline
-Accept (or forces completion of) the current input line.
-
-@item @code{C-q} (@code{echo-area-quoted-insert})
-@kindex C-q, in the echo area
-@findex echo-area-quoted-insert
-Insert the next character verbatim. This is how you can insert control
-characters into a search string, for example.
-
-@item @var{printing character} (@code{echo-area-insert})
-@kindex printing characters, in the echo area
-@findex echo-area-insert
-Insert the character.
-
-@item @code{M-TAB} (@code{echo-area-tab-insert})
-@kindex M-TAB, in the echo area
-@findex echo-area-tab-insert
-Insert a TAB character.
-
-@item @code{C-t} (@code{echo-area-transpose-chars})
-@kindex C-t, in the echo area
-@findex echo-area-transpose-chars
-Transpose the characters at the cursor.
-@end table
-
-The next group of commands deal with @dfn{killing}, and @dfn{yanking}
-text. For an in depth discussion of killing and yanking,
-@pxref{Killing, , Killing and Deleting, emacs, the GNU Emacs Manual}
-
-@table @asis
-@item @code{M-d} (@code{echo-area-kill-word})
-@kindex M-d, in the echo area
-@findex echo-area-kill-word
-Kill the word following the cursor.
-
-@item @code{M-DEL} (@code{echo-area-backward-kill-word})
-@kindex M-DEL, in the echo area
-@findex echo-area-backward-kill-word
-Kill the word preceding the cursor.
-
-@item @code{C-k} (@code{echo-area-kill-line})
-@kindex C-k, in the echo area
-@findex echo-area-kill-line
-Kill the text from the cursor to the end of the line.
-
-@item @code{C-x DEL} (@code{echo-area-backward-kill-line})
-@kindex C-x DEL, in the echo area
-@findex echo-area-backward-kill-line
-Kill the text from the cursor to the beginning of the line.
-
-@item @code{C-y} (@code{echo-area-yank})
-@kindex C-y, in the echo area
-@findex echo-area-yank
-Yank back the contents of the last kill.
-
-@item @code{M-y} (@code{echo-area-yank-pop})
-@kindex M-y, in the echo area
-@findex echo-area-yank-pop
-Yank back a previous kill, removing the last yanked text first.
-@end table
-
-Sometimes when reading input in the echo area, the command that needed
-input will only accept one of a list of several choices. The choices
-represent the @dfn{possible completions}, and you must respond with one
-of them. Since there are a limited number of responses you can make,
-Info allows you to abbreviate what you type, only typing as much of the
-response as is necessary to uniquely identify it. In addition, you can
-request Info to fill in as much of the response as is possible; this
-is called @dfn{completion}.
-
-The following commands are available when completing in the echo area:
-
-@table @asis
-@item @code{TAB} (@code{echo-area-complete})
-@itemx @code{SPC}
-@kindex TAB, in the echo area
-@kindex SPC, in the echo area
-@findex echo-area-complete
-Insert as much of a completion as is possible.
-
-@item @code{?} (@code{echo-area-possible-completions})
-@kindex ?, in the echo area
-@findex echo-area-possible-completions
-Display a window containing a list of the possible completions of what
-you have typed so far. For example, if the available choices are:
-
-@example
-@group
-bar
-foliate
-food
-forget
-@end group
-@end example
-
-@noindent
-and you have typed an @samp{f}, followed by @samp{?}, the possible
-completions would contain:
-
-@example
-@group
-foliate
-food
-forget
-@end group
-@end example
-
-@noindent
-i.e., all of the choices which begin with @samp{f}. Pressing @key{SPC}
-or @key{TAB} would result in @samp{fo} appearing in the echo area, since
-all of the choices which begin with @samp{f} continue with @samp{o}.
-Now, typing @samp{l} followed by @samp{TAB} results in @samp{foliate}
-appearing in the echo area, since that is the only choice which begins
-with @samp{fol}.
-
-@item @code{ESC C-v} (@code{echo-area-scroll-completions-window})
-@kindex ESC C-v, in the echo area
-@findex echo-area-scroll-completions-window
-Scroll the completions window, if that is visible, or the "other"
-window if not.
-@end table
-
-@node Printing Nodes, Miscellaneous Commands, Window Commands, Top
-@chapter Printing Out Nodes
-@cindex printing
-
-You may wish to print out the contents of a node as a quick reference
-document for later use. Info provides you with a command for doing
-this. In general, we recommend that you use @TeX{} to format the
-document and print sections of it, by running @code{tex} on the Texinfo
-source file.
-
-@table @asis
-@item @code{M-x print-node}
-@findex print-node
-@cindex INFO_PRINT_COMMAND, environment variable
-Pipe the contents of the current node through the command in the
-environment variable @code{INFO_PRINT_COMMAND}. If the variable does not
-exist, the node is simply piped to @code{lpr}.
-@end table
-
-@node Miscellaneous Commands, Variables, Printing Nodes, Top
-@chapter Miscellaneous Commands
-
-GNU Info contains several commands which self-document GNU Info:
-
-@table @asis
-@item @code{M-x describe-command}
-@cindex functions, describing
-@cindex commands, describing
-@findex describe-command
-Read the name of an Info command in the echo area and then display a
-brief description of what that command does.
-
-@item @code{M-x describe-key}
-@cindex keys, describing
-@findex describe-key
-Read a key sequence in the echo area, and then display the name and
-documentation of the Info command that the key sequence invokes.
-
-@item @code{M-x describe-variable}
-Read the name of a variable in the echo area and then display a brief
-description of what the variable affects.
-
-@item @code{M-x where-is}
-@findex where-is
-Read the name of an Info command in the echo area, and then display
-a key sequence which can be typed in order to invoke that command.
-
-@item @code{C-h} (@code{get-help-window})
-@itemx @code{?}
-@kindex C-h
-@kindex ?, in Info windows
-@findex get-help-window
-Create (or Move into) the window displaying @code{*Help*}, and place
-a node containing a quick reference card into it. This window displays
-the most concise information about GNU Info available.
-
-@item @code{h} (@code{get-info-help-node})
-@kindex h
-@findex get-info-help-node
-Try hard to visit the node @code{(info)Help}. The Info file
-@file{info.texi} distributed with GNU Info contains this node. Of
-course, the file must first be processed with @code{makeinfo}, and then
-placed into the location of your Info directory.
-@end table
-
-Here are the commands for creating a numeric argument:
-
-@table @asis
-@item @code{C-u} (@code{universal-argument})
-@cindex numeric arguments
-@kindex C-u
-@findex universal-argument
-Start (or multiply by 4) the current numeric argument. @samp{C-u} is
-a good way to give a small numeric argument to cursor movement or
-scrolling commands; @samp{C-u C-v} scrolls the screen 4 lines, while
-@samp{C-u C-u C-n} moves the cursor down 16 lines.
-
-@item @code{M-1} (@code{add-digit-to-numeric-arg})
-@itemx @code{M-2} @dots{} @code{M-9}
-@kindex M-1 @dots{} M-9
-@findex add-digit-to-numeric-arg
-Add the digit value of the invoking key to the current numeric
-argument. Once Info is reading a numeric argument, you may just type
-the digits of the argument, without the Meta prefix. For example, you
-might give @samp{C-l} a numeric argument of 32 by typing:
-
-@example
-@kbd{C-u 3 2 C-l}
-@end example
-
-@noindent
-or
-
-@example
-@kbd{M-3 2 C-l}
-@end example
-@end table
-
-@samp{C-g} is used to abort the reading of a multi-character key
-sequence, to cancel lengthy operations (such as multi-file searches) and
-to cancel reading input in the echo area.
-
-@table @asis
-@item @code{C-g} (@code{abort-key})
-@cindex cancelling typeahead
-@cindex cancelling the current operation
-@kindex C-g, in Info windows
-@findex abort-key
-Cancel current operation.
-@end table
-
-The @samp{q} command of Info simply quits running Info.
-
-@table @asis
-@item @code{q} (@code{quit})
-@cindex quitting
-@kindex q
-@findex quit
-Exit GNU Info.
-@end table
-
-If the operating system tells GNU Info that the screen is 60 lines tall,
-and it is actually only 40 lines tall, here is a way to tell Info that
-the operating system is correct.
-
-@table @asis
-@item @code{M-x set-screen-height}
-@findex set-screen-height
-@cindex screen, changing the height of
-Read a height value in the echo area and set the height of the
-displayed screen to that value.
-@end table
-
-Finally, Info provides a convenient way to display footnotes which might
-be associated with the current node that you are viewing:
-
-@table @asis
-@item @code{ESC C-f} (@code{show-footnotes})
-@kindex ESC C-f
-@findex show-footnotes
-@cindex footnotes, displaying
-Show the footnotes (if any) associated with the current node in another
-window. You can have Info automatically display the footnotes
-associated with a node when the node is selected by setting the variable
-@code{automatic-footnotes}. @xref{Variables, , @code{automatic-footnotes}}.
-@end table
-
-@node Variables, GNU Info Global Index, Miscellaneous Commands, Top
-@chapter Manipulating Variables
-
-GNU Info contains several @dfn{variables} whose values are looked at by various
-Info commands. You can change the values of these variables, and thus
-change the behavior of Info to more closely match your environment and
-Info file reading manner.
-
-@table @asis
-@item @code{M-x set-variable}
-@cindex variables, setting
-@findex set-variable
-Read the name of a variable, and the value for it, in the echo area and
-then set the variable to that value. Completion is available when
-reading the variable name; often, completion is available when reading
-the value to give to the variable, but that depends on the variable
-itself. If a variable does @emph{not} supply multiple choices to
-complete over, it expects a numeric value.
-
-@item @code{M-x describe-variable}
-@cindex variables, describing
-@findex describe-variable
-Read the name of a variable in the echo area and then display a brief
-description of what the variable affects.
-@end table
-
-Here is a list of the variables that you can set in Info.
-
-@table @code
-@item automatic-footnotes
-@vindex automatic-footnotes
-When set to @code{On}, footnotes appear and disappear automatically.
-This variable is @code{On} by default. When a node is selected, a
-window containing the footnotes which appear in that node is created,
-and the footnotes are displayed within the new window. The window that
-Info creates to contain the footnotes is called @samp{*Footnotes*}. If
-a node is selected which contains no footnotes, and a @samp{*Footnotes*}
-window is on the screen, the @samp{*Footnotes*} window is deleted.
-Footnote windows created in this fashion are not automatically tiled so
-that they can use as little of the display as is possible.
-
-@item automatic-tiling
-@vindex automatic-tiling
-When set to @code{On}, creating or deleting a window resizes other
-windows. This variable is @code{Off} by default. Normally, typing
-@samp{C-x 2} divides the current window into two equal parts. When
-@code{automatic-tiling} is set to @code{On}, all of the windows are
-resized automatically, keeping an equal number of lines visible in each
-window. There are exceptions to the automatic tiling; specifically, the
-windows @samp{*Completions*} and @samp{*Footnotes*} are @emph{not}
-resized through automatic tiling; they remain their original size.
-
-@item visible-bell
-@vindex visible-bell
-When set to @code{On}, GNU Info attempts to flash the screen instead of
-ringing the bell. This variable is @code{Off} by default. Of course,
-Info can only flash the screen if the terminal allows it; in the case
-that the terminal does not allow it, the setting of this variable has no
-effect. However, you can make Info perform quietly by setting the
-@code{errors-ring-bell} variable to @code{Off}.
-
-@item errors-ring-bell
-@vindex errors-ring-bell
-When set to @code{On}, errors cause the bell to ring. The default
-setting of this variable is @code{On}.
-
-@item gc-compressed-files
-@vindex gc-compressed-files
-When set to @code{On}, Info garbage collects files which had to be
-uncompressed. The default value of this variable is @code{Off}.
-Whenever a node is visited in Info, the Info file containing that node
-is read into core, and Info reads information about the tags and nodes
-contained in that file. Once the tags information is read by Info, it
-is never forgotten. However, the actual text of the nodes does not need
-to remain in core unless a particular Info window needs it. For
-non-compressed files, the text of the nodes does not remain in core when
-it is no longer in use. But de-compressing a file can be a time
-consuming operation, and so Info tries hard not to do it twice.
-@code{gc-compressed-files} tells Info it is okay to garbage collect the
-text of the nodes of a file which was compressed on disk.
-
-@item show-index-match
-@vindex show-index-match
-When set to @code{On}, the portion of the matched search string is
-highlighted in the message which explains where the matched search
-string was found. The default value of this variable is @code{On}.
-When Info displays the location where an index match was found,
-(@pxref{Searching Commands, , @code{next-index-match}}), the portion of the
-string that you had typed is highlighted by displaying it in the inverse
-case from its surrounding characters.
-
-@item scroll-behavior
-@vindex scroll-behavior
-Control what happens when forward scrolling is requested at the end of
-a node, or when backward scrolling is requested at the beginning of a
-node. The default value for this variable is @code{Continuous}. There
-are three possible values for this variable:
-
-@table @code
-@item Continuous
-Try to get the first item in this node's menu, or failing that, the
-@samp{Next} node, or failing that, the @samp{Next} of the @samp{Up}.
-This behavior is identical to using the @samp{]}
-(@code{global-next-node}) and @samp{[} (@code{global-prev-node})
-commands.
-
-@item Next Only
-Only try to get the @samp{Next} node.
-
-@item Page Only
-Simply give up, changing nothing. If @code{scroll-behavior} is
-@code{Page Only}, no scrolling command can change the node that is being
-viewed.
-@end table
-
-@item scroll-step
-@vindex scroll-step
-The number of lines to scroll when the cursor moves out of the window.
-Scrolling happens automatically if the cursor has moved out of the
-visible portion of the node text when it is time to display. Usually
-the scrolling is done so as to put the cursor on the center line of the
-current window. However, if the variable @code{scroll-step} has a
-nonzero value, Info attempts to scroll the node text by that many lines;
-if that is enough to bring the cursor back into the window, that is what
-is done. The default value of this variable is 0, thus placing the
-cursor (and the text it is attached to) in the center of the window.
-Setting this variable to 1 causes a kind of "smooth scrolling" which
-some people prefer.
-
-@item ISO-Latin
-@cindex ISO Latin characters
-@vindex ISO-Latin
-When set to @code{On}, Info accepts and displays ISO Latin characters.
-By default, Info assumes an ASCII character set. @code{ISO-Latin} tells
-Info that it is running in an environment where the European standard
-character set is in use, and allows you to input such characters to
-Info, as well as display them.
-@end table
-
-
-
-@c the following is incomplete
-@ignore
-@c node Info for Sys Admins
-@c chapter Info for System Administrators
-
-This text describes some common ways of setting up an Info hierarchy
-from scratch, and details the various options that are available when
-installing Info. This text is designed for the person who is installing
-GNU Info on the system; although users may find the information present
-in this section interesting, none of it is vital to understanding how to
-use GNU Info.
-
-@menu
-* Setting the INFOPATH:: Where are my Info files kept?
-* Editing the DIR node:: What goes in `DIR', and why?
-* Storing Info files:: Alternate formats allow flexibility in setups.
-* Using `localdir':: Building DIR on the fly.
-* Example setups:: Some common ways to organize Info files.
-@end menu
-
-@c node Setting the INFOPATH
-@c section Setting the INFOPATH
-
-Where are my Info files kept?
-
-@c node Editing the DIR node
-@c section Editing the DIR node
-
-What goes in `DIR', and why?
-
-@c node Storing Info files
-@c section Storing Info files
-
-Alternate formats allow flexibility in setups.
-
-@c node Using `localdir'
-@c section Using `localdir'
-
-Building DIR on the fly.
-
-@c node Example setups
-@c section Example setups
-
-Some common ways to organize Info files.
-@end ignore
-
-@node GNU Info Global Index, , Variables, Top
-@appendix Global Index
-
-@printindex cp
-
-@contents
-@bye
diff --git a/gnu/usr.bin/texinfo/info-files/texi-files/info.texi b/gnu/usr.bin/texinfo/info-files/texi-files/info.texi
deleted file mode 100644
index 5eec9f1..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi-files/info.texi
+++ /dev/null
@@ -1,861 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header
-@setfilename info.info
-@settitle Info 1.0
-@comment %**end of header
-
-@iftex
-@finalout
-@end iftex
-
-@ifinfo
-This file describes how to use Info,
-the on-line, menu-driven GNU documentation system.
-
-Copyright (C) 1989, 1992 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.
-
-@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 Free Software Foundation.
-@end ifinfo
-
-@setchapternewpage odd
-@titlepage
-@sp 11
-@center @titlefont{Info}
-@sp 2
-@center The
-@sp 2
-@center On-line, Menu-driven
-@sp 2
-@center GNU Documentation System
-
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1989, 1992, 1993 Free Software Foundation, Inc.
-@sp 2
-
-Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA @*
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-@end titlepage
-
-@ifinfo
-@node Top, Getting Started, (dir), (dir)
-@top Info: An Introduction
-
-Info is a program for reading documentation, which you are using now.
-
-To learn how to use Info, type the command @kbd{h}. It brings you
-to a programmed instruction sequence.
-
-@c Need to make sure that `Info-help' goes to the right node,
-@c which is the first node of the first chapter. (It should.)
-@c (Info-find-node "info"
-@c (if (< (window-height) 23)
-@c "Help-Small-Screen"
-@c "Help")))
-
-To learn advanced Info commands, type @kbd{n} twice. This
-brings you to @cite{Info for Experts}, skipping over the .
-`Getting Started' chapter.
-@end ifinfo
-
-@menu
-* Getting Started::
-* Advanced Info::
-* Create an Info File::
-@end menu
-
-@node Getting Started, Advanced Info, Top, Top
-@comment node-name, next, previous, up
-@chapter Getting Started
-
-This first part of the Info manual describes how to get around inside
-of Info. The second part of the manual describes various advanced
-Info commands, and how to write an Info as distinct from a Texinfo
-file. The third part is about how to generate Info files from
-Texinfo files.
-
-@iftex
-This manual is primarily designed for use on a computer, so that you can
-try Info commands while reading about them. Reading it on paper is less
-effective, since you must take it on faith that the commands described
-really do what the manual says. By all means go through this manual now
-that you have it; but please try going through the on-line version as
-well.
-
-There are two ways of looking at the online version of this manual:
-
-@enumerate
-@item
-Type @code{info} at your shell's command line. This approach uses a
-small stand-alone program designed just to read Info files.
-
-@item
-Type @code{emacs} at the command line; then type @kbd{C-h i} (Control
-@kbd{h}, followed by @kbd{i}). This approach uses
-the Info mode of the Emacs program, an editor with many other
-capabilities.
-@end enumerate
-
-In either case, then type @kbd{mInfo} (just the letters), followed by
-@key{RET}---the ``Return'' or ``Enter'' key. At this point, you should
-be ready to follow the instructions in this manual as you read them on
-the screen.
-@c FIXME! (pesch@cygnus.com, 14 dec 1992)
-@c Is it worth worrying about what-if the beginner goes to somebody
-@c else's Emacs session, which already has an Info running in the middle
-@c of something---in which case these simple instructions won't work?
-@end iftex
-
-@menu
-* Help-Small-Screen:: Starting Info on a Small Screen
-* Help:: How to use Info
-* Help-P:: Returning to the Previous node
-* Help-^L:: The Space, Rubout, B and ^L commands.
-* Help-M:: Menus
-* Help-Adv:: Some advanced Info commands
-* Help-Q:: Quitting Info
-@end menu
-
-@node Help-Small-Screen, Help, , Getting Started
-@comment node-name, next, previous, up
-@section Starting Info on a Small Screen
-
-@iftex
-(In Info, you only see this section if your terminal has a small
-number of lines; most readers pass by it without seeing it.)
-@end iftex
-
-Since your terminal has an unusually small number of lines on its
-screen, it is necessary to give you special advice at the beginning.
-
-If you see the text @samp{--All----} at near the bottom right corner
-of the screen, it means the entire text you are looking at fits on the
-screen. If you see @samp{--Top----} instead, it means that there is
-more text below that does not fit. To move forward through the text
-and see another screen full, press the Space bar, @key{SPC}. To move
-back up, press the key labeled @samp{Rubout} or @samp{Delete} or
-@key{DEL}.
-
-@ifinfo
-Here are 40 lines of junk, so you can try @key{SPC} and @key{DEL} and
-see what they do. At the end are instructions of what you should do
-next.
-
-This is line 17 @*
-This is line 18 @*
-This is line 19 @*
-This is line 20 @*
-This is line 21 @*
-This is line 22 @*
-This is line 23 @*
-This is line 24 @*
-This is line 25 @*
-This is line 26 @*
-This is line 27 @*
-This is line 28 @*
-This is line 29 @*
-This is line 30 @*
-This is line 31 @*
-This is line 32 @*
-This is line 33 @*
-This is line 34 @*
-This is line 35 @*
-This is line 36 @*
-This is line 37 @*
-This is line 38 @*
-This is line 39 @*
-This is line 40 @*
-This is line 41 @*
-This is line 42 @*
-This is line 43 @*
-This is line 44 @*
-This is line 45 @*
-This is line 46 @*
-This is line 47 @*
-This is line 48 @*
-This is line 49 @*
-This is line 50 @*
-This is line 51 @*
-This is line 52 @*
-This is line 53 @*
-This is line 54 @*
-This is line 55 @*
-This is line 56 @*
-
-If you have managed to get here, go back to the beginning with
-@key{DEL}, and come back here again, then you understand @key{SPC} and
-@key{DEL}. So now type an @kbd{n}---just one character; do not type
-the quotes and do not type the Return key, @key{RET}, afterward---to
-get to the normal start of the course.
-@end ifinfo
-
-@node Help, Help-P, Help-Small-Screen, Getting Started
-@comment node-name, next, previous, up
-@section How to use Info
-
-You are talking to the program Info, for reading documentation.
-
- Right now you are looking at one @dfn{Node} of Information.
-A node contains text describing a specific topic at a specific
-level of detail. This node's topic is ``how to use Info''.
-
- The top line of a node is its @dfn{header}. This node's header (look at
-it now) says that it is the node named @samp{Help} in the file
-@file{info}. It says that the @samp{Next} node after this one is the node
-called @samp{Help-P}. An advanced Info command lets you go to any node
-whose name you know.
-
- Besides a @samp{Next}, a node can have a @samp{Previous} or an @samp{Up}.
-This node has a @samp{Previous} but no @samp{Up}, as you can see.
-
- Now it is time to move on to the @samp{Next} node, named @samp{Help-P}.
-
->> Type @samp{n} to move there. Type just one character;
- do not type the quotes and do not type a @key{RET} afterward.
-
-@samp{>>} in the margin means it is really time to try a command.
-
-@node Help-P, Help-^L, Help, Getting Started
-@comment node-name, next, previous, up
-@section Returning to the Previous node
-
-This node is called @samp{Help-P}. The @samp{Previous} node, as you see,
-is @samp{Help}, which is the one you just came from using the @kbd{n}
-command. Another @kbd{n} command now would take you to the next
-node, @samp{Help-^L}.
-
->> But do not do that yet. First, try the @kbd{p} command, which takes
- you to the @samp{Previous} node. When you get there, you can do an
- @kbd{n} again to return here.
-
- This all probably seems insultingly simple so far, but @emph{do not} be
-led into skimming. Things will get more complicated soon. Also,
-do not try a new command until you are told it is time to. Otherwise,
-you may make Info skip past an important warning that was coming up.
-
->> Now do an @kbd{n} to get to the node @samp{Help-^L} and learn more.
-
-@node Help-^L, Help-M, Help-P, Getting Started
-@comment node-name, next, previous, up
-@section The Space, Rubout, B and ^L commands.
-
- This node's header tells you that you are now at node @samp{Help-^L}, and
-that @kbd{p} would get you back to @samp{Help-P}. The node's title is
-underlined; it says what the node is about (most nodes have titles).
-
- This is a big node and it does not all fit on your display screen.
-You can tell that there is more that is not visible because you
-can see the string @samp{--Top-----} rather than @samp{--All----} near
-the bottom right corner of the screen.
-
- The @key{SPC}, @key{DEL} and @kbd{b} commands exist to allow you to ``move
-around'' in a node that does not all fit on the screen at once.
-@key{SPC} moves forward, to show what was below the bottom of the screen.
-@key{DEL} moves backward, to show what was above the top of the screen
-(there is not anything above the top until you have typed some spaces).
-
->> Now try typing a @key{SPC} (afterward, type a @key{DEL} to return here).
-
- When you type the @key{SPC}, the two lines that were at the bottom
-of the screen appear at the top, followed by more lines. @key{DEL}
-takes the two lines from the top and moves them to the bottom,
-@emph{usually}, but if there are not a full screen's worth of lines above
-them they may not make it all the way to the bottom.
-
- If you type a @key{SPC} when there is no more to see, it rings the
-bell and otherwise does nothing. The same goes for a @key{DEL} when
-the header of the node is visible.
-
- If your screen is ever garbaged, you can tell Info to print it out
-again by typing @kbd{C-l} (@kbd{Control-L}, that is---hold down ``Control'' and
-type an @key{L} or @kbd{l}).
-
->> Type @kbd{C-l} now.
-
- To move back to the beginning of the node you are on, you can type
-a lot of @key{DEL}s. You can also type simply @kbd{b} for beginning.
-
->> Try that now. (I have put in enough verbiage to make sure you are
- not on the first screenful now). Then come back, typing @key{SPC}
- several times.
-
- You have just learned a considerable number of commands. If you
-want to use one but have trouble remembering which, you should type
-a @key{?} which prints out a brief list of commands. When you are
-finished looking at the list, make it go away by typing a @key{SPC}.
-
->> Type a @key{?} now. After it finishes, type a @key{SPC}.
-
- (If you are using the standalone Info reader, type `l' to return here.)
-
- From now on, you will encounter large nodes without warning, and
-will be expected to know how to use @key{SPC} and @key{DEL} to move
-around in them without being told. Since not all terminals have
-the same size screen, it would be impossible to warn you anyway.
-
->> Now type @kbd{n} to see the description of the @kbd{m} command.
-
-@node Help-M, Help-Adv, Help-^L, Getting Started
-@comment node-name, next, previous, up
-@section Menus
-
-Menus and the @kbd{m} command
-
- With only the @kbd{n} and @kbd{p} commands for moving between nodes, nodes
-are restricted to a linear sequence. Menus allow a branching
-structure. A menu is a list of other nodes you can move to. It is
-actually just part of the text of the node formatted specially so that
-Info can interpret it. The beginning of a menu is always identified
-by a line which starts with @samp{* Menu:}. A node contains a menu if and
-only if it has a line in it which starts that way. The only menu you
-can use at any moment is the one in the node you are in. To use a
-menu in any other node, you must move to that node first.
-
- After the start of the menu, each line that starts with a @samp{*}
-identifies one subtopic. The line usually contains a brief name
-for the subtopic (followed by a @samp{:}), the name of the node that talks
-about that subtopic, and optionally some further description of the
-subtopic. Lines in the menu that do not start with a @samp{*} have no
-special meaning---they are only for the human reader's benefit and do
-not define additional subtopics. Here is an example:
-
-@example
-* Foo: FOO's Node This tells about FOO
-@end example
-
-The subtopic name is Foo, and the node describing it is @samp{FOO's Node}.
-The rest of the line is just for the reader's Information.
-[[ But this line is not a real menu item, simply because there is
-no line above it which starts with @samp{* Menu:}.]]
-
- When you use a menu to go to another node (in a way that will be
-described soon), what you specify is the subtopic name, the first
-thing in the menu line. Info uses it to find the menu line, extracts
-the node name from it, and goes to that node. The reason that there
-is both a subtopic name and a node name is that the node name must be
-meaningful to the computer and may therefore have to be ugly looking.
-The subtopic name can be chosen just to be convenient for the user to
-specify. Often the node name is convenient for the user to specify
-and so both it and the subtopic name are the same. There is an
-abbreviation for this:
-
-@example
-* Foo:: This tells about FOO
-@end example
-
-@noindent
-This means that the subtopic name and node name are the same; they are
-both @samp{Foo}.
-
->> Now use @key{SPC}s to find the menu in this node, then come back to
- the front with a @kbd{b}. As you see, a menu is actually visible in
- its node. If you cannot find a menu in a node by looking at it,
- then the node does not have a menu and the @kbd{m} command is not
- available.
-
- The command to go to one of the subnodes is @kbd{m}---but @emph{do not do it
-yet!} Before you use @kbd{m}, you must understand the difference between
-commands and arguments. So far, you have learned several commands
-that do not need arguments. When you type one, Info processes it and
-is instantly ready for another command. The @kbd{m} command is different:
-it is incomplete without the @dfn{name of the subtopic}. Once you have
-typed @kbd{m}, Info tries to read the subtopic name.
-
- Now look for the line containing many dashes near the bottom of the
-screen. There is one more line beneath that one, but usually it is
-blank If it is empty, Info is ready for a command, such as @kbd{n} or @kbd{b}
-or @key{SPC} or @kbd{m}. If that line contains text ending in a colon, it
-mean Info is trying to read the @dfn{argument} to a command. At such
-times, commands do not work, because Info tries to use them as the
-argument. You must either type the argument and finish the command
-you started, or type @kbd{Control-g} to cancel the command. When you have
-done one of those things, the line becomes blank again.
-
- The command to go to a subnode via a menu is @kbd{m}. After you type
-the @kbd{m}, the line at the bottom of the screen says @samp{Menu item: }.
-You must then type the name of the subtopic you want, and end it with
-a @key{RET}.
-
- You can abbreviate the subtopic name. If the abbreviation is not
-unique, the first matching subtopic is chosen. Some menus put
-the shortest possible abbreviation for each subtopic name in capital
-letters, so you can see how much you need to type. It does not
-matter whether you use upper case or lower case when you type the
-subtopic. You should not put any spaces at the end, or inside of the
-item name, except for one space where a space appears in the item in
-the menu.
-
- Here is a menu to give you a chance to practice.
-
-* Menu: The menu starts here.
-
-This menu givs you three ways of going to one place, Help-FOO.
-
-* Foo: Help-FOO. A node you can visit for fun.@*
-* Bar: Help-FOO. Strange! two ways to get to the same place.@*
-* Help-FOO:: And yet another!@*
-
-
->> Now type just an @kbd{m} and see what happens:
-
- Now you are ``inside'' an @kbd{m} command. Commands cannot be used
-now; the next thing you will type must be the name of a subtopic.
-
- You can change your mind about doing the @kbd{m} by typing Control-g.
-
->> Try that now; notice the bottom line clear.
-
->> Then type another @kbd{m}.
-
->> Now type @samp{BAR} item name. Do not type @key{RET} yet.
-
- While you are typing the item name, you can use the @key{DEL}
-character to cancel one character at a time if you make a mistake.
-
->> Type one to cancel the @samp{R}. You could type another @samp{R} to
- replace it. You do not have to, since @samp{BA} is a valid abbreviation.
-
->> Now you are ready to go. Type a @key{RET}.
-
- After visiting Help-FOO, you should return here.
-
->> Type @kbd{n} to see more commands.
-
-@c If a menu appears at the end of this node, remove it.
-@c It is an accident of the menu updating command.
-
-Here is another way to get to Help-FOO, a menu. You can ignore this
-if you want, or else try it (but then please come back to here).
-
-@menu
-* Help-FOO::
-@end menu
-
-@node Help-FOO, , , Help-M
-@comment node-name, next, previous, up
-@subsection The @kbd{u} command
-
- Congratulations! This is the node @samp{Help-FOO}. Unlike the other
-nodes you have seen, this one has an @samp{Up}: @samp{Help-M}, the node you
-just came from via the @kbd{m} command. This is the usual
-convention---the nodes you reach from a menu have @samp{Up} nodes that lead
-back to the menu. Menus move Down in the tree, and @samp{Up} moves Up.
-@samp{Previous}, on the other hand, is usually used to ``stay on the same
-level but go backwards''
-
- You can go back to the node @samp{Help-M} by typing the command
-@kbd{u} for ``Up''. That puts you at the @emph{front} of the
-node---to get back to where you were reading you have to type
-some @key{SPC}s.
-
->> Now type @kbd{u} to move back up to @samp{Help-M}.
-
-@node Help-Adv, Help-Q, Help-M, Getting Started
-@comment node-name, next, previous, up
-@section Some advanced Info commands
-
- The course is almost over, so please stick with it to the end.
-
- If you have been moving around to different nodes and wish to
-retrace your steps, the @kbd{l} command (@kbd{l} for @dfn{last}) will
-do that, one node at a time. If you have been following directions,
-an @kbd{l} command now will get you back to @samp{Help-M}. Another
-@kbd{l} command would undo the @kbd{u} and get you back to
-@samp{Help-FOO}. Another @kbd{l} would undo the @kbd{m} and get you
-back to @samp{Help-M}.
-
->> Try typing three @kbd{l}'s, pausing in between to see what each
- @kbd{l} does.
-
-Then follow directions again and you will end up back here.
-
- Note the difference between @kbd{l} and @kbd{p}: @kbd{l} moves to
-where @emph{you} last were, whereas @kbd{p} always moves to the node
-which the header says is the @samp{Previous} node (from this node, to
-@samp{Help-M}).
-
- The @samp{d} command gets you instantly to the Directory node.
-This node, which is the first one you saw when you entered Info,
-has a menu which leads (directly, or indirectly through other menus),
-to all the nodes that exist.
-
->> Try doing a @samp{d}, then do an @kbd{l} to return here (yes,
- @emph{do} return).
-
- Sometimes, in Info documentation, you will see a cross reference.
-Cross references look like this: @xref{Help-Cross, Cross}. That is a
-real, live cross reference which is named @samp{Cross} and points at
-the node named @samp{Help-Cross}.
-
- If you wish to follow a cross reference, you must use the @samp{f}
-command. The @samp{f} must be followed by the cross reference name
-(in this case, @samp{Cross}). You can use @key{DEL} to edit the name,
-and if you change your mind about following any reference you can use
-@kbd{Control-g} to cancel the command.
-
- Completion is available in the @samp{f} command; you can complete among
-all the cross reference names in the current node.
-
->> Type @samp{f}, followed by @samp{Cross}, and a @key{RET}.
-
- To get a list of all the cross references in the current node, you can
-type @kbd{?} after an @samp{f}. The @samp{f} continues to await a
-cross reference name even after printing the list, so if you do not
-actually want to follow a reference you should type a @kbd{Control-g}
-to cancel the @samp{f}.
-
->> Type "f?" to get a list of the footnotes in this node. Then type a
- @kbd{Control-g} and see how the @samp{f} gives up.
-
->> Now type @kbd{n} to see the last node of the course.
-
-@c If a menu appears at the end of this node, remove it.
-@c It is an accident of the menu updating command.
-
-@node Help-Cross, , , Help-Adv
-@comment node-name, next, previous, up
-@unnumberedsubsec The node reached by the cross reference in Info
-
- This is the node reached by the cross reference named @samp{Cross}.
-
- While this node is specifically intended to be reached by a cross
-reference, most cross references lead to nodes that ``belong''
-someplace else far away in the structure of Info. So you cannot expect
-the footnote to have a @samp{Next}, @samp{Previous} or @samp{Up} pointing back to
-where you came from. In general, the @kbd{l} (el) command is the only
-way to get back there.
-
->> Type @kbd{l} to return to the node where the cross reference was.
-
-@node Help-Q, , Help-Adv, Getting Started
-@comment node-name, next, previous, up
-@section Quitting Info
-
- To get out of Info, back to what you were doing before, type @kbd{q}
-for @dfn{Quit}.
-
- This is the end of the course on using Info. There are some other
-commands that are not essential or are meant for experienced users;
-they are useful, and you can find them by looking in the directory for
-documentation on Info. Finding them will be a good exercise in using
-Info in the usual manner.
-
->> Type @samp{d} to go to the Info directory node; then type
- @samp{mInfo} and @key{RET}, to get to the node about Info
- and see what other help is available.
-
-@node Advanced Info, Create an Info File, Getting Started, Top
-@comment node-name, next, previous, up
-@chapter Info for Experts
-
-This chapter describes various advanced Info commands, and how to write
-an Info as distinct from a Texinfo file. (However, in most cases, writing a
-Texinfo file is better, since you can use it @emph{both} to generate an
-Info file and to make a printed manual. @xref{Top,, Overview of
-Texinfo, texinfo, Texinfo: The GNU Documentation Format}.)
-
-@menu
-* Expert:: Advanced Info commands: g, s, e, and 1 - 5.
-* Add:: Describes how to add new nodes to the hierarchy.
- Also tells what nodes look like.
-* Menus:: How to add to or create menus in Info nodes.
-* Cross-refs:: How to add cross-references to Info nodes.
-* Tags:: How to make tag tables for Info files.
-* Checking:: Checking an Info File
-@end menu
-
-@node Expert, Add, , Advanced Info
-@comment node-name, next, previous, up
-@section Advanced Info Commands
-
-@kbd{g}, @kbd{s}, @kbd{1}, -- @kbd{5}, and @kbd{e}
-
-If you know a node's name, you can go there by typing @kbd{g}, the
-name, and @key{RET}. Thus, @kbd{gTop@key{RET}} would go to the node
-called @samp{Top} in this file (its directory node).
-@kbd{gExpert@key{RET}} would come back here.
-
-Unlike @kbd{m}, @kbd{g} does not allow the use of abbreviations.
-
-To go to a node in another file, you can include the filename in the
-node name by putting it at the front, in parentheses. Thus,
-@kbd{g(dir)Top@key{RET}} would go to the Info Directory node, which is
-node @samp{Top} in the file @file{dir}.
-
-The node name @samp{*} specifies the whole file. So you can look at
-all of the current file by typing @kbd{g*@key{RET}} or all of any
-other file with @kbd{g(FILENAME)@key{RET}}.
-
-The @kbd{s} command allows you to search a whole file for a string.
-It switches to the next node if and when that is necessary. You
-type @kbd{s} followed by the string to search for, terminated by
-@key{RET}. To search for the same string again, just @kbd{s} followed
-by @key{RET} will do. The file's nodes are scanned in the order
-they are in in the file, which has no necessary relationship to the
-order that they may be in in the tree structure of menus and @samp{next} pointers.
-But normally the two orders are not very different. In any case,
-you can always do a @kbd{b} to find out what node you have reached, if
-the header is not visible (this can happen, because @kbd{s} puts your
-cursor at the occurrence of the string, not at the beginning of the
-node).
-
-If you grudge the system each character of type-in it requires, you
-might like to use the commands @kbd{1}, @kbd{2}, @kbd{3}, @kbd{4}, and
-@kbd{5}. They are short for the @kbd{m} command together with an
-argument. "1", "2", "3", "4", and "5". @kbd{1} goes through the
-first item in the current node's menu; @kbd{2} goes through the second
-item, etc. Note that numbers larger than 5 are not allowed. If the
-item you want is that far down, you are better off using an
-abbreviation for its name than counting.
-
-The Info command @kbd{e} changes from Info mode to an ordinary
-Emacs editing mode, so that you can edit the text of the current node.
-Type @kbd{C-c C-c} to switch back to Info. The @kbd{e} command is allowed
-only if the variable @code{Info-enable-edit} is non-@code{nil}.
-
-@node Add, Menus, Expert, Advanced Info
-@comment node-name, next, previous, up
-@section Adding a new node to Info
-
-To add a new topic to the list in the directory, you must:
-
-@enumerate
-@item
-Create a node, in some file, to document that topic.
-
-@item
-Put that topic in the menu in the directory. @xref{Menus, Menu}.
-@end enumerate
-
- The new node can live in an existing documentation file, or in a new
-one. It must have a @key{^_} character before it (invisible to the
-user; this node has one but you cannot see it), and it ends with either
-a @key{^_}, a @key{^L}, or the end of file. Note: If you put in a
-@key{^L} to end a new node, be sure that there is a @key{^_} after it
-to start the next one, since @key{^L} cannot @emph{start} a node.
-Also, a nicer way to make a node boundary be a page boundary as well
-is to put a @key{^L} @emph{right after} the @key{^_}.
-
- The @key{^_} starting a node must be followed by a newline or a
-@key{^L} newline, after which comes the node's header line. The
-header line must give the node's name (by which Info finds it),
-and state the names of the @samp{Next}, @samp{Previous}, and @samp{Up} nodes (if
-there are any). As you can see, this node's @samp{Up} node is the node
-@samp{Top}, which points at all the documentation for Info. The @samp{Next}
-node is @samp{Menus}.
-
- The keywords @dfn{Node}, @dfn{Previous}, @dfn{Up} and @dfn{Next},
-may appear in any order, anywhere in the header line, but the
-recommended order is the one in this sentence. Each keyword must be
-followed by a colon, spaces and tabs, and then the appropriate name.
-The name may be terminated with a tab, a comma, or a newline. A space
-does not end it; node names may contain spaces. The case of letters
-in the names is insignificant.
-
- A node name has two forms. A node in the current file is named by
-what appears after the @samp{Node: } in that node's first line. For
-example, this node's name is @samp{Add}. A node in another file is
-named by @samp{(@var{filename})@var{node-within-file}}, as in
-@samp{(info)Add} for this node. If the file name is relative, it is
-taken starting from the standard Info file directory of your site.
-The name @samp{(@var{filename})Top} can be abbreviated to just
-@samp{(@var{filename})}. By convention, the name @samp{Top} is used for
-the ``highest'' node in any single file---the node whose @samp{Up} points
-out of the file. The Directory node is @file{(dir)}. The @samp{Top} node
-of a document file listed in the Directory should have an @samp{Up:
-(dir)} in it.
-
- The node name @kbd{*} is special: it refers to the entire file.
-Thus, @kbd{g*} shows you the whole current file. The use of the
-node @kbd{*} is to make it possible to make old-fashioned,
-unstructured files into nodes of the tree.
-
- The @samp{Node:} name, in which a node states its own name, must not
-contain a filename, since Info when searching for a node does not
-expect one to be there. The @samp{Next}, @samp{Previous} and @samp{Up} names may
-contain them. In this node, since the @samp{Up} node is in the same file,
-it was not necessary to use one.
-
- Note that the nodes in this file have a file name in the header
-line. The file names are ignored by Info, but they serve as comments
-to help identify the node for the user.
-
-@node Menus, Cross-refs, Add, Advanced Info
-@comment node-name, next, previous, up
-@section How to Create Menus
-
- Any node in the Info hierarchy may have a @dfn{menu}---a list of subnodes.
-The @kbd{m} command searches the current node's menu for the topic which it
-reads from the terminal.
-
- A menu begins with a line starting with @samp{* Menu:}. The rest of the
-line is a comment. After the starting line, every line that begins
-with a @samp{* } lists a single topic. The name of the topic--the
-argument that the user must give to the @kbd{m} command to select this
-topic---comes right after the star and space, and is followed by a
-colon, spaces and tabs, and the name of the node which discusses that
-topic. The node name, like node names following @samp{Next}, @samp{Previous}
-and @samp{Up}, may be terminated with a tab, comma, or newline; it may also
-be terminated with a period.
-
- If the node name and topic name are the same, than rather than
-giving the name twice, the abbreviation @samp{* NAME::} may be used
-(and should be used, whenever possible, as it reduces the visual
-clutter in the menu).
-
- It is considerate to choose the topic names so that they differ
-from each other very near the beginning---this allows the user to type
-short abbreviations. In a long menu, it is a good idea to capitalize
-the beginning of each item name which is the minimum acceptable
-abbreviation for it (a long menu is more than 5 or so entries).
-
- The nodes listed in a node's menu are called its ``subnodes'', and
-it is their ``superior''. They should each have an @samp{Up:} pointing at
-the superior. It is often useful to arrange all or most of the
-subnodes in a sequence of @samp{Next} and @samp{Previous} pointers so that someone who
-wants to see them all need not keep revisiting the Menu.
-
- The Info Directory is simply the menu of the node @samp{(dir)Top}---that
-is, node @samp{Top} in file @file{.../info/dir}. You can put new entries
-in that menu just like any other menu. The Info Directory is @emph{not} the
-same as the file directory called @file{info}. It happens that many of
-Info's files live on that file directory, but they do not have to; and
-files on that directory are not automatically listed in the Info
-Directory node.
-
- Also, although the Info node graph is claimed to be a ``hierarchy'',
-in fact it can be @emph{any} directed graph. Shared structures and
-pointer cycles are perfectly possible, and can be used if they are
-appropriate to the meaning to be expressed. There is no need for all
-the nodes in a file to form a connected structure. In fact, this file
-has two connected components. You are in one of them, which is under
-the node @samp{Top}; the other contains the node @samp{Help} which the
-@kbd{h} command goes to. In fact, since there is no garbage
-collector, nothing terrible happens if a substructure is not pointed
-to, but such a substructure is rather useless since nobody can
-ever find out that it exists.
-
-@node Cross-refs, Tags, Menus, Advanced Info
-@comment node-name, next, previous, up
-@section Creating Cross References
-
- A cross reference can be placed anywhere in the text, unlike a menu
-item which must go at the front of a line. A cross reference looks
-like a menu item except that it has @samp{*note} instead of @kbd{*}.
-It @emph{cannot} be terminated by a @samp{)}, because @samp{)}'s are
-so often part of node names. If you wish to enclose a cross reference
-in parentheses, terminate it with a period first. Here are two
-examples of cross references pointers:
-
-@example
-*Note details: commands. (See *note 3: Full Proof.)
-@end example
-
-They are just examples. The places they ``lead to'' do not really exist!
-
-@node Tags, Checking, Cross-refs, Advanced Info
-@comment node-name, next, previous, up
-@section Tag Tables for Info Files
-
- You can speed up the access to nodes of a large Info file by giving
-it a tag table. Unlike the tag table for a program, the tag table for
-an Info file lives inside the file itself and is used
-automatically whenever Info reads in the file.
-
- To make a tag table, go to a node in the file using Emacs Info mode and type
-@kbd{M-x Info-tagify}. Then you must use @kbd{C-x C-s} to save the
-file.
-
- Once the Info file has a tag table, you must make certain it is up
-to date. If, as a result of deletion of text, any node moves back
-more than a thousand characters in the file from the position
-recorded in the tag table, Info will no longer be able to find that
-node. To update the tag table, use the @code{Info-tagify} command again.
-
- An Info file tag table appears at the end of the file and looks like
-this:
-
-@example
-^_
-Tag Table:
-File: info, Node: Cross-refs^?21419
-File: info, Node: Tags^?22145
-^_
-End Tag Table
-@end example
-
-@noindent
-Note that it contains one line per node, and this line contains
-the beginning of the node's header (ending just after the node name),
-a @key{DEL} character, and the character position in the file of the
-beginning of the node.
-
-@node Checking, , Tags, Advanced Info
-@comment node-name, next, previous, up
-@section Checking an Info File
-
- When creating an Info file, it is easy to forget the name of a node
-when you are making a pointer to it from another node. If you put in
-the wrong name for a node, this is not detected until someone
-tries to go through the pointer using Info. Verification of the Info
-file is an automatic process which checks all pointers to nodes and
-reports any pointers which are invalid. Every @samp{Next}, @samp{Previous}, and
-@samp{Up} is checked, as is every menu item and every cross reference. In
-addition, any @samp{Next} which does not have a @samp{Previous} pointing back is
-reported. Only pointers within the file are checked, because checking
-pointers to other files would be terribly slow. But those are usually
-few.
-
- To check an Info file, do @kbd{M-x Info-validate} while looking at
-any node of the file with Emacs Info mode.
-
-@node Create an Info File, , Advanced Info, Top
-@comment node-name, next, previous, up
-@chapter Creating an Info File from a Makeinfo file
-
-@code{makeinfo} is a utility that converts a Texinfo file into an Info
-file; @code{texinfo-format-region} and @code{texinfo-format-buffer} are
-GNU Emacs functions that do the same.
-
-@xref{Create an Info File, , Creating an Info File, texinfo, the Texinfo
-Manual}, to learn how to create an Info file from a Texinfo file.
-
-@xref{Top,, Overview of Texinfo, texinfo, Texinfo: The GNU Documentation
-Format}, to learn how to write a Texinfo file.
-
-@bye
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi-files/makeinfo.texi b/gnu/usr.bin/texinfo/info-files/texi-files/makeinfo.texi
deleted file mode 100644
index 21ee2d3..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi-files/makeinfo.texi
+++ /dev/null
@@ -1,285 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header
-@setfilename makeinfo.info
-@set VERSION 1.51
-@paragraphindent none
-@comment %**start of header
-
-@ifinfo
-This file is an extract from the @cite{Texinfo} manual.@*
-It documents @code{makeinfo}, a program that converts Texinfo
-files into Info files.
-
-Copyright (C) 1992, 1993 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.
-
-@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 Free Software Foundation.
-@end ifinfo
-
-@titlepage
-@title Makeinfo
-@author Brian J. Fox and Robert J. Chassell
-
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1992, 1993 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 and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-@end titlepage
-
-@ifinfo
-@node Top, What is makeinfo, (dir), (dir)
-@unnumbered @code{makeinfo}
-
-This file documents the use of the @code{makeinfo} program, versions
-@value{VERSION} and later. It is an extract from the @cite{Texinfo} manual.
-@end ifinfo
-
-@menu
-* What is makeinfo::
-@end menu
-
-@node What is makeinfo, , Top, Top
-@chapter What is @code{makeinfo}?
-
-@iftex
-This file documents the use of the @code{makeinfo} program, versions
-@value{VERSION} and later. It is an extract from the @cite{Texinfo} manual.
-@end iftex
-
-@code{makeinfo} is a program for converting @dfn{Texinfo} files into @dfn{Info}
-files. Texinfo is a documentation system that uses a single source file to
-produce both on-line information and printed output.
-
-You can read the on-line information using Info; type @code{info} to
-learn about Info.
-@ifinfo
-@xref{Top, Texinfo, Overview of Texinfo, texinfo.texi, Texinfo},
-@end ifinfo
-@iftex
-See the @cite{Texinfo} manual,
-@end iftex
-to learn about the Texinfo documentation system.
-
-@menu
-* Formatting Control::
-* Options::
-* Pointer Validation::
-@end menu
-
-@node Formatting Control, Options, , What is makeinfo
-@section Controlling Paragraph Formats
-
-In general, @code{makeinfo} @dfn{fills} the paragraphs that it outputs
-to an Info file. Filling is the process of breaking and connecting
-lines so that lines are the same length as or shorter than the number
-specified as the fill column. Lines are broken between words. With
-@code{makeinfo}, you can control:
-
-@itemize @bullet
-@item
-The width of each paragraph (the @dfn{fill-column}).
-@item
-The amount of indentation that the first line of
-each paragraph receives (the @dfn{paragraph-indentation}).
-@end itemize
-
-@node Options, Pointer Validation, Formatting Control, What is makeinfo
-@section Command Line Options
-
-The following command line options are available for @code{makeinfo}.
-
-@need 100
-@table @code
-@item -D @var{var}
-Cause @var{var} to be defined. This is equivalent to
-@code{@@set @var{var}} in the Texinfo file.
-
-@need 150
-@item --error-limit @var{limit}
-Set the maximum number of errors that @code{makeinfo} will report
-before exiting (on the assumption that continuing would be useless).
-The default number of errors that can be reported before
-@code{makeinfo} gives up is 100.@refill
-
-@need 150
-@item --fill-column @var{width}
-Specify the maximum number of columns in a line; this is the right-hand
-edge of a line. Paragraphs that are filled will be filled to this
-width. The default value for @code{fill-column} is 72.
-@refill
-
-@item --footnote-style @var{style}
-Set the footnote style to @var{style}, either @samp{end} for the end
-node style or @samp{separate} for the separate node style. The value
-set by this option overrides the value set in a Texinfo file by an
-@code{@@footnotestyle} command. When the footnote style is
-@samp{separate}, @code{makeinfo} makes a new node containing the
-footnotes found in the current node. When the footnote style is
-@samp{end}, @code{makeinfo} places the footnote references at the end
-of the current node.@refill
-
-@need 150
-@item -I @var{dir}
-Add @code{dir} to the directory search list for finding files that are
-included using the @code{@@include} command. By default,
-@code{makeinfo} searches only the current directory.
-
-@need 150
-@item --no-headers
-Do not include menus or node lines in the output. This results in an
-@sc{ascii} file that you cannot read in Info since it does not contain
-the requisite nodes or menus; but you can print such a file in a
-single, typewriter-like font and produce acceptable output.
-
-@need 150
-@item --no-split
-Suppress the splitting stage of @code{makeinfo}. Normally, large
-output files (where the size is greater than 70k bytes) are split into
-smaller subfiles, each one approximately 50k bytes. If you specify
-@samp{--no-split}, @code{makeinfo} will not split up the output
-file.@refill
-
-@need 100
-@item --no-pointer-validate
-@item --no-validate
-Suppress the pointer-validation phase of @code{makeinfo}. Normally,
-after a Texinfo file is processed, some consistency checks are made to
-ensure that cross references can be resolved, etc.
-@xref{Pointer Validation}.@refill
-
-@need 150
-@item --no-warn
-Suppress the output of warning messages. This does @emph{not}
-suppress the output of error messages, only warnings. You might
-want this if the file you are creating has examples of Texinfo cross
-references within it, and the nodes that are referenced do not actually
-exist.@refill
-
-@item --no-number-footnotes
-Supress automatic footnote numbering. By default, @code{makeinfo}
-numbers each footnote sequentially in a single node, resetting the
-current footnote number to 1 at the start of each node.
-
-@need 150
-@item --output @var{file}
-@itemx -o @var{file}
-Specify that the output should be directed to @var{file} and not to the
-file name specified in the @code{@@setfilename} command found in the Texinfo
-source. @var{file} can be the special token @samp{-}, which specifies
-standard output.
-
-@need 150
-@item --paragraph-indent @var{indent}
-Set the paragraph indentation style to @var{indent}. The value set by
-this option overrides the value set in a Texinfo file by an
-@code{@@paragraphindent} command. The value of @var{indent} is
-interpreted as follows:@refill
-
-@itemize @bullet
-@item
-If the value of @var{indent} is @samp{asis}, do not change the
-existing indentation at the starts of paragraphs.@refill
-
-@item
-If the value of @var{indent} is zero, delete any existing
-indentation.@refill
-
-@item
-If the value of @var{indent} is greater than zero, indent each
-paragraph by that number of spaces.@refill
-@end itemize
-
-@need 100
-@item --reference-limit @var{limit}
-Set the value of the number of references to a node that
-@code{makeinfo} will make without reporting a warning. If a node has more
-than this number of references in it, @code{makeinfo} will make the
-references but also report a warning.@refill
-
-@need 150
-@item -U @var{var}
-Cause @var{var} to be undefined. This is equivalent to
-@code{@@clear @var{var}} in the Texinfo file.
-
-@need 100
-@item --verbose
-Cause @code{makeinfo} to display messages saying what it is doing.
-Normally, @code{makeinfo} only outputs messages if there are errors or
-warnings.@refill
-
-@need 100
-@item --version
-Report the version number of this copy of @code{makeinfo}.@refill
-@end table
-
-@node Pointer Validation, , Options, What is makeinfo
-@section Pointer Validation
-@cindex Pointer validation with @code{makeinfo}
-@cindex Validation of pointers
-
-If you do not suppress pointer-validation (by using the
-@samp{--no-pointer-validation} option), @code{makeinfo}
-will check the validity of the final Info file. Mostly,
-this means ensuring that nodes you have referenced
-really exist. Here is a complete list of what is
-checked:@refill
-
-@enumerate
-@item
-If a `Next', `Previous', or `Up' node reference is a reference to a
-node in the current file and is not an external reference such as to
-@file{(dir)}, then the referenced node must exist.@refill
-
-@item
-In every node, if the `Previous' node is different from the `Up' node,
-then the `Previous' node must also be pointed to by a `Next' node.@refill
-
-@item
-Every node except the `Top' node must have an `Up' pointer.@refill
-
-@item
-The node referenced by an `Up' pointer must contain a reference to the
-current node in some manner other than through a `Next' reference.
-This includes menu entries and cross references.@refill
-
-@item
-If the `Next' reference of a node is not the same as the `Next' reference
-of the `Up' reference, then the node referenced by the `Next' pointer
-must have a `Previous' pointer that points back to the current node.
-This rule allows the last node in a section to point to the first node
-of the next chapter.@refill
-@end enumerate
-
-@bye
diff --git a/gnu/usr.bin/texinfo/info-files/texi-files/texi.texi b/gnu/usr.bin/texinfo/info-files/texi-files/texi.texi
deleted file mode 100644
index f77f662..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi-files/texi.texi
+++ /dev/null
@@ -1,15626 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header
-@setfilename texi.info
-@settitle Texinfo @value{edition}
-@syncodeindex vr fn
-@c footnotestyle separate
-@c paragraphindent 2
-@smallbook
-@comment %**end of header
-
-@ignore
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* Texinfo: (texi.info). The documentation format for the GNU Project.
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-@end ignore
-
-@c Set smallbook if printing in smallbook format so the example of the
-@c smallbook font is actually written using smallbook; in bigbook, a kludge
-@c is used for TeX output.
-@c set smallbook
-@clear smallbook
-
-@set edition 2.18
-@set update-date 26 March 1993
-@set update-month March 1993
-
-@c Experiment with smaller amounts of whitespace between chapters
-@c and sections.
-@tex
-\global\chapheadingskip = 15pt plus 4pt minus 2pt
-\global\secheadingskip = 12pt plus 3pt minus 2pt
-\global\subsecheadingskip = 9pt plus 2pt minus 2pt
-@end tex
-
-@c Experiment with smaller amounts of whitespace between paragraphs in
-@c the 8.5 by 11 inch format.
-@ifclear smallbook
-@tex
-\global\parskip 6pt plus 1pt
-@end tex
-@end ifclear
-
-@finalout
-
-@c Currently undocumented commands, 24 March 1993:
-@c See documentation in `texinfmt.el' file.
-@c
-@c raisesections (Two useful commands.)
-@c lowersections
-@c nwnode (Same as node, but no warnings; for `makeinfo'.)
-@c math (Unsatisfactory TeX definition; no processing for Info.)
-@c definfoenclose (For ifinfo text only; not supported by `makeinfo';
-@c each instance requires a corresponding TeX definition.)
-
-@ifinfo
-This file documents Texinfo, a documentation system that uses a single
-source file to produce both on-line information and a printed manual.
-
-Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
-
-This is the second edition of the Texinfo documentation,@*
-and is consistent with version 2 of @file{texinfo.tex}.
-
-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.
-
-@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 Free Software Foundation.
-@end ifinfo
-
-@setchapternewpage odd
-@titlepage
-@c use the new format for titles
-@title Texinfo
-@subtitle The GNU Documentation Format
-@subtitle Edition @value{edition}, for Texinfo Version Two
-@subtitle @value{update-month}
-
-@author by Robert J. Chassell and Richard M. Stallman
-
-@comment Include the Distribution inside the titlepage so
-@c that headings are turned off.
-
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1988, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
-
-@sp 2
-This is the second edition of the Texinfo documentation,@*
-and is consistent with version 2 of @file{texinfo.tex}.
-@sp 2
-
-Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA @*
-Printed copies are available for $15 each.@*
-ISBN-1882114-12-4
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-@sp 2
-Cover art by Etienne Suvasa.
-@end titlepage
-
-@ifinfo
-@node Top, Copying, (dir), (dir)
-@top Texinfo
-
-Texinfo is a documentation system that uses a single source file to
-produce both on-line information and printed output.@refill
-
-The first part of this master menu lists the major nodes in this Info
-document, including the @@-command and concept indices. The rest of
-the menu lists all the lower level nodes in the document.@refill
-
-This is Edition @value{edition} of the Texinfo documentation,
-@w{@value{update-date},} for Texinfo Version 2.
-@end ifinfo
-
-@c Here is a spare copy of the chapter menu entry descriptions,
-@c in case they are accidently deleted
-@ignore
-Your rights.
-Texinfo in brief.
-How to use Texinfo mode.
-What is at the beginning of a Texinfo file?
-What is at the end of a Texinfo file?
-How to create chapters, sections, subsections,
- appendices, and other parts.
-How to provide structure for a document.
-How to write nodes.
-How to write menus.
-How to write cross references.
-How to mark words and phrases as code,
- keyboard input, meta-syntactic
- variables, and the like.
-How to write quotations, examples, etc.
-How to write lists and tables.
-How to create indices.
-How to insert @@-signs, braces, etc.
-How to indicate results of evaluation,
- expansion of macros, errors, etc.
-How to force and prevent line and page breaks.
-How to describe functions and the like in a uniform manner.
-How to write footnotes.
-How to specify text for either @TeX{} or Info.
-How to print hardcopy.
-How to create an Info file.
-How to install an Info file
-A list of all the Texinfo @@-commands.
-Hints on how to write a Texinfo document.
-A sample Texinfo file to look at.
-Tell readers they have the right to copy
- and distribute.
-How to incorporate other Texinfo files.
-How to write page headings and footings.
-How to find formatting mistakes.
-All about paragraph refilling.
-A description of @@-Command syntax.
-Texinfo second edition features.
-A menu containing commands and variables.
-A menu covering many topics.
-@end ignore
-
-@menu
-* Copying:: Your rights.
-* Overview:: Texinfo in brief.
-* Texinfo Mode:: How to use Texinfo mode.
-* Beginning a File:: What is at the beginning of a Texinfo file?
-* Ending a File:: What is at the end of a Texinfo file?
-* Structuring:: How to create chapters, sections, subsections,
- appendices, and other parts.
-* Nodes:: How to write nodes.
-* Menus:: How to write menus.
-* Cross References:: How to write cross references.
-* Marking Text:: How to mark words and phrases as code,
- keyboard input, meta-syntactic
- variables, and the like.
-* Quotations and Examples:: How to write quotations, examples, etc.
-* Lists and Tables:: How to write lists and tables.
-* Indices:: How to create indices.
-* Insertions:: How to insert @@-signs, braces, etc.
-* Glyphs:: How to indicate results of evaluation,
- expansion of macros, errors, etc.
-* Breaks:: How to force and prevent line and page breaks.
-* Definition Commands:: How to describe functions and the like
- in a uniform manner.
-* Footnotes:: How to write footnotes.
-* Conditionals:: How to specify text for either @TeX{} or Info.
-* Format/Print Hardcopy:: How to convert a Texinfo file to a file
- for printing and how to print that file.
-* Create an Info File:: Convert a Texinfo file into an Info file.
-* Install an Info File:: Make an Info file accessible to users.
-* Command List:: All the Texinfo @@-commands.
-* Tips:: Hints on how to write a Texinfo document.
-* Sample Texinfo File:: A sample Texinfo file to look at.
-* Sample Permissions:: Tell readers they have the right to copy
- and distribute.
-* Include Files:: How to incorporate other Texinfo files.
-* Headings:: How to write page headings and footings.
-* Catching Mistakes:: How to find formatting mistakes.
-* Refilling Paragraphs:: All about paragraph refilling.
-* Command Syntax:: A description of @@-Command syntax.
-* Obtaining TeX:: How to Obtain @TeX{}.
-* New Features:: Texinfo second edition features.
-* Command and Variable Index:: A menu containing commands and variables.
-* Concept Index:: A menu covering many topics.
-
- --- The Detailed Node Listing ---
-
-Overview of Texinfo
-
-* Using Texinfo:: Create a conventional printed book
- or an Info file.
-* Info Files:: What is an Info file?
-* Printed Books:: Characteristics of a printed book or manual.
-* Formatting Commands:: @@-commands are used for formatting.
-* Conventions:: General rules for writing a Texinfo file.
-* Comments:: How to write comments and mark regions that
- the formatting commands will ignore.
-* Minimum:: What a Texinfo file must have.
-* Six Parts:: Usually, a Texinfo file has six parts.
-* Short Sample:: A short sample Texinfo file.
-* Acknowledgements::
-
-Using Texinfo Mode
-
-* Texinfo Mode Overview:: How Texinfo mode can help you.
-* Emacs Editing:: Texinfo mode adds to GNU Emacs' general
- purpose editing features.
-* Inserting:: How to insert frequently used @@-commands.
-* Showing the Structure:: How to show the structure of a file.
-* Updating Nodes and Menus:: How to update or create new nodes and menus.
-* Info Formatting:: How to format for Info.
-* Printing:: How to format and print part or all of a file.
-* Texinfo Mode Summary:: Summary of all the Texinfo mode commands.
-
-Updating Nodes and Menus
-
-* Updating Commands:: Five major updating commands.
-* Updating Requirements:: How to structure a Texinfo file for
- using the updating command.
-* Other Updating Commands:: How to indent descriptions, insert
- missing nodes lines, and update
- nodes in sequence.
-
-Beginning a Texinfo File
-
-* Four Parts:: Four parts begin a Texinfo file.
-* Sample Beginning:: Here is a sample beginning for a Texinfo file.
-* Header:: The very beginning of a Texinfo file.
-* Info Summary and Permissions:: Summary and copying permissions for Info.
-* Titlepage & Copyright Page:: Creating the title and copyright pages.
-* The Top Node:: Creating the `Top' node and master menu.
-* Software Copying Permissions:: Ensure that you and others continue to
- have the right to use and share software.
-
-The Texinfo File Header
-
-* First Line:: The first line of a Texinfo file.
-* Start of Header:: Formatting a region requires this.
-* setfilename:: Tell Info the name of the Info file.
-* settitle:: Create a title for the printed work.
-* setchapternewpage:: Start chapters on right-hand pages.
-* paragraphindent:: An option to specify paragraph indentation.
-* End of Header:: Formatting a region requires this.
-
-The Title and Copyright Pages
-
-* titlepage:: Create a title for the printed document.
-* titlefont center sp:: The @code{@@titlefont}, @code{@@center},
- and @code{@@sp} commands.
-* title subtitle author:: The @code{@@title}, @code{@@subtitle},
- and @code{@@author} commands.
-* Copyright & Permissions:: How to write the copyright notice and
- include copying permissions.
-* end titlepage:: Turn on page headings after the title and
- copyright pages.
-* headings on off:: An option for turning headings on and off
- and double or single sided printing.
-
-The `Top' Node and Master Menu
-
-* Title of Top Node:: Sketch what the file is about.
-* Master Menu Parts:: A master menu has three or more parts.
-
-Ending a Texinfo File
-
-* Printing Indices & Menus:: How to print an index in hardcopy and
- generate index menus in Info.
-* Contents:: How to create a table of contents.
-* File End:: How to mark the end of a file.
-
-Chapter Structuring
-
-* Tree Structuring:: A manual is like an upside down tree @dots{}
-* Structuring Command Types:: How to divide a manual into parts.
-* makeinfo top:: The @code{@@top} command, part of the `Top' node.
-* chapter::
-* unnumbered & appendix::
-* majorheading & chapheading::
-* section::
-* unnumberedsec appendixsec heading::
-* subsection::
-* unnumberedsubsec appendixsubsec subheading::
-* subsubsection:: Commands for the lowest level sections.
-
-Nodes
-
-* Two Paths:: Different commands to structure
- Info output and printed output.
-* Node Menu Illustration:: A diagram, and sample nodes and menus.
-* node:: How to write a node, in detail.
-* makeinfo Pointer Creation:: How to create node pointers with @code{makeinfo}.
-
-The @code{@@node} Command
-
-* Node Names:: How to choose node and pointer names.
-* Writing a Node:: How to write an @code{@@node} line.
-* Node Line Tips:: Keep names short.
-* Node Line Requirements:: Keep names unique, without @@-commands.
-* First Node:: How to write a `Top' node.
-* makeinfo top command:: How to use the @code{@@top} command.
-* Top Node Summary:: Write a brief description for readers.
-
-Menus
-
-* Menu Location:: Put a menu in a short node.
-* Writing a Menu:: What is a menu?
-* Menu Parts:: A menu entry has three parts.
-* Less Cluttered Menu Entry:: Two part menu entry.
-* Menu Example:: Two and three part menu entries.
-* Other Info Files:: How to refer to a different Info file.
-
-Cross References
-
-* References:: What cross references are for.
-* Cross Reference Commands:: A summary of the different commands.
-* Cross Reference Parts:: A cross reference has several parts.
-* xref:: Begin a reference with `See' @dots{}
-* Top Node Naming:: How to refer to the beginning of another file.
-* ref:: A reference for the last part of a sentence.
-* pxref:: How to write a parenthetical cross reference.
-* inforef:: How to refer to an Info-only file.
-
-@code{@@xref}
-
-* Reference Syntax:: What a reference looks like and requires.
-* One Argument:: @code{@@xref} with one argument.
-* Two Arguments:: @code{@@xref} with two arguments.
-* Three Arguments:: @code{@@xref} with three arguments.
-* Four and Five Arguments:: @code{@@xref} with four and five arguments.
-
-Marking Words and Phrases
-
-* Indicating:: How to indicate definitions, files, etc.
-* Emphasis:: How to emphasize text.
-
-Indicating Definitions, Commands, etc.
-
-* Useful Highlighting:: Highlighting provides useful information.
-* code:: How to indicate code.
-* kbd:: How to show keyboard input.
-* key:: How to specify keys.
-* samp:: How to show a literal sequence of characters.
-* var:: How to indicate a metasyntactic variable.
-* file:: How to indicate the name of a file.
-* dfn:: How to specify a definition.
-* cite:: How to refer to a book that is not in Info.
-
-Emphasizing Text
-
-* emph & strong:: How to emphasize text in Texinfo.
-* Smallcaps:: How to use the small caps font.
-* Fonts:: Various font commands for printed output.
-
-Quotations and Examples
-
-* Block Enclosing Commands:: Use different constructs for
- different purposes.
-* quotation:: How to write a quotation.
-* example:: How to write an example in a fixed-width font.
-* noindent:: How to prevent paragraph indentation.
-* Lisp Example:: How to illustrate Lisp code.
-* smallexample & smalllisp:: Forms for the @code{@@smallbook} option.
-* display:: How to write an example in the current font.
-* format:: How to write an example that does not narrow
- the margins.
-* exdent:: How to undo the indentation of a line.
-* flushleft & flushright:: How to push text flushleft or flushright.
-* cartouche:: How to draw cartouches around examples.
-
-Making Lists and Tables
-
-* Introducing Lists:: Texinfo formats lists for you.
-* itemize:: How to construct a simple list.
-* enumerate:: How to construct a numbered list.
-* Two-column Tables:: How to construct a two-column table.
-
-Making a Two-column Table
-
-* table:: How to construct a two-column table.
-* ftable vtable:: How to construct a two-column table
- with automatic indexing.
-* itemx:: How to put more entries in the first column.
-
-Creating Indices
-
-* Index Entries:: Choose different words for index entries.
-* Predefined Indices:: Use different indices for different kinds
- of entry.
-* Indexing Commands:: How to make an index entry.
-* Combining Indices:: How to combine indices.
-* New Indices:: How to define your own indices.
-
-Combining Indices
-
-* syncodeindex:: How to merge two indices, using @code{@@code}
- font for the merged-from index.
-* synindex:: How to merge two indices, using the
- default font of the merged-to index.
-
-Special Insertions
-
-* Braces Atsigns Periods:: How to insert braces, @samp{@@} and periods.
-* dmn:: How to format a dimension.
-* Dots Bullets:: How to insert dots and bullets.
-* TeX and copyright:: How to insert the @TeX{} logo
- and the copyright symbol.
-* minus:: How to insert a minus sign.
-
-Inserting @samp{@@}, Braces, and Periods
-
-* Inserting An Atsign::
-* Inserting Braces:: How to insert @samp{@{} and @samp{@}}
-* Controlling Spacing:: How to insert the right amount of space
- after punctuation within a sentence.
-
-Inserting Ellipsis, Dots, and Bullets
-
-* dots:: How to insert dots @dots{}
-* bullet:: How to insert a bullet.
-
-Inserting @TeX{} and the Copyright Symbol
-
-* tex:: How to insert the @TeX{} logo.
-* copyright symbol:: How to use @code{@@copyright}@{@}.
-
-Glyphs for Examples
-
-* Glyphs Summary::
-* result:: How to show the result of expression.
-* expansion:: How to indicate an expansion.
-* Print Glyph:: How to indicate printed output.
-* Error Glyph:: How to indicate an error message.
-* Equivalence:: How to indicate equivalence.
-* Point Glyph:: How to indicate the location of point.
-
-Making and Preventing Breaks
-
-* Break Commands:: Cause and prevent splits.
-* Line Breaks:: How to force a single line to use two lines.
-* w:: How to prevent unwanted line breaks.
-* sp:: How to insert blank lines.
-* page:: How to force the start of a new page.
-* group:: How to prevent unwanted page breaks.
-* need:: Another way to prevent unwanted page breaks.
-
-Definition Commands
-
-* Def Cmd Template:: How to structure a description using a
- definition command.
-* Optional Arguments:: How to handle optional and repeated arguments.
-* deffnx:: How to group two or more `first' lines.
-* Def Cmds in Detail:: All the definition commands.
-* Def Cmd Conventions:: Conventions for writing definitions.
-* Sample Function Definition::
-
-The Definition Commands
-
-* Functions Commands:: Commands for functions and similar entities.
-* Variables Commands:: Commands for variables and similar entities.
-* Typed Functions:: Commands for functions in typed languages.
-* Typed Variables:: Commands for variables in typed languages.
-* Abstract Objects:: Commands for object-oriented programming.
-* Data Types:: The definition command for data types.
-
-Conditionally Visible Text
-
-* Conditional Commands:: How to specify text for Info or @TeX{}.
-* Using Ordinary TeX Commands:: You can use any and all @TeX{} commands.
-* set clear value:: How to designate which text to format (for
- both Info and @TeX{}); and how to set a
- flag to a string that you can insert.
-
-@code{@@set}, @code{@@clear}, and @code{@@value}
-
-* ifset ifclear:: Format a region if a flag is set.
-* value:: Replace a flag with a string.
-* value Example:: An easy way to update edition information.
-
-Format and Print Hardcopy
-
-* Use TeX:: Use @TeX{} to format for hardcopy.
-* Shell Format & Print:: How to format and print a hardcopy manual
- with shell commands.
-* Within Emacs:: How to format and print from an Emacs shell.
-* Texinfo Mode Printing:: How to format and print in Texinfo mode.
-* Compile-Command:: How to print using Emacs's compile command.
-* Requirements Summary:: @TeX{} formatting requirements summary.
-* Preparing for TeX:: What you need to do to use @TeX{}.
-* Overfull hboxes:: What are and what to do with overfull hboxes.
-* smallbook:: How to print small format books and manuals.
-* A4 Paper:: How to print on European A4 paper.
-* Cropmarks and Magnification:: How to print marks to indicate the size
- of pages and how to print scaled up output.
-
-Creating an Info File
-
-* makeinfo advantages:: @code{makeinfo} provides better error checking.
-* Invoking makeinfo:: How to run @code{makeinfo} from a shell.
-* makeinfo options:: Specify fill-column and other options.
-* Pointer Validation:: How to check that pointers point somewhere.
-* makeinfo in Emacs:: How to run @code{makeinfo} from Emacs.
-* texinfo-format commands:: Two Info formatting commands written
- in Emacs Lisp are an alternative
- to @code{makeinfo}.
-* Batch Formatting:: How to format for Info in Emacs Batch mode.
-* Tag and Split Files:: How tagged and split files help Info
- to run better.
-
-Installing an Info File
-
-* Directory file:: The top level menu for all Info files.
-* New Info File:: Listing a new info file.
-* Other Info Directories:: How to specify Info files that are
- located in other directories.
-
-Sample Permissions
-
-* Inserting Permissions:: How to put permissions in your document.
-* ifinfo Permissions:: Sample @samp{ifinfo} copying permissions.
-* Titlepage Permissions:: Sample Titlepage copying permissions.
-
-Include Files
-
-* Using Include Files:: How to use the @code{@@include} command.
-* texinfo-multiple-files-update:: How to create and update nodes and
- menus when using included files.
-* Include File Requirements:: What @code{texinfo-multiple-files-update} expects.
-* Sample Include File:: A sample outer file with included files
- within it; and a sample included file.
-* Include Files Evolution:: How use of the @code{@@include} command
- has changed over time.
-
-Page Headings
-
-* Headings Introduced:: Conventions for using page headings.
-* Heading Format:: Standard page heading formats.
-* Heading Choice:: How to specify the type of page heading.
-* Custom Headings:: How to create your own headings and footings.
-
-Formatting Mistakes
-
-* makeinfo preferred:: @code{makeinfo} finds errors.
-* Debugging with Info:: How to catch errors with Info formatting.
-* Debugging with TeX:: How to catch errors with @TeX{} formatting.
-* Using texinfo-show-structure:: How to use @code{texinfo-show-structure}.
-* Using occur:: How to list all lines containing a pattern.
-* Running Info-Validate:: How to find badly referenced nodes.
-
-Finding Badly Referenced Nodes
-
-* Using Info-validate:: How to run @code{Info-validate}.
-* Unsplit:: How to create an unsplit file.
-* Tagifying:: How to tagify a file.
-* Splitting:: How to split a file manually.
-
-Second Edition Features
-
-* New Texinfo Mode Commands:: The updating commands are especially useful.
-* New Commands:: Many newly described @@-commands.
-@end menu
-
-@node Copying, Overview, Top, Top
-@comment node-name, next, previous, up
-@unnumbered Texinfo Copying Conditions
-@cindex Copying conditions
-@cindex Conditions for copying Texinfo
-
-The programs currently being distributed that relate to Texinfo include
-portions of GNU Emacs, plus other separate programs (including
-@code{makeinfo}, @code{info}, @code{texindex}, and @file{texinfo.tex}).
-These programs are @dfn{free}; this means that everyone is free to use
-them and free to redistribute them on a free basis. The Texinfo-related
-programs are not in the public domain; they are copyrighted and there
-are restrictions on their distribution, but these restrictions are
-designed to permit everything that a good cooperating citizen would want
-to do. What is not allowed is to try to prevent others from further
-sharing any version of these programs that they might get from
-you.@refill
-
- Specifically, we want to make sure that you have the right to give
-away copies of the programs that relate to Texinfo, that you receive
-source code or else can get it if you want it, that you can change these
-programs or use pieces of them in new free programs, and that you know
-you can do these things.@refill
-
- To make sure that everyone has such rights, we have to forbid you to
-deprive anyone else of these rights. For example, if you distribute
-copies of the Texinfo related programs, you must give the recipients all
-the rights that you have. You must make sure that they, too, receive or
-can get the source code. And you must tell them their rights.@refill
-
- Also, for our own protection, we must make certain that everyone finds
-out that there is no warranty for the programs that relate to Texinfo.
-If these programs are modified by someone else and passed on, we want
-their recipients to know that what they have is not what we distributed,
-so that any problems introduced by others will not reflect on our
-reputation.@refill
-
- The precise conditions of the licenses for the programs currently
-being distributed that relate to Texinfo are found in the General Public
-Licenses that accompany them.@refill
-
-@node Overview, Texinfo Mode, Copying, Top
-@comment node-name, next, previous, up
-@chapter Overview of Texinfo
-@cindex Overview of Texinfo
-@cindex Texinfo overview
-
-@dfn{Texinfo}@footnote{Note that the first syllable of ``Texinfo'' is
-pronounced like ``speck'', not ``hex''. This odd pronunciation is
-derived from, but is not the same as, the pronunciation of @TeX{}. In
-the word @TeX{}, the @samp{X} is actually the Greek letter ``chi''
-rather than the English letter ``ex''. Pronounce @TeX{} as if the
-@samp{X} were the last sound in the name `Bach'; but pronounce Texinfo
-as if the @samp{x} were a `k'. Spell ``Texinfo'' with a capital ``T''
-and write the other letters in lower case.}
-is a documentation system that uses a single source file to produce both
-on-line information and printed output. This means that instead of
-writing two different documents, one for the on-line help or other on-line
-information and the other for a typeset manual or other printed work, you
-need write only one document. When the work is revised, you need revise
-only one document. (You can read the on-line information, known as an
-@dfn{Info file}, with an Info documentation-reading program.)@refill
-
-@menu
-* Using Texinfo:: Create a conventional printed book
- or an Info file.
-* Info Files:: What is an Info file?
-* Printed Books:: Characteristics of a printed book or manual.
-* Formatting Commands:: @@-commands are used for formatting.
-* Conventions:: General rules for writing a Texinfo file.
-* Comments:: How to write comments and mark regions that
- the formatting commands will ignore.
-* Minimum:: What a Texinfo file must have.
-* Six Parts:: Usually, a Texinfo file has six parts.
-* Short Sample:: A short sample Texinfo file.
-* Acknowledgements::
-@end menu
-
-@node Using Texinfo, Info Files, , Overview
-@ifinfo
-@heading Using Texinfo
-@end ifinfo
-
-Using Texinfo, you can create a printed document with the normal
-features of a book, including chapters, sections, cross references,
-and indices. From the same Texinfo source file, you can create a
-menu-driven, on-line Info file with nodes, menus, cross references,
-and indices. You can, if you wish, make the chapters and sections of
-the printed document correspond to the nodes of the on-line
-information; and you use the same cross references and indices for
-both the Info file and the printed work. @cite{The GNU
-Emacs Manual} is a good example of a Texinfo file, as is this manual.@refill
-
-To make a printed document, you process a Texinfo source file with the
-@TeX{} typesetting program. This creates a @sc{dvi} file that you can
-typeset and print as a book or report. (Note that the Texinfo language is
-completely different from @TeX{}'s usual language, Plain@TeX{}, which
-Texinfo replaces.) If you do not have @TeX{}, but do have
-@code{troff} or @code{nroff}, you can use the @code{texi2roff} program
-instead.@refill
-
-To make an Info file, you process a Texinfo source file with the
-@code{makeinfo} utility or Emacs's @code{texinfo-format-buffer} command;
-this creates an Info file that you can install on-line.@refill
-
-@TeX{} and @code{texi2roff} work with many types of printer; similarly,
-Info works with almost every type of computer terminal. This power
-makes Texinfo a general purpose system, but brings with it a constraint,
-which is that a Texinfo file may contain only the customary
-``typewriter'' characters (letters, numbers, spaces, and punctuation
-marks) but no special graphics.@refill
-
-A Texinfo file is a plain @sc{ascii} file containing text and
-@dfn{@@-commands} (words preceded by an @samp{@@}) that tell the
-typesetting and formatting programs what to do. You may edit a
-Texinfo file with any text editor; but it is especially convenient to
-use GNU Emacs since that editor has a special mode, called Texinfo
-mode, that provides various Texinfo-related features. (@xref{Texinfo
-Mode}.)@refill
-
-Before writing a Texinfo source file, you should become familiar with
-the Info documentation reading program and learn about nodes,
-menus, cross references, and the rest. (@inforef{Top, info, info},
-for more information.)@refill
-
-You can use Texinfo to create both on-line help and printed manuals;
-moreover, Texinfo is freely redistributable. For these reasons, Texinfo
-is the format in which documentation for GNU utilities and libraries is
-written.@refill
-
-@node Info Files, Printed Books, Using Texinfo, Overview
-@comment node-name, next, previous, up
-@section Info files
-@cindex Info files
-
-An Info file is a Texinfo file formatted so that the Info documentation
-reading program can operate on it. (@code{makeinfo}
-and @code{texinfo-format-buffer} are two commands that convert a Texinfo file
-into an Info file.)@refill
-
-Info files are divided into pieces called @dfn{nodes}, each of which
-contains the discussion of one topic. Each node has a name, and
-contains both text for the user to read and pointers to other nodes,
-which are identified by their names. The Info program displays one node
-at a time, and provides commands with which the user can move to other
-related nodes.@refill
-
-@ifinfo
-@inforef{Top, info, info}, for more information about using Info.@refill
-@end ifinfo
-
-Each node of an Info file may have any number of child nodes that
-describe subtopics of the node's topic. The names of child
-nodes are listed in a @dfn{menu} within the parent node; this
-allows you to use certain Info commands to move to one of the child
-nodes. Generally, an Info file is organized like a book. If a node
-is at the logical level of a chapter, its child nodes are at the level
-of sections; likewise, the child nodes of sections are at the level
-of subsections.@refill
-
-All the children of any one parent are linked together in a
-bidirectional chain of `Next' and `Previous' pointers. The `Next'
-pointer provides a link to the next section, and the `Previous' pointer
-provides a link to the previous section. This means that all the nodes
-that are at the level of sections within a chapter are linked together.
-Normally the order in this chain is the same as the order of the
-children in the parent's menu. Each child node records the parent node
-name as its `Up' pointer. The last child has no `Next' pointer, and the
-first child has the parent both as its `Previous' and as its `Up'
-pointer.@footnote{In some documents, the first child has no `Previous'
-pointer. Occasionally, the last child has the node name of the next
-following higher level node as its `Next' pointer.}@refill
-
-The book-like structuring of an Info file into nodes that correspond
-to chapters, sections, and the like is a matter of convention, not a
-requirement. The `Up', `Previous', and `Next' pointers of a node can
-point to any other nodes, and a menu can contain any other nodes.
-Thus, the node structure can be any directed graph. But it is usually
-more comprehensible to follow a structure that corresponds to the
-structure of chapters and sections in a printed book or report.@refill
-
-In addition to menus and to `Next', `Previous', and `Up' pointers, Info
-provides pointers of another kind, called references, that can be
-sprinkled throughout the text. This is usually the best way to
-represent links that do not fit a hierarchical structure.@refill
-
-Usually, you will design a document so that its nodes match the
-structure of chapters and sections in the printed output. But there
-are times when this is not right for the material being discussed.
-Therefore, Texinfo uses separate commands to specify the node
-structure for the Info file and the section structure for the printed
-output.@refill
-
-Generally, you enter an Info file through a node that by convention is
-called @samp{Top}. This node normally contains just a brief summary
-of the file's purpose, and a large menu through which the rest of the
-file is reached. From this node, you can either traverse the file
-systematically by going from node to node, or you can go to a specific
-node listed in the main menu, or you can search the index menus and
-then go directly to the node that has the information you want.@refill
-@c !!! With the standalone Info system you may go to specific nodes
-@c directly..
-
-If you want to read through an Info file in sequence, as if it were a
-printed manual, you can get the whole file with the advanced Info
-command @kbd{g* @key{RET}}. (@inforef{Expert, Advanced Info commands,
-info}.)@refill
-
-@c !!! dir file may be located in one of many places:
-@c /usr/local/emacs/info mentioned in info.c DEFAULT_INFOPATH
-@c /usr/local/lib/emacs/info mentioned in info.c DEFAULT_INFOPATH
-@c /usr/gnu/info mentioned in info.c DEFAULT_INFOPATH
-@c /usr/local/info
-@c /usr/local/lib/info
-The @file{dir} file in the @file{info} directory serves as the
-departure point for the whole Info system. From it, you can reach the
-`Top' nodes of each of the documents in a complete Info system.@refill
-
-@node Printed Books, Formatting Commands, Info Files, Overview
-@comment node-name, next, previous, up
-@section Printed Books
-@cindex Printed book and manual characteristics
-@cindex Manual characteristics, printed
-@cindex Book characteristics, printed
-@cindex Texinfo printed book characteristics
-@cindex Characteristics, printed books or manuals
-
-A Texinfo file can be formatted and typeset as a printed book or manual.
-To do this, you need @TeX{}, a powerful, sophisticated typesetting
-program written by Donald Knuth.@footnote{You can also use the
-@code{texi2roff} program if you do not have @TeX{}; since Texinfo is
-designed for use with @TeX{}, @code{texi2roff} is not described here.
-@code{texi2roff} is part of the standard GNU distribution.}@refill
-
-A Texinfo-based book is similar to any other typeset, printed work: it
-can have a title page, copyright page, table of contents, and preface,
-as well as chapters, numbered or unnumbered sections and subsections,
-page headers, cross references, footnotes, and indices.@refill
-
-You can use Texinfo to write a book without ever having the intention
-of converting it into on-line information. You can use Texinfo for
-writing a printed novel, and even to write a printed memo, although
-this latter application is not recommended since electronic mail is so
-much easier.@refill
-
-@TeX{} is a general purpose typesetting program. Texinfo provides a
-file called @file{texinfo.tex} that contains information (definitions or
-@dfn{macros}) that @TeX{} uses when it typesets a Texinfo file.
-(@file{texinfo.tex} tells @TeX{} how to convert the Texinfo @@-commands
-to @TeX{} commands, which @TeX{} can then process to create the typeset
-document.) @file{texinfo.tex} contains the specifications for printing
-a document.@refill
-
-Most often, documents are printed on 8.5 inch by 11 inch
-pages (216@dmn{mm} by 280@dmn{mm}; this is the default size), but you
-can also print for 7 inch by 9.25 inch pages (178@dmn{mm} by
-235@dmn{mm}; the @code{@@smallbook} size) or on European A4 size paper
-(@code{@@afourpaper}). (@xref{smallbook, , Printing ``Small'' Books}.
-Also, see @ref{A4 Paper, ,Printing on A4 Paper}.)@refill
-
-By changing the parameters in @file{texinfo.tex}, you can change the
-size of the printed document. In addition, you can change the style in
-which the printed document is formatted; for example, you can change the
-sizes and fonts used, the amount of indentation for each paragraph, the
-degree to which words are hyphenated, and the like. By changing the
-specifications, you can make a book look dignified, old and serious, or
-light-hearted, young and cheery.@refill
-
-@TeX{} is freely distributable. It is written in a dialect of Pascal
-called WEB and can be compiled either in Pascal or (by using a
-conversion program that comes with the @TeX{} distribution) in C.
-(@xref{TeX Mode, ,@TeX{} Mode, emacs, The GNU Emacs Manual}, for information
-about @TeX{}.)@refill
-
-@TeX{} is very powerful and has a great many features. Because a
-Texinfo file must be able to present information both on a
-character-only terminal in Info form and in a typeset book, the
-formatting commands that Texinfo supports are necessarily
-limited.@refill
-
-@xref{Obtaining TeX, , How to Obtain @TeX{}}.
-
-
-@node Formatting Commands, Conventions, Printed Books, Overview
-@comment node-name, next, previous, up
-@section @@-commands
-@cindex @@-commands
-@cindex Formatting commands
-
-In a Texinfo file, the commands that tell @TeX{} how to typeset the
-printed manual and tell @code{makeinfo} and
-@code{texinfo-format-buffer} how to create an Info file are preceded
-by @samp{@@}; they are called @dfn{@@-commands}. For example,
-@code{@@node} is the command to indicate a node and @code{@@chapter}
-is the command to indicate the start of a chapter.@refill
-
-@quotation
-@strong{Please note:} All the @@-commands, with the exception of the
-@code{@@TeX@{@}} command, must be written entirely in lower
-case.@refill
-@end quotation
-
-The Texinfo @@-commands are a strictly limited set of constructs. The
-strict limits make it possible for Texinfo files to be understood both
-by @TeX{} and by the code that converts them into Info files. You can
-display Info files on any terminal that displays alphabetic and
-numeric characters. Similarly, you can print the output generated by
-@TeX{} on a wide variety of printers.@refill
-
-Depending on what they do or what arguments@footnote{The word
-@dfn{argument} comes from the way it is used in mathematics and does
-not refer to a disputation between two people; it refers to the
-information presented to the command. According to the @cite{Oxford
-English Dictionary}, the word derives from the Latin for @dfn{to make
-clear, prove}; thus it came to mean `the evidence offered as proof',
-which is to say, `the information offered', which led to its
-mathematical meaning. In its other thread of derivation, the word
-came to mean `to assert in a manner against which others may make
-counter assertions', which led to the meaning of `argument' as a
-disputation.} they take, you need to write @@-commands on lines of
-their own or as part of sentences:@refill
-
-@itemize @bullet
-@item
-Write a command such as @code{@@noindent} at the beginning of a line as
-the only text on the line. (@code{@@noindent} prevents the beginning of
-the next line from being indented as the beginning of a
-paragraph.)@refill
-
-@item
-Write a command such as @code{@@chapter} at the beginning of a line
-followed by the command's arguments, in this case the chapter title, on
-the rest of the line. (@code{@@chapter} creates chapter titles.)@refill
-
-@item
-Write a command such as @code{@@dots@{@}} wherever you wish but usually
-within a sentence. (@code{@@dots@{@}} creates dots @dots{})@refill
-
-@item
-Write a command such as @code{@@code@{@var{sample-code}@}} wherever you
-wish (but usually within a sentence) with its argument,
-@var{sample-code} in this example, between the braces. (@code{@@code}
-marks text as being code.)@refill
-
-@item
-Write a command such as @code{@@example} at the beginning of a line of
-its own; write the body-text on following lines; and write the matching
-@code{@@end} command, @code{@@end example} in this case, at the
-beginning of a line of its own after the body-text. (@code{@@example}
-@dots{} @code{@@end example} indents and typesets body-text as an
-example.)@refill
-@end itemize
-
-@noindent
-@cindex Braces, when to use
-As a general rule, a command requires braces if it mingles among other
-text; but it does not need braces if it starts a line of its own. The
-non-alphabetic commands, such as @code{@@:}, are exceptions to the rule;
-they do not need braces.@refill
-
-As you gain experience with Texinfo, you will rapidly learn how to
-write the different commands: the different ways to write commands
-make it easier to write and read Texinfo files than if all commands
-followed exactly the same syntax. (For details about @@-command
-syntax, see @ref{Command Syntax, , @@-Command Syntax}.)@refill
-
-@node Conventions, Comments, Formatting Commands, Overview
-@comment node-name, next, previous, up
-@section General Syntactic Conventions
-@cindex General syntactic conventions
-@cindex Syntactic conventions
-@cindex Conventions, syntactic
-
-All @sc{ascii} printing characters except @samp{@@}, @samp{@{} and
-@samp{@}} can appear in a Texinfo file and stand for themselves.
-@samp{@@} is the escape character which introduces commands.
-@samp{@{} and @samp{@}} should be used only to surround arguments to
-certain commands. To put one of these special characters into the
-document, put an @samp{@@} character in front of it, like this:
-@samp{@@@@}, @samp{@@@{}, and @samp{@@@}}.@refill
-
-@ifinfo
-It is customary in @TeX{} to use doubled single-quote characters to
-begin and end quotations: ` ` and ' ' (but without a space between the
-two single-quote characters). This convention should be followed in
-Texinfo files. @TeX{} converts doubled single-quote characters to
-left- and right-hand doubled quotation marks and Info converts doubled
-single-quote characters to @sc{ascii} double-quotes: ` ` and ' ' to " .@refill
-@end ifinfo
-@iftex
-It is customary in @TeX{} to use doubled single-quote characters to
-begin and end quotations: @w{@tt{ `` }} and @w{@tt{ '' }}. This
-convention should be followed in Texinfo files. @TeX{} converts
-doubled single-quote characters to left- and right-hand doubled
-quotation marks, ``like this'', and Info converts doubled single-quote
-characters to @sc{ascii} double-quotes: @w{@tt{ `` }} and
-@w{@tt{ '' }} to @w{@tt{ " }}.@refill
-@end iftex
-
-Use three hyphens in a row, @samp{---}, for a dash---like this. In
-@TeX{}, a single or even a double hyphen produces a printed dash that
-is shorter than the usual typeset dash. Info reduces three hyphens to two for
-display on the screen.@refill
-
-To prevent a paragraph from being indented in the printed manual, put
-the command @code{@@noindent} on a line by itself before the
-paragraph.@refill
-
-If you mark off a region of the Texinfo file with the @code{@@iftex}
-and @w{@code{@@end iftex}} commands, that region will appear only in
-the printed copy; in that region, you can use certain commands
-borrowed from Plain@TeX{} that you cannot use in Info. Likewise, if
-you mark off a region with the @code{@@ifinfo} and @code{@@end ifinfo}
-commands, that region will appear only in the Info file; in that
-region, you can use Info commands that you cannot use in @TeX{}.
-(@xref{Conditionals}.)
-
-@cindex Tabs; don't use!
-@quotation
-@strong{Caution:} Do not use tabs in a Texinfo file! @TeX{} uses
-variable-width fonts, which means that it cannot predefine a tab to work
-in all circumstances. Consequently, @TeX{} treats tabs like single
-spaces, and that is not what they look like.@refill
-
-@noindent
-To avoid this problem, Texinfo mode causes GNU Emacs to insert multiple
-spaces when you press the @key{TAB} key.@refill
-
-@noindent
-Also, you can run @code{untabify} in Emacs to convert tabs in a region
-to multiple spaces.@refill
-@end quotation
-
-@node Comments, Minimum, Conventions, Overview
-@comment node-name, next, previous, up
-@section Comments
-
-You can write comments in a Texinfo file that will not appear in
-either the Info file or the printed manual by using the
-@code{@@comment} command (which may be abbreviated to @code{@@c}).
-Such comments are for the person who reads the Texinfo file. All the
-text on a line that follows either @code{@@comment} or @code{@@c} is a
-comment; the rest of the line does not appear in either the Info file
-or the printed manual. (Often, you can write the @code{@@comment} or
-@code{@@c} in the middle of a line, and only the text that follows after
-the @code{@@comment} or @code{@@c} command does not appear; but some
-commands, such as @code{@@settitle} and @code{@@setfilename}, work on a
-whole line. You cannot use @code{@@comment} or @code{@@c} in a line
-beginning with such a command.)@refill
-@cindex Comments
-@findex comment
-@findex c @r{(comment)}
-
-You can write long stretches of text that will not appear in either
-the Info file or the printed manual by using the @code{@@ignore} and
-@code{@@end ignore} commands. Write each of these commands on a line
-of its own, starting each command at the beginning of the line. Text
-between these two commands does not appear in the processed output.
-You can use @code{@@ignore} and @code{@@end ignore} for writing
-comments. Often, @code{@@ignore} and @code{@@end ignore} is used
-to enclose a part of the copying permissions that applies to the
-Texinfo source file of a document, but not to the Info or printed
-version of the document.@refill
-@cindex Ignored text
-@cindex Unprocessed text
-@findex ignore
-@c !!! Perhaps include this comment about ignore and ifset:
-@ignore
-Text enclosed by @code{@@ignore} or by failing @code{@@ifset} or
-@code{@@ifclear} conditions is ignored in the sense that it will not
-contribute to the formatted output. However, TeX and makeinfo must
-still parse the ignored text, in order to understand when to
-@emph{stop} ignoring text from the source file; that means that you
-will still get error messages if you have invalid Texinfo markup
-within ignored text.
-@end ignore
-
-@node Minimum, Six Parts, Comments, Overview
-@comment node-name, next, previous, up
-@section What a Texinfo File Must Have
-@cindex Minimal Texinfo file (requirements)
-@cindex Must have in Texinfo file
-@cindex Required in Texinfo file
-@cindex Texinfo file minimum
-
-By convention, the names of Texinfo files end with one of the
-extensions @file{.texinfo}, @file{.texi}, or @file{.tex}. The longer
-extension is preferred since it describes more clearly to a human
-reader the nature of the file. The shorter extensions are for
-operating systems that cannot handle long file names.@refill
-
-In order to be made into a printed manual and an Info file, a
-Texinfo file @strong{must} begin with lines like this:@refill
-
-@example
-@group
-\input texinfo
-@@setfilename @var{info-file-name}
-@@settitle @var{name-of-manual}
-@end group
-@end example
-
-@noindent
-The contents of the file follow this beginning, and then you @strong{must} end
-a Texinfo file with a line like this:@refill
-
-@example
-@@bye
-@end example
-
-@findex input @r{(@TeX{} command)}
-@noindent
-The @samp{\input texinfo} line tells @TeX{} to use the
-@file{texinfo.tex} file, which tells @TeX{} how to translate the Texinfo
-@@-commands into @TeX{} typesetting commands. (Note the use of the
-backslash, @samp{\}; this is correct for @TeX{}.) The
-@samp{@@setfilename} line provides a name for the Info file and the
-@samp{@@settitle} line specifies a title for the page headers (or
-footers) of the printed manual.@refill
-
-The @code{@@bye} line at the end of the file on a line of its own tells
-the formatters that the file is ended and to stop formatting.@refill
-
-Usually, you will not use quite such a spare format, but will include
-mode setting and start-of-header and end-of-header lines at the
-beginning of a Texinfo file, like this:@refill
-
-@example
-@group
-\input texinfo @@c -*-texinfo-*-
-@@c %**start of header
-@@setfilename @var{info-file-name}
-@@settitle @var{name-of-manual}
-@@c %**end of header
-@end group
-@end example
-
-@noindent
-In the first line, @samp{-*-texinfo-*-} causes Emacs to switch into
-Texinfo mode when you edit the file.
-
-The @code{@@c} lines which surround the @samp{@@setfilename} and
-@samp{@@settitle} lines are optional, but you need them in order to
-run @TeX{} or Info on just part of the file. (@xref{Start of Header},
-for more information.)@refill
-
-Furthermore, you will usually provide a Texinfo file with a title
-page, indices, and the like. But the minimum, which can be useful
-for short documents, is just the three lines at the beginning and the
-one line at the end.@refill
-
-@node Six Parts, Short Sample, Minimum, Overview
-@comment node-name, next, previous, up
-@section Six Parts of a Texinfo File
-
-Generally, a Texinfo file contains more than the minimal
-beginning and end---it usually contains six parts:@refill
-
-@table @r
-@item 1. Header
-The @dfn{Header} names the file, tells @TeX{} which definitions' file to
-use, and performs other ``housekeeping'' tasks.@refill
-
-@item 2. Summary Description and Copyright
-The @dfn{Summary Description and Copyright} segment describes the document
-and contains the copyright notice and copying permissions for the Info
-file. The segment must be enclosed between @code{@@ifinfo} and
-@code{@@end ifinfo} commands so that the formatters place it only in the Info
-file.@refill
-
-@item 3. Title and Copyright
-The @dfn{Title and Copyright} segment contains the title and copyright pages
-and copying permissions for the printed manual. The segment must be
-enclosed between @code{@@titlepage} and @code{@@end titlepage} commands.
-The title and copyright page appear only in the printed @w{manual}.@refill
-
-@item 4. `Top' Node and Master Menu
-The @dfn{Master Menu} contains a complete menu of all the nodes in the whole
-Info file. It appears only in the Info file, in the `Top' node.@refill
-
-@item 5. Body
-The @dfn{Body} of the document may be structured like a traditional book or
-encyclopedia or it may be free form.@refill
-
-@item 6. End
-The @dfn{End} contains commands for printing indices and generating
-the table of contents, and the @code{@@bye} command on a line of its
-own.@refill
-@end table
-
-@node Short Sample, Acknowledgements, Six Parts, Overview
-@comment node-name, next, previous, up
-@section A Short Sample Texinfo File
-@cindex Sample Texinfo file
-
-Here is a complete but very short Texinfo file, in 6 parts. The first
-three parts of the file, from @samp{\input texinfo} through to
-@samp{@@end titlepage}, look more intimidating than they are. Most of
-the material is standard boilerplate; when you write a manual, simply
-insert the names for your own manual in this segment. (@xref{Beginning a
-File}.)@refill
-
-@noindent
-In the following, the sample text is @emph{indented}; comments on it are
-not. The complete file, without any comments, is shown in
-@ref{Sample Texinfo File}.
-
-@subheading Part 1: Header
-
-@noindent
-The header does not appear in either the Info file or the@*
-printed output. It sets various parameters, including the@*
-name of the Info file and the title used in the header.
-
-@example
-@group
-\input texinfo @@c -*-texinfo-*-
-@@c %**start of header
-@@setfilename sample.info
-@@settitle Sample Document
-@@c %**end of header
-
-@@setchapternewpage odd
-@end group
-@end example
-
-@subheading Part 2: Summary Description and Copyright
-
-@noindent
-The summary description and copyright segment does not@*
-appear in the printed document.
-
-@example
-@group
-@@ifinfo
-This is a short example of a complete Texinfo file.
-
-Copyright @@copyright@{@} 1990 Free Software Foundation, Inc.
-@@end ifinfo
-@end group
-@end example
-
-@subheading Part 3: Titlepage and Copyright
-
-@noindent
-The titlepage segment does not appear in the Info file.
-
-@example
-@group
-@@titlepage
-@@sp 10
-@@comment The title is printed in a large font.
-@@center @@titlefont@{Sample Title@}
-@end group
-
-@group
-@@c The following two commands start the copyright page.
-@@page
-@@vskip 0pt plus 1filll
-Copyright @@copyright@{@} 1990 Free Software Foundation, Inc.
-@@end titlepage
-@end group
-@end example
-
-@subheading Part 4: `Top' Node and Master Menu
-
-@noindent
-The `Top' node contains the master menu for the Info file.@*
-Since a printed manual uses a table of contents rather than@*
-a menu, the master menu appears only in the Info file.
-
-@example
-@group
-@@node Top, First Chapter, (dir), (dir)
-@@comment node-name, next, previous, up
-@end group
-@end example
-
-@example
-@group
-@@menu
-* First Chapter:: The first chapter is the
- only chapter in this sample.
-* Concept Index:: This index has two entries.
-@@end menu
-@end group
-@end example
-
-@subheading Part 5: The Body of the Document
-
-@noindent
-The body segment contains all the text of the document, but not the
-indices or table of contents. This example illustrates a node and a
-chapter containing an enumerated list.@refill
-
-@example
-@group
-@@node First Chapter, Concept Index, Top, Top
-@@comment node-name, next, previous, up
-@@chapter First Chapter
-@@cindex Sample index entry
-@end group
-
-@group
-This is the contents of the first chapter.
-@@cindex Another sample index entry
-@end group
-
-@group
-Here is a numbered list.
-
-@@enumerate
-@@item
-This is the first item.
-
-@@item
-This is the second item.
-@@end enumerate
-@end group
-
-@group
-The @@code@{makeinfo@} and @@code@{texinfo-format-buffer@}
-commands transform a Texinfo file such as this into
-an Info file; and @@TeX@{@} typesets it for a printed
-manual.
-@end group
-@end example
-
-@subheading Part 6: The End of the Document
-
-@noindent
-The end segment contains commands both for generating an index in a node
-and unnumbered chapter of its own and for generating the table of
-contents; and it contains the @code{@@bye} command that marks the end of
-the document.@refill
-
-@example
-@group
-@@node Concept Index, , First Chapter, Top
-@@comment node-name, next, previous, up
-@@unnumbered Concept Index
-@end group
-
-@group
-@@printindex cp
-
-@@contents
-@@bye
-@end group
-@end example
-
-@subheading The Results
-
-Here is what the contents of the first chapter of the sample look like:
-
-@sp 1
-@need 700
-@quotation
-This is the contents of the first chapter.
-
-Here is a numbered list.
-
-@enumerate
-@item
-This is the first item.
-
-@item
-This is the second item.
-@end enumerate
-
-The @code{makeinfo} and @code{texinfo-format-buffer}
-commands transform a Texinfo file such as this into
-an Info file; and @TeX{} typesets it for a printed
-manual.
-@end quotation
-
-@node Acknowledgements, , Short Sample, Overview
-@comment node-name, next, previous, up
-@section Acknowledgements
-
-Richard M.@: Stallman wrote Edition 1.0 of this manual.
-@w{Robert J.@: Chassell} revised and extended it,
-starting with Edition 1.1.
-
-Our thanks go out to all who helped improve this work, particularly to
-@w{Francois Pinard} and @w{David D.@: Zuhn}, who tirelessly recorded
-and reported mistakes and obscurities; our special thanks go to
-@w{Melissa Weisshaus} for her frequent and often tedious reviews of
-nearly similar editions. Our mistakes are our own.
-
-@c ignore until mailing lists set up
-@ignore
-Please send suggestions and corrections to:
-
-@example
-@group
-@r{Internet address:}
- bug-gnu-texinfo@@prep.ai.mit.edu
-
-@r{UUCP path:}
- mit-eddie!prep.ai.mit.edu!bug-gnu-texinfo
-@end group
-@end example
-
-@noindent
-Please include the manual's edition number in your messages.
-@end ignore
-
-@node Texinfo Mode, Beginning a File, Overview, Top
-@comment node-name, next, previous, up
-@chapter Using Texinfo Mode
-@cindex Texinfo mode
-@cindex Mode, using Texinfo
-@cindex GNU Emacs
-@cindex Emacs
-
-You may edit a Texinfo file with any text editor you choose. A Texinfo
-file is no different from any other @sc{ascii} file. However, GNU Emacs
-comes with a special mode, called Texinfo
-mode, that provides Emacs commands and tools to help ease your work.@refill
-
-This chapter describes features of GNU Emacs' Texinfo mode but not any
-features of the Texinfo formatting language. If you are reading this
-manual straight through from the beginning, you may want to skim through
-this chapter briefly and come back to it after reading succeeding
-chapters which describe the Texinfo formatting language in
-detail.@refill
-
-@menu
-* Texinfo Mode Overview:: How Texinfo mode can help you.
-* Emacs Editing:: Texinfo mode adds to GNU Emacs' general
- purpose editing features.
-* Inserting:: How to insert frequently used @@-commands.
-* Showing the Structure:: How to show the structure of a file.
-* Updating Nodes and Menus:: How to update or create new nodes and menus.
-* Info Formatting:: How to format for Info.
-* Printing:: How to format and print part or all of a file.
-* Texinfo Mode Summary:: Summary of all the Texinfo mode commands.
-@end menu
-
-@node Texinfo Mode Overview, Emacs Editing, , Texinfo Mode
-@ifinfo
-@heading Texinfo Mode Overview
-@end ifinfo
-
-Texinfo mode provides special features for working with Texinfo
-files:@refill
-
-@itemize @bullet
-@item
-Insert frequently used @@commands. @refill
-
-@item
-Automatically create @code{@@node} lines.
-
-@item
-Show the structure of a Texinfo source file.@refill
-
-@item
-Automatically create or update the `Next',@*
-`Previous', and `Up' pointers of a node.
-
-@item
-Automatically create or update menus.@refill
-
-@item
-Automatically create a master menu.@refill
-
-@item
-Format a part or all of a file for Info.@refill
-
-@item
-Typeset and print part or all of a file.@refill
-@end itemize
-
-Perhaps the two most helpful features are those for inserting frequently
-used @@-commands and for creating node pointers and menus.@refill
-
-@node Emacs Editing, Inserting, Texinfo Mode Overview, Texinfo Mode
-@section The Usual GNU Emacs Editing Commands
-
-In most cases, the usual Text mode commands work the same in Texinfo
-mode as they do in Text mode. Texinfo mode adds new editing commands
-and tools to GNU Emacs' general purpose editing features. The major
-difference concerns filling. In Texinfo mode, the paragraph
-separation variable and syntax table are redefined so that Texinfo
-commands that should be on lines of their own are not inadvertently
-included in paragraphs. Thus, the @kbd{M-q} (@code{fill-paragraph})
-command will refill a paragraph but not mix an indexing command on a
-line adjacent to it into the paragraph.@refill
-
-In addition, Texinfo mode sets the @code{page-delimiter} variable to
-the value of @code{texinfo-chapter-level-regexp}; by default, this is
-a regular expression matching the commands for chapters and their
-equivalents, such as appendices. With this value for the page
-delimiter, you can jump from chapter title to chapter title with the
-@kbd{C-x ]} (@code{forward-page}) and @kbd{C-x [}
-(@code{backward-page}) commands and narrow to a chapter with the
-@kbd{C-x p} (@code{narrow-to-page}) command. (@xref{Pages, , ,emacs,
-The GNU Emacs Manual}, for details about the page commands.)@refill
-
-You may name a Texinfo file however you wish, but the convention is to
-end a Texinfo file name with one of the three extensions
-@file{.texinfo}, @file{.texi}, or @file{.tex}. A longer extension is
-preferred, since it is explicit, but a shorter extension may be
-necessary for operating systems that limit the length of file names.
-GNU Emacs automatically enters Texinfo mode when you visit a file with
-a @file{.texinfo} or @file{.texi}
-extension. Also, Emacs switches to Texinfo mode
-when you visit a
-file that has @samp{-*-texinfo-*-} in its first line. If ever you are
-in another mode and wish to switch to Texinfo mode, type @code{M-x
-texinfo-mode}.@refill
-
-Like all other Emacs features, you can customize or enhance Texinfo
-mode as you wish. In particular, the keybindings are very easy to
-change. The keybindings described here are the default or standard
-ones.@refill
-
-@node Inserting, Showing the Structure, Emacs Editing, Texinfo Mode
-@comment node-name, next, previous, up
-@section Inserting Frequently Used Commands
-@cindex Inserting frequently used commands
-@cindex Frequently used commands, inserting
-@cindex Commands, inserting them
-
-Texinfo mode provides commands to insert various frequently used
-@@-commands into the buffer. You can use these commands to save
-keystrokes.@refill
-
-The insert commands are invoked by typing @kbd{C-c} twice and then the
-first letter of the @@-command:@refill
-
-@table @kbd
-@item C-c C-c c
-@itemx M-x texinfo-insert-@@code
-@findex texinfo-insert-@@code
-Insert @code{@@code@{@}} and put the
-cursor between the braces.@refill
-
-@item C-c C-c d
-@itemx M-x texinfo-insert-@@dfn
-@findex texinfo-insert-@@dfn
-Insert @code{@@dfn@{@}} and put the
-cursor between the braces.@refill
-
-@item C-c C-c e
-@itemx M-x texinfo-insert-@@end
-@findex texinfo-insert-@@end
-Insert @code{@@end} and attempt to insert the correct following word,
-such as @samp{example} or @samp{table}. (This command does not handle
-nested lists correctly, but inserts the word appropriate to the
-immediately preceding list.)@refill
-
-@item C-c C-c i
-@itemx M-x texinfo-insert-@@item
-@findex texinfo-insert-@@item
-Insert @code{@@item} and put the
-cursor at the beginning of the next line.@refill
-
-@item C-c C-c k
-@itemx M-x texinfo-insert-@@kbd
-@findex texinfo-insert-@@kbd
-Insert @code{@@kbd@{@}} and put the
-cursor between the braces.@refill
-
-@item C-c C-c n
-@itemx M-x texinfo-insert-@@node
-@findex texinfo-insert-@@node
-Insert @code{@@node} and a comment line
-listing the sequence for the `Next',
-`Previous', and `Up' nodes.
-Leave point after the @code{@@node}.@refill
-
-@item C-c C-c o
-@itemx M-x texinfo-insert-@@noindent
-@findex texinfo-insert-@@noindent
-Insert @code{@@noindent} and put the
-cursor at the beginning of the next line.@refill
-
-@item C-c C-c s
-@itemx M-x texinfo-insert-@@samp
-@findex texinfo-insert-@@samp
-Insert @code{@@samp@{@}} and put the
-cursor between the braces.@refill
-
-@item C-c C-c t
-@itemx M-x texinfo-insert-@@table
-@findex texinfo-insert-@@table
-Insert @code{@@table} followed by a @key{SPC}
-and leave the cursor after the @key{SPC}.@refill
-
-@item C-c C-c v
-@itemx M-x texinfo-insert-@@var
-@findex texinfo-insert-@@var
-Insert @code{@@var@{@}} and put the
-cursor between the braces.@refill
-
-@item C-c C-c x
-@itemx M-x texinfo-insert-@@example
-@findex texinfo-insert-@@example
-Insert @code{@@example} and put the
-cursor at the beginning of the next line.@refill
-
-@c M-@{ was the binding for texinfo-insert-braces;
-@c in Emacs 19, backward-paragraph will take this binding.
-@item C-c C-c @{
-@itemx M-x texinfo-insert-braces
-@findex texinfo-insert-braces
-Insert @code{@{@}} and put the cursor between the braces.@refill
-
-@item C-c C-c @}
-@itemx C-c C-c ]
-@itemx M-x up-list
-@findex up-list
-Move from between a pair of braces forward past the closing brace.
-Typing @kbd{C-c C-c ]} is easier than typing @kbd{C-c C-c @}}, which
-is, however, more mnemonic; hence the two keybindings. (Also, you can
-move out from between braces by typing @kbd{C-f}.)@refill
-@end table
-
-To put a command such as @w{@code{@@code@{@dots{}@}}} around an
-@emph{existing} word, position the cursor in front of the word and type
-@kbd{C-u 1 C-c C-c c}. This makes it easy to edit existing plain text.
-The value of the prefix argument tells Emacs how many words following
-point to include between braces---1 for one word, 2 for two words, and
-so on. Use a negative argument to enclose the previous word or words.
-If you do not specify a prefix argument, Emacs inserts the @@-command
-string and positions the cursor between the braces. This feature works
-only for those @@-commands that operate on a word or words within one
-line, such as @code{@@kbd} and @code{@@var}.@refill
-
-This set of insert commands was created after analyzing the frequency
-with which different @@-commands are used in the @cite{GNU Emacs
-Manual} and the @cite{GDB Manual}. If you wish to add your own insert
-commands, you can bind a keyboard macro to a key, use abbreviations,
-or extend the code in @file{texinfo.el}.@refill
-
-@findex texinfo-start-menu-description
-@cindex Menu description, start
-@cindex Description for menu, start
-@kbd{C-c C-c C-d} (@code{texinfo-start-menu-description}) is an insert
-command that works differently from the other insert commands. It
-inserts a node's section or chapter title in the space for the
-description in a menu entry line. (A menu entry has three parts, the
-entry name, the node name, and the description. Only the node name is
-required, but a description helps explain what the node is about.
-@xref{Menu Parts, , The Parts of a Menu}.)@refill
-
-To use @code{texinfo-start-menu-description}, position point in a menu
-entry line and type @kbd{C-c C-c C-d}. The command looks for and copies
-the title that goes with the node name, and inserts the title as a
-description; it positions point at beginning of the inserted text so you
-can edit it. The function does not insert the title if the menu entry
-line already contains a description.@refill
-
-This command is only an aid to writing descriptions; it does not do the
-whole job. You must edit the inserted text since a title tends to use
-the same words as a node name but a useful description uses different
-words.@refill
-
-@node Showing the Structure, Updating Nodes and Menus, Inserting, Texinfo Mode
-@comment node-name, next, previous, up
-@section Showing the Section Structure of a File
-@cindex Showing the section structure of a file
-@cindex Section structure of a file, showing it
-@cindex Structure of a file, showing it
-@cindex Outline of file structure, showing it
-@cindex Contents-like outline of file structure
-@cindex File section structure, showing it
-@cindex Texinfo file section structure, showing it
-
-You can show the section structure of a Texinfo file by using the
-@kbd{C-c C-s} command (@code{texinfo-show-structure}). This command
-shows the section structure of a Texinfo file by listing the lines
-that begin with the @@-commands for @code{@@chapter},
-@code{@@section}, and the like. It constructs what amounts
-to a table of contents. These lines are displayed in another buffer
-called the @samp{*Occur*} buffer. In that buffer, you can position
-the cursor over one of the lines and use the @kbd{C-c C-c} command
-(@code{occur-mode-goto-occurrence}), to jump to the corresponding spot
-in the Texinfo file.@refill
-
-@table @kbd
-@item C-c C-s
-@itemx M-x texinfo-show-structure
-@findex texinfo-show-structure
-Show the @code{@@chapter}, @code{@@section}, and such lines of a
-Texinfo file.@refill
-
-@item C-c C-c
-@itemx M-x occur-mode-goto-occurrence
-@findex occur-mode-goto-occurrence
-Go to the line in the Texinfo file corresponding to the line under the
-cursor in the @file{*Occur*} buffer.@refill
-@end table
-
-If you call @code{texinfo-show-structure} with a prefix argument by
-typing @w{@kbd{C-u C-c C-s}}, it will list not only those lines with the
-@@-commands for @code{@@chapter}, @code{@@section}, and the like,
-but also the @code{@@node} lines. (This is how the
-@code{texinfo-show-structure} command worked without an argument in
-the first version of Texinfo. It was changed because @code{@@node}
-lines clutter up the @samp{*Occur*} buffer and are usually not
-needed.) You can use @code{texinfo-show-structure} with a prefix
-argument to check whether the `Next', `Previous', and `Up' pointers of
-an @code{@@node} line are correct.@refill
-
-Often, when you are working on a manual, you will be interested only
-in the structure of the current chapter. In this case, you can mark
-off the region of the buffer that you are interested in with the
-@kbd{C-x n} (@code{narrow-to-region}) command and
-@code{texinfo-show-structure} will work on only that region. To see
-the whole buffer again, use @w{@kbd{C-x w}} (@code{widen}).
-(@xref{Narrowing, , , emacs, The GNU Emacs Manual}, for more
-information about the narrowing commands.)@refill
-
-@vindex page-delimiter
-@cindex Page delimiter in Texinfo mode
-In addition to providing the @code{texinfo-show-structure} command,
-Texinfo mode sets the value of the page delimiter variable to match
-the chapter-level @@-commands. This enables you to use the @kbd{C-x
-]} (@code{forward-page}) and @kbd{C-x [} (@code{backward-page})
-commands to move forward and backward by chapter, and to use the
-@kbd{C-x p} (@code{narrow-to-page}) command to narrow to a chapter.
-@xref{Pages, , , emacs, The GNU Emacs Manual}, for more information
-about the page commands.@refill
-
-@node Updating Nodes and Menus, Info Formatting, Showing the Structure, Texinfo Mode
-@comment node-name, next, previous, up
-@section Updating Nodes and Menus
-@cindex Updating nodes and menus
-@cindex Create nodes, menus automatically
-@cindex Insert nodes, menus automatically
-@cindex Automatically insert nodes, menus
-
-Texinfo mode provides commands for automatically creating or updating
-menus and node pointers. The commands are called ``update'' commands
-because their most frequent use is for updating a Texinfo file after
-you have worked on it; but you can use them to insert the `Next',
-`Previous', and `Up' pointers into an @code{@@node} line that has none and to
-create menus in a file that has none.@refill
-
-If you do not use the updating commands, you need to write menus and
-node pointers by hand, which is a tedious task.@refill
-
-@menu
-* Updating Commands:: Five major updating commands.
-* Updating Requirements:: How to structure a Texinfo file for
- using the updating command.
-* Other Updating Commands:: How to indent descriptions, insert
- missing nodes lines, and update
- nodes in sequence.
-@end menu
-
-@node Updating Commands, Updating Requirements, , Updating Nodes and Menus
-@ifinfo
-@subheading The Updating Commands
-@end ifinfo
-
-You can use the updating commands@refill
-
-@itemize @bullet
-@item
-to insert or update the `Next', `Previous', and `Up' pointers of a
-node,@refill
-
-@item
-to insert or update the menu for a section, and@refill
-
-@item
-to create a master menu for a Texinfo source file.@refill
-@end itemize
-
-You can also use the commands to update all the nodes and menus in a
-region or in a whole Texinfo file.@refill
-
-The updating commands work only with conventional Texinfo files, which
-are structured hierarchically like books. In such files, a structuring
-command line must follow closely after each @code{@@node} line, except
-for the `Top' @code{@@node} line. (A @dfn{structuring command line} is
-a line beginning with @code{@@chapter}, @code{@@section}, or other
-similar command.)
-
-You can write the structuring command line on the line that follows
-immediately after an @code{@@node} line or else on the line that
-follows after a single @code{@@comment} line or a single
-@code{@@ifinfo} line. You cannot interpose more than one line between
-the @code{@@node} line and the structuring command line; and you may
-interpose only an @code{@@comment} line or an @code{@@ifinfo} line.
-
-Commands which work on a whole buffer require that the `Top' node be
-followed by a node with an @code{@@chapter} or equivalent-level command.
-Note that the menu updating commands will not create a main or master
-menu for a Texinfo file that has only @code{@@chapter}-level nodes! The
-menu updating commands only create menus @emph{within} nodes for lower level
-nodes. To create a menu of chapters, you must provide a `Top'
-node.@refill
-
-The menu updating commands remove menu entries that refer to other Info
-files since they do not refer to nodes within the current buffer. This
-is a deficiency. Rather than use menu entries, you can use cross
-references to refer to other Info files. None of the updating commands
-affect cross references.@refill
-
-Texinfo mode has five updating commands that are used most often: two
-are for updating the node pointers or menu of a single node (or a
-region); two are for updating every node pointer and menu in a file;
-and one, the @code{texinfo-master-menu} command, is for creating a
-master menu for a complete file, and optionally, for updating every
-node and menu in the whole Texinfo file.@refill
-
-The @code{texinfo-master-menu} command is the primary command:@refill
-
-@table @kbd
-@item C-c C-u m
-@itemx M-x texinfo-master-menu
-@findex texinfo-master-menu
-Create or update a master menu that includes all the other menus
-(incorporating the descriptions from pre-existing menus, if
-any).@refill
-
-With an argument (prefix argument, @kbd{C-u,} if interactive), first create or
-update all the nodes and all the regular menus in the buffer before
-constructing the master menu. (@xref{The Top Node, , The Top Node and
-Master Menu}, for more about a master menu.)@refill
-
-For @code{texinfo-master-menu} to work, the Texinfo file must have a
-`Top' node and at least one subsequent node.@refill
-
-After extensively editing a Texinfo file, you can type the following:
-
-@example
-C-u M-x texinfo-master-menu
-@exdent or
-C-u C-c C-u m
-@end example
-
-@noindent
-This updates all the nodes and menus completely and all at once.@refill
-@end table
-
-The other major updating commands do smaller jobs and are designed for
-the person who updates nodes and menus as he or she writes a Texinfo
-file.@refill
-
-@need 1000
-The commands are:@refill
-
-@table @kbd
-@item C-c C-u C-n
-@itemx M-x texinfo-update-node
-@findex texinfo-update-node
-Insert the `Next', `Previous', and `Up' pointers for the node that point is
-within (i.e., for the @code{@@node} line preceding point). If the
-@code{@@node} line has pre-existing `Next', `Previous', or `Up'
-pointers in it, the old pointers are removed and new ones inserted.
-With an argument (prefix argument, @kbd{C-u}, if interactive), this command
-updates all @code{@@node} lines in the region (which is the text
-between point and mark).@refill
-
-@item C-c C-u C-m
-@itemx M-x texinfo-make-menu
-@findex texinfo-make-menu
-Create or update the menu in the node that point is within.
-With an argument (@kbd{C-u} as prefix argument, if
-interactive), the command makes or updates menus for the
-nodes which are either within or a part of the
-region.@refill
-
-Whenever @code{texinfo-make-menu} updates an existing menu, the
-descriptions from that menu are incorporated into the new menu. This
-is done by copying descriptions from the existing menu to the entries
-in the new menu that have the same node names. If the node names are
-different, the descriptions are not copied to the new menu.@refill
-
-@item C-c C-u C-e
-@itemx M-x texinfo-every-node-update
-@findex texinfo-every-node-update
-Insert or update the `Next', `Previous', and `Up' pointers for every
-node in the buffer.@refill
-
-@item C-c C-u C-a
-@itemx M-x texinfo-all-menus-update
-@findex texinfo-all-menus-update
-Create or update all the menus in the buffer. With an argument
-(@kbd{C-u} as prefix argument, if interactive), first insert
-or update all the node
-pointers before working on the menus.@refill
-
-If a master menu exists, the @code{texinfo-all-menus-update} command
-updates it; but the command does not create a new master menu if none
-already exists. (Use the @code{texinfo-master-menu} command for
-that.)@refill
-
-When working on a document that does not merit a master menu, you can
-type the following:
-
-@example
-C-u C-c C-u C-a
-@exdent or
-C-u M-x texinfo-all-menus-update
-@end example
-
-@noindent
-This updates all the nodes and menus.@refill
-@end table
-
-The @code{texinfo-column-for-description} variable specifies the
-column to which menu descriptions are indented. By default, the value
-is 32 although it is often useful to reduce it to as low as 24. You
-can set the variable with the @kbd{M-x edit-options} command
-(@pxref{Edit Options, , Editing Variable Values, emacs, The GNU Emacs
-Manual}) or with the @kbd{M-x set-variable} command (@pxref{Examining,
-, Examining and Setting Variables, emacs, The GNU Emacs
-Manual}).@refill
-
-Also, the @code{texinfo-indent-menu-description} command may be used to
-indent existing menu descriptions to a specified column. Finally, if
-you wish, you can use the @code{texinfo-insert-node-lines} command to
-insert missing @code{@@node} lines into a file. (@xref{Other Updating
-Commands}, for more information.)@refill
-
-@node Updating Requirements, Other Updating Commands, Updating Commands, Updating Nodes and Menus
-@comment node-name, next, previous, up
-@subsection Updating Requirements
-@cindex Updating requirements
-@cindex Requirements for updating commands
-
-To use the updating commands, you must organize the Texinfo file
-hierarchically with chapters, sections, subsections, and the like.
-When you construct the hierarchy of the manual, do not `jump down'
-more than one level at a time: you can follow the `Top' node with a
-chapter, but not with a section; you can follow a chapter with a
-section, but not with a subsection. However, you may `jump up' any
-number of levels at one time---for example, from a subsection to a
-chapter.@refill
-
-Each @code{@@node} line, with the exception of the line for the `Top'
-node, must be followed by a line with a structuring command such as
-@code{@@chapter}, @code{@@section}, or
-@code{@@unnumberedsubsec}.@refill
-
-Each @code{@@node} line/structuring-command line combination
-must look either like this:@refill
-
-@example
-@group
-@@node Comments, Minimum, Conventions, Overview
-@@comment node-name, next, previous, up
-@@section Comments
-@end group
-@end example
-
-or like this (without the @code{@@comment} line):
-
-@example
-@group
-@@node Comments, Minimum, Conventions, Overview
-@@section Comments
-@end group
-@end example
-
-@noindent
-In this example, `Comments' is the name of both the node and the
-section. The next node is called `Minimum' and the previous node is
-called `Conventions'. The `Comments' section is within the `Overview'
-node, which is specified by the `Up' pointer. (Instead of an
-@code{@@comment} line, you can write an @code{@@ifinfo} line.)@refill
-
-If a file has a `Top' node, it must be called @samp{top} or @samp{Top}
-and be the first node in the file.@refill
-
-The menu updating commands create a menu of sections within a chapter,
-a menu of subsections within a section, and so on. This means that
-you must have a `Top' node if you want a menu of chapters.@refill
-
-Incidentally, the @code{makeinfo} command will create an Info file for
-a hierarchically organized Texinfo file that lacks `Next', `Previous'
-and `Up' pointers. Thus, if you can be sure that your Texinfo file
-will be formatted with @code{makeinfo}, you have no need for the
-`update node' commands. (@xref{Create an Info File, , Creating an
-Info File}, for more information about @code{makeinfo}.) However,
-both @code{makeinfo} and the @code{texinfo-format-@dots{}} commands
-require that you insert menus in the file.@refill
-
-@node Other Updating Commands, , Updating Requirements, Updating Nodes and Menus
-@comment node-name, next, previous, up
-@subsection Other Updating Commands
-
-In addition to the five major updating commands, Texinfo mode
-possesses several less frequently used updating commands:@refill
-
-@table @kbd
-@item M-x texinfo-insert-node-lines
-@findex texinfo-insert-node-lines
-Insert @code{@@node} lines before the @code{@@chapter},
-@code{@@section}, and other sectioning commands wherever they are
-missing throughout a region in a Texinfo file.@refill
-
-With an argument (@kbd{C-u} as prefix argument, if interactive), the
-@code{texinfo-insert-node-lines} command not only inserts
-@code{@@node} lines but also inserts the chapter or section titles as
-the names of the corresponding nodes. In addition, it inserts the
-titles as node names in pre-existing @code{@@node} lines that lack
-names. Since node names should be more concise than section or
-chapter titles, you must manually edit node names so inserted.@refill
-
-For example, the following marks a whole buffer as a region and inserts
-@code{@@node} lines and titles throughout:@refill
-
-@example
-C-x h C-u M-x texinfo-insert-node-lines
-@end example
-
-(Note that this command inserts titles as node names in @code{@@node}
-lines; the @code{texinfo-start-menu-description} command
-(@pxref{Inserting, Inserting Frequently Used Commands}) inserts titles
-as descriptions in menu entries, a different action. However, in both
-cases, you need to edit the inserted text.)@refill
-
-@item M-x texinfo-multiple-files-update
-@findex texinfo-multiple-files-update @r{(in brief)}
-Update nodes and menus in a document built from several separate files.
-With @kbd{C-u} as a prefix argument, create and insert a master menu in
-the outer file. With a numeric prefix argument, such as @kbd{C-u 2}, first
-update all the menus and all the `Next', `Previous', and `Up' pointers
-of all the included files before creating and inserting a master menu in
-the outer file. The @code{texinfo-multiple-files-update} command is
-described in the appendix on @code{@@include} files.
-@ifinfo
-@xref{texinfo-multiple-files-update}.@refill
-@end ifinfo
-@iftex
-@xref{texinfo-multiple-files-update, ,
-@code{texinfo-multiple-files-update}}.@refill
-@end iftex
-
-@item M-x texinfo-indent-menu-description
-@findex texinfo-indent-menu-description
-Indent every description in the menu following point to the specified
-column. You can use this command to give yourself more space for
-descriptions. With an argument (@kbd{C-u} as prefix argument, if
-interactive), the @code{texinfo-indent-menu-description} command indents
-every description in every menu in the region. However, this command
-does not indent the second and subsequent lines of a multi-line
-description.@refill
-
-@item M-x texinfo-sequential-node-update
-@findex texinfo-sequential-node-update
-Insert the names of the nodes immediately following and preceding the
-current node as the `Next' or `Previous' pointers regardless of those
-nodes' hierarchical level. This means that the `Next' node of a
-subsection may well be the next chapter. Sequentially ordered nodes are
-useful for novels and other documents that you read through
-sequentially. (However, in Info, the @code{g* @key{RET}} command lets
-you look through the file sequentially, so sequentially ordered nodes
-are not strictly necessary.) With an argument (prefix argument, if
-interactive), the @code{texinfo-sequential-node-update} command
-sequentially updates all the nodes in the region.@refill
-@end table
-
-@node Info Formatting, Printing, Updating Nodes and Menus, Texinfo Mode
-@comment node-name, next, previous, up
-@section Formatting for Info
-@cindex Formatting for Info
-@cindex Running an Info formatter
-@cindex Info formatting
-
-Texinfo mode provides several commands for formatting part or all of a
-Texinfo file for Info. Often, when you are writing a document, you
-want to format only part of a file---that is, a region.@refill
-
-You can use either the @code{texinfo-format-region} or the
-@code{makeinfo-region} command to format a region:@refill
-
-@table @kbd
-@findex texinfo-format-region
-@item C-c C-e C-r
-@itemx M-x texinfo-format-region
-@itemx C-c C-m C-r
-@itemx M-x makeinfo-region
-Format the current region for Info.@refill
-@end table
-
-You can use either the @code{texinfo-format-buffer} or the
-@code{makeinfo-buffer} command to format a whole buffer:@refill
-
-@table @kbd
-@findex texinfo-format-buffer
-@item C-c C-e C-b
-@itemx M-x texinfo-format-buffer
-@itemx C-c C-m C-b
-@itemx M-x makeinfo-buffer
-Format the current buffer for Info.@refill
-@end table
-
-@need 1000
-For example, after writing a Texinfo file, you can type the following:
-
-@example
-C-u C-c C-u m
-@exdent or
-C-u M-x texinfo-master-menu
-@end example
-
-@noindent
-This updates all the nodes and menus. Then type the following to create
-an Info file:
-
-@example
-C-c C-m C-b
-@exdent or
-M-x makeinfo-buffer
-@end example
-
-For the Info formatting commands to work, the file @emph{must} include
-a line that has @code{@@setfilename} in its header.@refill
-
-Not all systems support the @code{makeinfo}-based formatting commands.@refill
-
-@xref{Create an Info File}, for details about Info formatting.@refill
-
-@node Printing, Texinfo Mode Summary, Info Formatting, Texinfo Mode
-@comment node-name, next, previous, up
-@section Formatting and Printing
-@cindex Formatting for printing
-@cindex Printing a region or buffer
-@cindex Region formatting and printing
-@cindex Buffer formatting and printing
-@cindex Part of file formatting and printing
-
-Typesetting and printing a Texinfo file is a multi-step process in which
-you first create a file for printing (called a @sc{dvi} file), and then
-print the file. Optionally, you may also create indices. To do this,
-you must run the @code{texindex} command after first running the
-@code{tex} typesetting command; and then you must run the @code{tex}
-command again. @refill
-
-Often, when you are writing a document, you want to typeset and print
-only part of a file to see what it will look like. You can use the
-@code{texinfo-tex-region} and related commands for this purpose. Use
-the @code{texinfo-tex-buffer} command to format all of a
-buffer.@refill
-
-@table @kbd
-@item C-c C-t C-r
-@itemx M-x texinfo-tex-region
-@findex texinfo-tex-region
-Run @TeX{} on the region.@refill
-
-@item C-c C-t C-b
-@itemx M-x texinfo-tex-buffer
-@findex texinfo-tex-buffer
-Run @TeX{} on the buffer.@refill
-
-@item C-c C-t C-i
-@itemx M-x texinfo-texindex
-Run @code{texindex} to sort the indices of a Texinfo file formatted with
-@code{texinfo-tex-region} or @code{texinfo-tex-buffer}. You must run
-the @code{tex} command a second time after sorting the raw index
-files.@refill
-
-@item C-c C-t C-p
-@itemx M-x texinfo-tex-print
-@findex texinfo-tex-print
-Print the file (or the part of the file) previously formatted with
-@code{texinfo-tex-buffer} or @code{texinfo-tex-region}.@refill
-@end table
-
-For @code{texinfo-tex-region} or @code{texinfo-tex-buffer} to work, the
-file @emph{must} start with a @samp{\input texinfo} line and must
-include an @code{@@settitle} line. The file must end with @code{@@bye}
-on a line by itself. (When you use @code{texinfo-tex-region}, you must
-surround the @code{@@settitle} line with start-of-header and
-end-of-header lines.)@refill
-
-@xref{Format/Print Hardcopy}, for a description of the other @TeX{} related
-commands, such as @code{tex-show-print-queue}.@refill
-
-@node Texinfo Mode Summary, , Printing, Texinfo Mode
-@comment node-name, next, previous, up
-@section Texinfo Mode Summary
-
-In Texinfo mode, each set of commands has default keybindings that
-begin with the same keys. All the commands that are custom-created
-for Texinfo mode begin with @kbd{C-c}. The keys are somewhat
-mnemonic.@refill
-
-@subheading Insert Commands
-
-The insert commands are invoked by typing @kbd{C-c} twice and then the
-first letter of the @@-command to be inserted. (It might make more
-sense mnemonically to use @kbd{C-c C-i}, for `custom insert', but
-@kbd{C-c C-c} is quick to type.)@refill
-
-@example
-C-c C-c c @r{Insert} @samp{@@code}.
-C-c C-c d @r{Insert} @samp{@@dfn}.
-C-c C-c e @r{Insert} @samp{@@end}.
-C-c C-c i @r{Insert} @samp{@@item}.
-C-c C-c n @r{Insert} @samp{@@node}.
-C-c C-c s @r{Insert} @samp{@@samp}.
-C-c C-c v @r{Insert} @samp{@@var}.
-C-c C-c @{ @r{Insert braces.}
-C-c C-c ]
-C-c C-c @} @r{Move out of enclosing braces.}
-
-@group
-C-c C-c C-d @r{Insert a node's section title}
- @r{in the space for the description}
- @r{in a menu entry line.}
-@end group
-@end example
-
-@subheading Show Structure
-
-The @code{texinfo-show-structure} command is often used within a
-narrowed region.@refill
-
-@example
-C-c C-s @r{List all the headings.}
-@end example
-
-@subheading The Master Update Command
-
-The @code{texinfo-master-menu} command creates a master menu; and can
-be used to update every node and menu in a file as well.@refill
-
-@example
-@group
-C-c C-u m
-M-x texinfo-master-menu
- @r{Create or update a master menu.}
-@end group
-
-@group
-C-u C-c C-u m @r{With @kbd{C-u} as a prefix argument, first}
- @r{create or update all nodes and regular}
- @r{menus, and then create a master menu.}
-@end group
-@end example
-
-@subheading Update Pointers
-
-@c !!! added verbiage to prevent overfull hbox --bob 26 Mar 93
-The update pointer commands are invoked by typing @kbd{C-c C-u} and
-then either typing @kbd{C-n} for @code{texinfo-update-node} or typing
-@kbd{C-e} for @code{texinfo-every-node-update}.@refill
-
-@example
-C-c C-u C-n @r{Update a node.}
-C-c C-u C-e @r{Update every node in the buffer.}
-@end example
-
-@subheading Update Menus
-
-Invoke the update menu commands by typing @kbd{C-c C-u}
-and then either @kbd{C-m} for @code{texinfo-make-menu} or
-@kbd{C-a} for @code{texinfo-all-menus-update}. To update
-both nodes and menus at the same time, precede @kbd{C-c C-u
-C-a} with @kbd{C-u}.@refill
-
-@example
-C-c C-u C-m @r{Make or update a menu.}
-
-@group
-C-c C-u C-a @r{Make or update all}
- @r{menus in a buffer.}
-@end group
-
-@group
-C-u C-c C-u C-a @r{With @kbd{C-u} as a prefix argument,}
- @r{first create or update all nodes and}
- @r{then create or update all menus.}
-@end group
-@end example
-
-@subheading Format for Info
-
-The Info formatting commands that are written in Emacs Lisp are
-invoked by typing @kbd{C-c C-e} and then either @kbd{C-r} for a region
-or @kbd{C-b} for the whole buffer.@refill
-
-The Info formatting commands that are written in C and based on the
-@code{makeinfo} program are invoked by typing @kbd{C-c C-m} and then
-either @kbd{C-r} for a region or @kbd{C-b} for the whole buffer.@refill
-
-@need 800
-@noindent
-Use the @code{texinfo-format@dots{}} commands:
-
-@example
-@group
-C-c C-e C-r @r{Format the region.}
-C-c C-e C-b @r{Format the buffer.}
-@end group
-@end example
-
-@need 750
-@noindent
-Use @code{makeinfo}:
-
-@example
-C-c C-m C-r @r{Format the region.}
-C-c C-m C-b @r{Format the buffer.}
-C-c C-m C-l @r{Recenter the @code{makeinfo} output buffer.}
-C-c C-m C-k @r{Kill the @code{makeinfo} formatting job.}
-@end example
-
-@subheading Typeset and Print
-
-The @TeX{} typesetting and printing commands are invoked by typing
-@kbd{C-c C-t} and then another control command: @kbd{C-r} for
-@code{texinfo-tex-region}, @kbd{C-b} for @code{texinfo-tex-buffer},
-and so on.@refill
-
-@example
-C-c C-t C-r @r{Run @TeX{} on the region.}
-C-c C-t C-b @r{Run @TeX{} on the buffer.}
-C-c C-t C-i @r{Run} @code{texindex}.
-C-c C-t C-p @r{Print the @sc{dvi} file.}
-C-c C-t C-q @r{Show the print queue.}
-C-c C-t C-d @r{Delete a job from the print queue.}
-C-c C-t C-k @r{Kill the current @TeX{} formatting job.}
-C-c C-t C-x @r{Quit a currently stopped @TeX{} formatting job.}
-C-c C-t C-l @r{Recenter the output buffer.}
-@end example
-
-@subheading Other Updating Commands
-
-The `other updating commands' do not have standard keybindings because
-they are rarely used.
-
-@example
-@group
-M-x texinfo-insert-node-lines
- @r{Insert missing @code{@@node} lines in region.}
- @r{With @kbd{C-u} as a prefix argument,}
- @r{use section titles as node names.}
-@end group
-
-@group
-M-x texinfo-multiple-files-update
- @r{Update a multi-file document.}
- @r{With @kbd{C-u 2} as a prefix argument,}
- @r{create or update all nodes and menus}
- @r{in all included files first.}
-@end group
-
-@group
-M-x texinfo-indent-menu-description
- @r{Indent descriptions.}
-@end group
-
-@group
-M-x texinfo-sequential-node-update
- @r{Insert node pointers in strict sequence.}
-@end group
-@end example
-
-@node Beginning a File, Ending a File, Texinfo Mode, Top
-@comment node-name, next, previous, up
-@chapter Beginning a Texinfo File
-@cindex Beginning a Texinfo file
-@cindex Texinfo file beginning
-@cindex File beginning
-
-Certain pieces of information must be provided at the beginning of a
-Texinfo file, such as the name of the file and the title of the
-document.@refill
-
-@menu
-* Four Parts:: Four parts begin a Texinfo file.
-* Sample Beginning:: Here is a sample beginning for a Texinfo file.
-* Header:: The very beginning of a Texinfo file.
-* Info Summary and Permissions:: Summary and copying permissions for Info.
-* Titlepage & Copyright Page:: Creating the title and copyright pages.
-* The Top Node:: Creating the `Top' node and master menu.
-* Software Copying Permissions:: Ensure that you and others continue to
- have the right to use and share software.
-@end menu
-
-@node Four Parts, Sample Beginning, , Beginning a File
-@ifinfo
-@heading Four Parts Begin a File
-@end ifinfo
-
-Generally, the beginning of a Texinfo file has four parts:@refill
-
-@enumerate
-@item
-The header, delimited by special comment lines, that includes the
-commands for naming the Texinfo file and telling @TeX{} what
-definitions' file to use when processing the Texinfo file.@refill
-
-@item
-A short statement of what the file is about, with a copyright notice
-and copying permissions. This is enclosed in @code{@@ifinfo} and
-@code{@@end ifinfo} commands so that the formatters place it only
-in the Info file.@refill
-
-@item
-A title page and copyright page, with a copyright notice and copying
-permissions. This is enclosed between @code{@@titlepage} and
-@code{@@end titlepage} commands. The title and copyright page appear
-only in the printed @w{manual}.@refill
-
-@item
-The `Top' node that contains a menu for the whole Info file. The
-contents of this node appear only in the Info file.@refill
-@end enumerate
-
-Also, optionally, you may include the copying conditions for a program
-and a warranty disclaimer. The copying section will be followed by an
-introduction or else by the first chapter of the manual.@refill
-
-Since the copyright notice and copying permissions for the Texinfo
-document (in contrast to the copying permissions for a program) are in
-parts that appear only in the Info file or only in the printed manual,
-this information must be given twice.@refill
-
-@node Sample Beginning, Header, Four Parts, Beginning a File
-@comment node-name, next, previous, up
-@section Sample Texinfo File Beginning
-
-The following sample shows what is needed.@refill
-
-@example
-\input texinfo @@c -*-texinfo-*-
-@@c %**start of header
-@@setfilename @var{name-of-info-file}
-@@settitle @var{name-of-manual}
-@@setchapternewpage odd
-@@c %**end of header
-
-@@ifinfo
-This file documents @dots{}
-
-Copyright @var{year} @var{copyright-owner}
-
-@group
-Permission is granted to @dots{}
-@@end ifinfo
-@end group
-
-@group
-@@c This title page illustrates only one of the
-@@c two methods of forming a title page.
-@end group
-
-@group
-@@titlepage
-@@title @var{name-of-manual-when-printed}
-@@subtitle @var{subtitle-if-any}
-@@subtitle @var{second-subtitle}
-@@author @var{author}
-@end group
-
-@group
-@@c The following two commands
-@@c start the copyright page.
-@@page
-@@vskip 0pt plus 1filll
-Copyright @@copyright@{@} @var{year} @var{copyright-owner}
-@end group
-
-Published by @dots{}
-
-Permission is granted to @dots{}
-@@end titlepage
-
-@@node Top, Overview, (dir), (dir)
-
-@@ifinfo
-This document describes @dots{}
-
-This document applies to version @dots{}
-of the program named @dots{}
-@@end ifinfo
-
-@group
-@@menu
-* Copying:: Your rights and freedoms.
-* First Chapter:: Getting started @dots{}
-* Second Chapter:: @dots{}
- @dots{}
- @dots{}
-@@end menu
-@end group
-
-@group
-@@node First Chapter, Second Chapter, top, top
-@@comment node-name, next, previous, up
-@@chapter First Chapter
-@@cindex Index entry for First Chapter
-@end group
-@end example
-
-@node Header, Info Summary and Permissions, Sample Beginning, Beginning a File
-@comment node-name, next, previous, up
-@section The Texinfo File Header
-@cindex Header for Texinfo files
-@cindex Texinfo file header
-
-Texinfo files start with at least three lines that provide Info and
-@TeX{} with necessary information. These are the @code{\input
-texinfo} line, the @code{@@settitle} line, and the
-@code{@@setfilename} line. If you want to run @TeX{} on just a part
-of the Texinfo File, you must write the @code{@@settitle}
-and @code{@@setfilename} lines between start-of-header and end-of-header
-lines.@refill
-
-Thus, the beginning of a Texinfo file looks like this:
-
-@example
-@group
-\input texinfo @@c -*-texinfo-*-
-@@setfilename sample.info
-@@settitle Sample Document
-@end group
-@end example
-
-@noindent
-or else like this:
-
-@example
-@group
-\input texinfo @@c -*-texinfo-*-
-@@c %**start of header
-@@setfilename sample.info
-@@settitle Sample Document
-@@c %**end of header
-@end group
-@end example
-
-@menu
-* First Line:: The first line of a Texinfo file.
-* Start of Header:: Formatting a region requires this.
-* setfilename:: Tell Info the name of the Info file.
-* settitle:: Create a title for the printed work.
-* setchapternewpage:: Start chapters on right-hand pages.
-* paragraphindent:: An option to specify paragraph indentation.
-* End of Header:: Formatting a region requires this.
-@end menu
-
-@node First Line, Start of Header, , Header
-@comment node-name, next, previous, up
-@subsection The First Line of a Texinfo File
-@cindex First line of a Texinfo file
-@cindex Beginning line of a Texinfo file
-@cindex Header of a Texinfo file
-
-Every Texinfo file that is to be the top-level input to @TeX{} must begin
-with a line that looks like this:@refill
-
-@example
-\input texinfo @@c -*-texinfo-*-
-@end example
-
-@noindent
-This line serves two functions:
-
-@enumerate
-@item
-When the file is processed by @TeX{}, the @code{\input texinfo} command
-tells @TeX{} to load the macros needed for processing a Texinfo file.
-These are in a file called @file{texinfo.tex}, which is usually located
-in the @file{/usr/lib/tex/macros} directory. @TeX{} uses the backslash,
-@samp{\}, to mark the beginning of a command, just as Texinfo uses
-@code{@@}. The @file{texinfo.tex} file causes the switch from @samp{\}
-to @samp{@@}; before the switch occurs, @TeX{} requires @samp{\}, which
-is why it appears at the beginning of the file.@refill
-
-@item
-When the file is edited in GNU Emacs, the @samp{-*-texinfo-*-} mode
-specification tells Emacs to use Texinfo mode.@refill
-@end enumerate
-
-@node Start of Header, setfilename, First Line, Header
-@comment node-name, next, previous, up
-@subsection Start of Header
-@cindex Start of header line
-
-Write a start-of-header line on the second line of a Texinfo file.
-Follow the start-of-header line with @code{@@setfilename} and
-@code{@@settitle} lines and, optionally, with other command lines, such
-as @code{@@smallbook} or @code{@@footnotestyle}; and then by an
-end-of-header line (@pxref{End of Header}).@refill
-
-With these lines, you can format part of a Texinfo file for Info or
-typeset part for printing.@refill
-
-A start-of-header line looks like this:@refill
-
-@example
-@@c %**start of header
-@end example
-
-The odd string of characters, @samp{%**}, is to ensure that no other
-comment is accidentally taken for a start-of-header line.@refill
-
-@node setfilename, settitle, Start of Header, Header
-@comment node-name, next, previous, up
-@subsection @code{@@setfilename}
-@cindex Info file requires @code{@@setfilename}
-@findex setfilename
-
-In order to be made into an Info file, a Texinfo file must contain a line
-that looks like this:@refill
-
-@example
-@@setfilename @var{info-file-name}
-@end example
-
-Write the @code{@@setfilename} command at the beginning of a line and
-follow it on the same line by the Info file name. Do not write
-anything else on the line; anything on the line after the command is
-considered part of the file name, including a comment.@refill
-
-The @code{@@setfilename} line specifies the name of the Info file to be
-generated. This name should be different from the name of the Texinfo
-file. The convention is to write a name with a @samp{.info} extension,
-to produce an Info file name such as @file{texinfo.info}.@refill
-
-Some operating systems cannot handle long file names. You can run into
-a problem even when the file name you specify is itself short enough.
-This occurs because the Info formatters split a long Info file into
-short indirect subfiles, and name them by appending `-1', `-2', @dots{},
-`-10', `-11', and so on, to the original file name. (@xref{Tag and
-Split Files, , Tag Files and Split Files}.) The subfile name
-@file{texinfo.info-10}, for example, is too long for some systems; so
-the Info file name for this document is actually @file{texinfo} rather than
-@file{texinfo.info}.@refill
-
-The Info formatting commands ignore everything written before the
-@code{@@setfilename} line, which is why the very first line of
-the file (the @code{\input} line) does not need to be commented out.
-The @code{@@setfilename} line is ignored when you typeset a printed
-manual.@refill
-
-@node settitle, setchapternewpage, setfilename, Header
-@comment node-name, next, previous, up
-@subsection @code{@@settitle}
-@findex settitle
-
-In order to be made into a printed manual, a Texinfo file must contain
-a line that looks like this:@refill
-
-@example
-@@settitle @var{title}
-@end example
-
-Write the @code{@@settitle} command at the beginning of a line and
-follow it on the same line by the title. This tells @TeX{} the title
-to use in a header or footer. Do not write anything else on the line;
-anything on the line after the command is considered part of the
-title, including a comment.@refill
-
-Conventionally, @TeX{} formats a Texinfo file for double-sided output
-so as to print the title in the left-hand (even-numbered) page
-headings and the current chapter titles in the right-hand
-(odd-numbered) page headings. (@TeX{} learns the title of each
-chapter from each @code{@@chapter} command.) Page footers are not
-printed.@refill
-
-Even if you are printing in a single-sided style, @TeX{} looks for an
-@code{@@settitle} command line, in case you include the manual title
-in the heading. @refill
-
-The @code{@@settitle} command should precede everything that generates
-actual output in @TeX{}.@refill
-
-Although the title in the @code{@@settitle} command is usually the
-same as the title on the title page, it does not affect the title as
-it appears on the title page. Thus, the two do not need not match
-exactly; and the title in the @code{@@settitle} command can be a
-shortened or expanded version of the title as it appears on the title
-page. (@xref{titlepage, , @code{@@titlepage}}.)@refill
-
-@TeX{} prints page headings only for that text that comes after the
-@code{@@end titlepage} command in the Texinfo file, or that comes
-after an @code{@@headings} command that turns on headings.
-(@xref{headings on off, , The @code{@@headings} Command}, for more
-information.)@refill
-
-You may, if you wish, create your own, customized headings and
-footings. @xref{Headings, , Page Headings}, for a detailed discussion
-of this process.@refill
-
-@node setchapternewpage, paragraphindent, settitle, Header
-@comment node-name, next, previous, up
-@subsection @code{@@setchapternewpage}
-@cindex Starting chapters
-@cindex Pages, starting odd
-@findex setchapternewpage
-
-In a book or a manual, text is usually printed on both sides of the
-paper, chapters start on right-hand pages, and right-hand pages have
-odd numbers. But in short reports, text often is printed only on one
-side of the paper. Also in short reports, chapters sometimes do not
-start on new pages, but are printed on the same page as the end of the
-preceding chapter, after a small amount of vertical whitespace.@refill
-
-You can use the @code{@@setchapternewpage} command with various
-arguments to specify how @TeX{} should start chapters and whether it
-should typeset pages for printing on one or both sides of the paper
-(single-sided or double-sided printing).@refill
-
-Write the @code{@@setchapternewpage} command at the beginning of a
-line followed by its argument.@refill
-
-For example, you would write the following to cause each chapter to
-start on a fresh odd-numbered page:@refill
-
-@example
-@@setchapternewpage odd
-@end example
-
-You can specify one of three alternatives with the
-@code{@@setchapternewpage} command:@refill
-
-@table @asis
-@ignore
-@item No @code{@@setchapternewpage} command
-If the Texinfo file does not contain an @code{@@setchapternewpage}
-command before the @code{@@titlepage} command, @TeX{} automatically
-begins chapters on new pages and prints headings in the standard
-format for single-sided printing. This is the conventional format for
-single-sided printing.@refill
-
-The result is exactly the same as when you write
-@code{@@setchapternewpage on}.@refill
-@end ignore
-@item @code{@@setchapternewpage off}
-Cause @TeX{} to typeset a new chapter on the same page as the last
-chapter, after skipping some vertical whitespace. Also, cause @TeX{} to
-format page headers for single-sided printing. (You can override the
-headers format with the @code{@@headings double} command; see
-@ref{headings on off, , The @code{@@headings} Command}.)@refill
-
-@item @code{@@setchapternewpage on}
-Cause @TeX{} to start new chapters on new pages and to typeset page
-headers for single-sided printing. This is the form most often
-used for short reports.@refill
-
-This alternative is the default.@refill
-
-@item @code{@@setchapternewpage odd}
-Cause @TeX{} to start new chapters on new, odd-numbered pages
-(right-handed pages) and to typeset for double-sided printing. This is
-the form most often used for books and manuals.@refill
-@end table
-
-@noindent
-Texinfo does not have an @code{@@setchapternewpage even} command.@refill
-
-@noindent
-(You can countermand or modify an @code{@@setchapternewpage} command
-with an @code{@@headings} command. @xref{headings on off, , The
-@code{@@headings} Command}.)@refill
-
-At the beginning of a manual or book, pages are not numbered---for
-example, the title and copyright pages of a book are not numbered.
-By convention, table of contents pages are numbered with roman
-numerals and not in sequence with the rest of the document.@refill
-
-Since an Info file does not have pages, the @code{@@setchapternewpage}
-command has no effect on it.@refill
-
-Usually, you do not write an @code{@@setchapternewpage} command for
-single-sided printing, but accept the default which is to typeset for
-single-sided printing and to start new chapters on new pages. Usually,
-you write an @code{@@setchapternewpage odd} command for double-sided
-printing.@refill
-
-@node paragraphindent, End of Header, setchapternewpage, Header
-@comment node-name, next, previous, up
-@subsection Paragraph Indenting
-@cindex Indenting paragraphs
-@cindex Paragraph indentation
-@findex paragraphindent
-
-The Info formatting commands may insert spaces at the beginning of the
-first line of each paragraph, thereby indenting that paragraph. You
-can use the @code{@@paragraphindent} command to specify the
-indentation. Write an @code{@@paragraphindent} command at the
-beginning of a line followed by either @samp{asis} or a number. The
-template is:@refill
-
-@example
-@@paragraphindent @var{indent}
-@end example
-
-The Info formatting commands indent according to the value of
-@var{indent}:@refill
-
-@itemize @bullet
-@item
-If the value of @var{indent} is @samp{asis}, the Info formatting
-commands do not change the existing indentation.@refill
-
-@item
-If the value of @var{indent} is 0, the Info formatting commands delete
-existing indentation.@refill
-
-@item
-If the value of @var{indent} is greater than 0, the Info formatting
-commands indent the paragraph by that number of spaces.@refill
-@end itemize
-
-The default value of @var{indent} is @samp{asis}.@refill
-
-Write the @code{@@paragraphindent} command before or shortly after the
-end-of-header line at the beginning of a Texinfo file. (If you write
-the command between the start-of-header and end-of-header lines, the
-region formatting commands indent paragraphs as specified.)@refill
-
-@c !!! added verbiage to prevent overfull hbox --bob 26 Mar 93
-A peculiarity of @code{texinfo-format-buffer} and
-@code{texinfo-format-region} is that they do not indent (nor
-fill) paragraphs that contain @code{@@w} or @code{@@*} commands.
-@xref{Refilling Paragraphs}, for a detailed description of what goes
-on.@refill
-
-@node End of Header, , paragraphindent, Header
-@comment node-name, next, previous, up
-@subsection End of Header
-@cindex End of header line
-
-Follow the header lines with an @w{end-of-header} line.
-An end-of-header line looks like this:@refill
-
-@example
-@@c %**end of header
-@end example
-
-If you include the @code{@@setchapternewpage} command between the
-start-of-header and end-of-header lines, @TeX{} will typeset a region as
-that command specifies. Similarly, if you include an @code{@@smallbook}
-command between the start-of-header and end-of-header lines, @TeX{} will
-typeset a region in the ``small'' book format.@refill
-
-@ifinfo
-The reason for the odd string of characters (@samp{%**}) is so that the
-@code{texinfo-tex-region} command does not accidentally find
-something that it should not when it is looking for the header.@refill
-
-The start-of-header line and the end-of-header line are Texinfo mode
-variables that you can change.@refill
-@end ifinfo
-
-@iftex
-@xref{Start of Header}.
-@end iftex
-
-@node Info Summary and Permissions, Titlepage & Copyright Page, Header, Beginning a File
-@comment node-name, next, previous, up
-@section Summary and Copying Permissions for Info
-
-The title page and the copyright page appear only in the printed copy of
-the manual; therefore, the same information must be inserted in a
-section that appears only in the Info file. This section usually
-contains a brief description of the contents of the Info file, a
-copyright notice, and copying permissions.@refill
-
-The copyright notice should read:@refill
-
-@example
-Copyright @var{year} @var{copyright-owner}
-@end example
-
-@noindent
-and be put on a line by itself.@refill
-
-Standard text for the copyright permissions is contained in an appendix
-to this manual; see @ref{ifinfo Permissions, , @samp{ifinfo} Copying
-Permissions}, for the complete text.@refill
-
-The permissions text appears in an Info file @emph{before} the first
-node. This mean that a reader does @emph{not} see this text when
-reading the file using Info, except when using the advanced Info command
-@kbd{g *}.
-
-@node Titlepage & Copyright Page, The Top Node, Info Summary and Permissions, Beginning a File
-@comment node-name, next, previous, up
-@section The Title and Copyright Pages
-
-A manual's name and author are usually printed on a title page.
-Sometimes copyright information is printed on the title page as well;
-more often, copyright information is printed on the back of the title
-page.
-
-The title and copyright pages appear in the printed manual, but not in the
-Info file. Because of this, it is possible to use several slightly
-obscure @TeX{} typesetting commands that cannot be used in an Info file.
-In addition, this part of the beginning of a Texinfo file contains the text
-of the copying permissions that will appear in the printed manual.@refill
-
-@xref{Titlepage Permissions, , Titlepage Copying Permissions}, for the
-standard text for the copyright permissions.@refill
-
-@menu
-* titlepage:: Create a title for the printed document.
-* titlefont center sp:: The @code{@@titlefont}, @code{@@center},
- and @code{@@sp} commands.
-* title subtitle author:: The @code{@@title}, @code{@@subtitle},
- and @code{@@author} commands.
-* Copyright & Permissions:: How to write the copyright notice and
- include copying permissions.
-* end titlepage:: Turn on page headings after the title and
- copyright pages.
-* headings on off:: An option for turning headings on and off
- and double or single sided printing.
-@end menu
-
-@node titlepage, titlefont center sp, , Titlepage & Copyright Page
-@comment node-name, next, previous, up
-@subsection @code{@@titlepage}
-@cindex Title page
-@findex titlepage
-
-Start the material for the title page and following copyright page
-with @code{@@titlepage} on a line by itself and end it with
-@code{@@end titlepage} on a line by itself.@refill
-
-The @code{@@end titlepage} command starts a new page and turns on page
-numbering. (@xref{Headings, , Page Headings}, for details about how to
-generate of page headings.) All the material that you want to
-appear on unnumbered pages should be put between the
-@code{@@titlepage} and @code{@@end titlepage} commands. By using the
-@code{@@page} command you can force a page break within the region
-delineated by the @code{@@titlepage} and @code{@@end titlepage}
-commands and thereby create more than one unnumbered page. This is
-how the copyright page is produced. (The @code{@@titlepage} command
-might perhaps have been better named the
-@code{@@titleandadditionalpages} command, but that would have been
-rather long!)@refill
-
-@c !!! append refill to footnote when makeinfo can handle it.
-When you write a manual about a computer program, you should write the
-version of the program to which the manual applies on the title
-page. If the manual changes more frequently than the program or is
-independent of it, you should also include an edition
-number@footnote{We have found that it is helpful to refer to versions
-of manuals as `editions' and versions of programs as `versions';
-otherwise, we find we are liable to confuse each other in conversation
-by referring to both the documentation and the software with the same
-words.} for the manual. This helps readers keep track of which manual
-is for which version of the program. (The `Top' node
-should also contain this information; see @ref{makeinfo top, ,
-@code{@@top}}.)@refill
-
-Texinfo provides two methods for creating a title page. One method
-uses the @code{@@titlefont}, @code{@@sp}, and @code{@@center} commands
-to generate a title page in which the words on the page are
-centered.@refill
-
-The second method uses the @code{@@title}, @code{@@subtitle}, and
-@code{@@author} commands to create a title page with black rules under
-the title and author lines and the subtitle text set flush to the
-right hand side of the page. With this method, you do not specify any
-of the actual formatting of the title page. You specify the text
-you want, and Texinfo does the formatting. You may use either
-method.@refill
-
-@node titlefont center sp, title subtitle author, titlepage, Titlepage & Copyright Page
-@comment node-name, next, previous, up
-@subsection @code{@@titlefont}, @code{@@center}, and @code{@@sp}
-@findex titlefont
-@findex center
-@findex sp @r{(titlepage line spacing)}
-
-You can use the @code{@@titlefont}, @code{@@sp}, and @code{@@center}
-commands to create a title page for a printed document. (This is the
-first of the two methods for creating a title page in Texinfo.)@refill
-
-Use the @code{@@titlefont} command to select a large font suitable for
-the title itself.@refill
-
-@need 700
-For example:
-
-@example
-@@titlefont@{Texinfo@}
-@end example
-
-Use the @code{@@center} command at the beginning of a line to center
-the remaining text on that line. Thus,@refill
-
-@example
-@@center @@titlefont@{Texinfo@}
-@end example
-
-@noindent
-centers the title, which in this example is ``Texinfo'' printed
-in the title font.@refill
-
-Use the @code{@@sp} command to insert vertical space. For example:@refill
-
-@example
-@@sp 2
-@end example
-
-@noindent
-This inserts two blank lines on the printed page. (@xref{sp, ,
-@code{@@sp}}, for more information about the @code{@@sp}
-command.)@refill
-
-A template for this method looks like this:@refill
-
-@example
-@group
-@@titlepage
-@@sp 10
-@@center @@titlefont@{@var{name-of-manual-when-printed}@}
-@@sp 2
-@@center @var{subtitle-if-any}
-@@sp 2
-@@center @var{author}
-@dots{}
-@@end titlepage
-@end group
-@end example
-
-The spacing of the example fits an 8 1/2 by 11 inch manual.@refill
-
-@node title subtitle author, Copyright & Permissions, titlefont center sp, Titlepage & Copyright Page
-@comment node-name, next, previous, up
-@subsection @code{@@title}, @code{@@subtitle}, and @code{@@author}
-@findex title
-@findex subtitle
-@findex author
-
-You can use the @code{@@title}, @code{@@subtitle}, and @code{@@author}
-commands to create a title page in which the vertical and horizontal
-spacing is done for you automatically. This contrasts with the method
-described in
-the previous section, in which the @code{@@sp} command is needed to
-adjust vertical spacing.@refill
-
-Write the @code{@@title}, @code{@@subtitle}, or @code{@@author}
-commands at the beginning of a line followed by the title, subtitle,
-or author.@refill
-
-The @code{@@title} command produces a line in which the title is set
-flush to the left-hand side of the page in a larger than normal font.
-The title is underlined with a black rule.@refill
-
-The @code{@@subtitle} command sets subtitles in a normal-sized font
-flush to the right-hand side of the page.@refill
-
-The @code{@@author} command sets the names of the author or authors in
-a middle-sized font flush to the left-hand side of the page on a line
-near the bottom of the title page. The names are underlined with a
-black rule that is thinner than the rule that underlines the title.
-(The black rule only occurs if the @code{@@author} command line is
-followed by an @code{@@page} command line.)@refill
-
-There are two ways to use the @code{@@author} command: you can write
-the name or names on the remaining part of the line that starts with
-an @code{@@author} command:@refill
-
-@example
-@@author by Jane Smith and John Doe
-@end example
-
-@noindent
-or you can write the names one above each other by using two (or more)
-@code{@@author} commands:@refill
-
-@example
-@group
-@@author Jane Smith
-@@author John Doe
-@end group
-@end example
-
-@noindent
-(Only the bottom name is underlined with a black rule.)@refill
-
-@need 950
-A template for this method looks like this:@refill
-
-@example
-@group
-@@titlepage
-@@title @var{name-of-manual-when-printed}
-@@subtitle @var{subtitle-if-any}
-@@subtitle @var{second-subtitle}
-@@author @var{author}
-@@page
-@dots{}
-@@end titlepage
-@end group
-@end example
-
-@ifinfo
-@noindent
-Contrast this form with the form of a title page written using the
-@code{@@sp}, @code{@@center}, and @code{@@titlefont} commands:@refill
-
-@example
-@@titlepage
-@@sp 10
-@@center @@titlefont@{Name of Manual When Printed@}
-@@sp 2
-@@center Subtitle, If Any
-@@sp 1
-@@center Second subtitle
-@@sp 2
-@@center Author
-@@page
-@dots{}
-@@end titlepage
-@end example
-@end ifinfo
-
-@node Copyright & Permissions, end titlepage, title subtitle author, Titlepage & Copyright Page
-@comment node-name, next, previous, up
-@subsection Copyright Page and Permissions
-@cindex Copyright page
-@cindex Printed permissions
-@cindex Permissions, printed
-
-By international treaty, the copyright notice for a book should be
-either on the title page or on the back of the title page. The
-copyright notice should include the year followed by the name of the
-organization or person who owns the copyright.@refill
-
-When the copyright notice is on the back of the title page, that page
-is customarily not numbered. Therefore, in Texinfo, the information
-on the copyright page should be within @code{@@titlepage} and
-@code{@@end titlepage} commands.@refill
-
-@findex vskip
-@findex filll
-@cindex Vertical whitespace (@samp{vskip})
-Use the @code{@@page} command to cause a page break. To push the
-copyright notice and the other text on the copyright page towards the
-bottom of the page, you can write a somewhat mysterious line after the
-@code{@@page} command that reads like this:@refill
-
-@example
-@@vskip 0pt plus 1filll
-@end example
-
-@noindent
-This is a @TeX{} command that is not supported by the Info formatting
-commands. The @code{@@vskip} command inserts whitespace. The
-@samp{0pt plus 1filll} means to put in zero points of mandatory whitespace,
-and as much optional whitespace as needed to push the
-following text to the bottom of the page. Note the use of three
-@samp{l}s in the word @samp{filll}; this is the correct usage in
-@TeX{}.@refill
-
-@findex copyright
-In a printed manual, the @code{@@copyright@{@}} command generates a
-@samp{c} inside a circle. (In Info, it generates @samp{(C)}.) The
-copyright notice itself has the following legally defined sequence:@refill
-
-@example
-Copyright @copyright{} @var{year} @var{copyright-owner}
-@end example
-
-It is customary to put information on how to get a manual after the
-copyright notice, followed by the copying permissions for the
-manual.@refill
-
-Note that permissions must be given here as well as in the summary
-segment within @code{@@ifinfo} and @code{@@end ifinfo} that
-immediately follows the header since this text appears only in the
-printed manual and the @samp{ifinfo} text appears only in the Info
-file.@refill
-
-@xref{Sample Permissions}, for the standard text.@refill
-
-@node end titlepage, headings on off, Copyright & Permissions, Titlepage & Copyright Page
-@comment node-name, next, previous, up
-@subsection Heading Generation
-@findex end titlepage
-@cindex Headings, page, begin to appear
-@cindex Titlepage end starts headings
-@cindex End titlepage starts headings
-
-An @code{@@end titlepage} command on a line by itself not only marks
-the end of the title and copyright pages, but also causes @TeX{} to start
-generating page headings and page numbers.
-
-To repeat what is said elsewhere, Texinfo has two standard page heading
-formats, one for documents which are printed on one side of each sheet of paper
-(single-sided printing), and the other for documents which are printed on both
-sides of each sheet (double-sided printing).
-(@xref{setchapternewpage, ,@code{@@setchapternewpage}}.)
-You can specify these formats in different ways:@refill
-
-@itemize @bullet
-@item
-The conventional way is to write an @code{@@setchapternewpage} command
-before the title page commands, and then have the @code{@@end
-titlepage} command start generating page headings in the manner desired.
-(@xref{setchapternewpage, , @code{@@setchapternewpage}}.)@refill
-
-@item
-Alternatively, you can use the @code{@@headings} command to prevent page
-headings from being generated or to start them for either single or
-double-sided printing. (Write an @code{@@headings} command immediately
-after the @code{@@end titlepage} command. @xref{headings on off, , The
-@code{@@headings} Command}, for more information.)@refill
-
-@item
-Or, you may specify your own page heading and footing format.
-@xref{Headings, , Page Headings}, for detailed
-information about page headings and footings.@refill
-@end itemize
-
-Most documents are formatted with the standard single-sided or
-double-sided format, using @code{@@setchapternewpage odd} for
-double-sided printing and no @code{@@setchapternewpage} command for
-single-sided printing.@refill
-
-@node headings on off, , end titlepage, Titlepage & Copyright Page
-@comment node-name, next, previous, up
-@subsection The @code{@@headings} Command
-@findex headings
-
-The @code{@@headings} command is rarely used. It specifies what kind of
-page headings and footings to print on each page. Usually, this is
-controlled by the @code{@@setchapternewpage} command. You need the
-@code{@@headings} command only if the @code{@@setchapternewpage} command
-does not do what you want, or if you want to turn off pre-defined page
-headings prior to defining your own. Write an @code{@@headings} command
-immediately after the @code{@@end titlepage} command.@refill
-
-There are four ways to use the @code{@@headings} command:@refill
-
-@table @code
-@item @@headings off
-Turn off printing of page headings.@refill
-
-@item @@headings single
-Turn on page headings appropriate for single-sided printing.
-@refill
-
-@item @@headings double
-@itemx @@headings on
-Turn on page headings appropriate for double-sided printing. The two
-commands, @code{@@headings on} and @code{@@headings double}, are
-synonymous.@refill
-@end table
-
-For example, suppose you write @code{@@setchapternewpage off} before the
-@code{@@titlepage} command to tell @TeX{} to start a new chapter on the
-same page as the end of the last chapter. This command also causes
-@TeX{} to typeset page headers for single-sided printing. To cause
-@TeX{} to typeset for double sided printing, write @code{@@headings
-double} after the @code{@@end titlepage} command.
-
-You can stop @TeX{} from generating any page headings at all by
-writing @code{@@headings off} on a line of its own immediately after the
-line containing the @code{@@end titlepage} command, like this:@refill
-
-@example
-@@end titlepage
-@@headings off
-@end example
-
-@noindent
-The @code{@@headings off} command overrides the @code{@@end titlepage}
-command, which would otherwise cause @TeX{} to print page
-headings.@refill
-
-You can also specify your own style of page heading and footing.
-@xref{Headings, , Page Headings}, for more information.@refill
-
-@node The Top Node, Software Copying Permissions, Titlepage & Copyright Page, Beginning a File
-@comment node-name, next, previous, up
-@section The `Top' Node and Master Menu
-@cindex @samp{@r{Top}} node
-@cindex Master menu
-@cindex Node, `Top'
-
-The `Top' node is the node from which you enter an Info file.@refill
-
-A `Top' node should contain a brief description of the Info file and an
-extensive, master menu for the whole Info file.
-This helps the reader understand what the Info file is
-about. Also, you should write the version number of the program to
-which the Info file applies; or, at least, the edition number.@refill
-
-The contents of the `Top' node should appear only in the Info file; none
-of it should appear in printed output, so enclose it between
-@code{@@ifinfo} and @code{@@end ifinfo} commands. (@TeX{} does not
-print either an @code{@@node} line or a menu; they appear only in Info;
-strictly speaking, you are not required to enclose these parts between
-@code{@@ifinfo} and @code{@@end ifinfo}, but it is simplest to do so.
-@xref{Conditionals, , Conditionally Visible Text}.)@refill
-
-@menu
-* Title of Top Node:: Sketch what the file is about.
-* Master Menu Parts:: A master menu has three or more parts.
-@end menu
-
-@node Title of Top Node, Master Menu Parts, , The Top Node
-@ifinfo
-@subheading `Top' Node Title
-@end ifinfo
-
-Sometimes, you will want to place an @code{@@top} sectioning command
-line containing the title of the document immediately after the
-@code{@@node Top} line (@pxref{makeinfo top command, , The @code{@@top}
-Sectioning Command}, for more information).@refill
-
-For example, the beginning of the Top node of this manual contains an
-@code{@@top} sectioning command, a short description, and edition and
-version information. It looks like this:@refill
-
-@example
-@group
-@dots{}
-@@end titlepage
-
-@@ifinfo
-@@node Top, Copying, (dir), (dir)
-@@top Texinfo
-
-Texinfo is a documentation system@dots{}
-@end group
-
-@group
-This is edition@dots{}
-@dots{}
-@@end ifinfo
-@end group
-
-@group
-@@menu
-* Copying:: Texinfo is freely
- redistributable.
-* Overview:: What is Texinfo?
-@dots{}
-@end group
-@@end menu
-@end example
-
-In a `Top' node, the `Previous', and `Up' nodes usually refer to the top
-level directory of the whole Info system, which is called @samp{(dir)}.
-The `Next' node refers to the first node that follows the main or master
-menu, which is usually the copying permissions, introduction, or first
-chapter.@refill
-
-@node Master Menu Parts, , Title of Top Node, The Top Node
-@subsection Parts of a Master Menu
-@cindex Master menu parts
-@cindex Parts of a master menu
-
-A @dfn{master menu} is a detailed main menu listing all the nodes in a
-file.
-
-A master menu is enclosed in @code{@@menu} and @code{@@end menu}
-commands and does not appear in the printed document.@refill
-
-Generally, a master menu is divided into parts.@refill
-
-@itemize @bullet
-@item
-The first part contains the major nodes in the Texinfo file: the nodes
-for the chapters, chapter-like sections, and the appendices.@refill
-
-@item
-The second part contains nodes for the indices.@refill
-
-@item
-The third and subsequent parts contain a listing of the other, lower
-level nodes, often ordered by chapter. This way, rather than go
-through an intermediary menu, an inquirer can go directly to a
-particular node when searching for specific information. These menu
-items are not required; add them if you think they are a
-convenience.@refill
-@end itemize
-
-Each section in the menu can be introduced by a descriptive line. So
-long as the line does not begin with an asterisk, it will not be
-treated as a menu entry. (@xref{Writing a Menu}, for more
-information.)@refill
-
-For example, the master menu for this manual looks like the following
-(but has many more entries):@refill
-
-@example
-@group
-@@menu
-* Copying:: Texinfo is freely
- redistributable.
-* Overview:: What is Texinfo?
-* Texinfo Mode:: Special features in GNU Emacs.
-@dots{}
-@dots{}
-@end group
-@group
-* Command and Variable Index::
- An entry for each @@-command.
-* Concept Index:: An entry for each concept.
-@end group
-
-@group
- --- The Detailed Node Listing ---
-
-Overview of Texinfo
-
-* Info Files:: What is an Info file?
-* Printed Manuals:: Characteristics of
- a printed manual.
-@dots{}
-@dots{}
-@end group
-
-@group
-Using Texinfo Mode
-
-* Info on a Region:: Formatting part of a file
- for Info.
-@dots{}
-@dots{}
-@@end menu
-@end group
-@end example
-
-@node Software Copying Permissions, , The Top Node, Beginning a File
-@comment node-name, next, previous, up
-@section Software Copying Permissions
-@cindex Software copying permissions
-@cindex Copying software
-@cindex Distribution
-@cindex License agreement
-
-If the Texinfo file has a section containing the ``General Public
-License'' and the distribution information and a warranty disclaimer
-for the software that is documented, this section usually follows the
-`Top' node. The General Public License is very important to Project
-GNU software. It ensures that you and others will continue to have a
-right to use and share the software.@refill
-
-The copying and distribution information and the disclaimer are
-followed by an introduction or else by the first chapter of the
-manual.@refill
-
-@cindex Introduction, as part of file
-Although an introduction is not a required part of a Texinfo file, it
-is very helpful. Ideally, it should state clearly and concisely what
-the file is about and who would be interested in reading it. In
-general, an introduction would follow the licensing and distribution
-information, although sometimes people put it earlier in the document.
-Usually, an introduction is put in an @code{@@unnumbered} section.
-(@xref{unnumbered & appendix, , The @code{@@unnumbered} and
-@code{@@appendix} Commands}.)@refill
-
-@node Ending a File, Structuring, Beginning a File, Top
-@comment node-name, next, previous, up
-@chapter Ending a Texinfo File
-@cindex Ending a Texinfo file
-@cindex Texinfo file ending
-@cindex File ending
-@findex bye
-
-The end of a Texinfo file should include the commands that create
-indices and generate detailed and summary tables of contents.
-And it must include the @code{@@bye} command that marks the last line
-processed by @TeX{}.@refill
-
-@need 700
-For example:
-
-@example
-@@node Concept Index, , Variables Index, Top
-@@c node-name, next, previous, up
-@@unnumbered Concept Index
-
-@@printindex cp
-
-@@contents
-@@bye
-@end example
-
-@menu
-* Printing Indices & Menus:: How to print an index in hardcopy and
- generate index menus in Info.
-* Contents:: How to create a table of contents.
-* File End:: How to mark the end of a file.
-@end menu
-
-@node Printing Indices & Menus, Contents, , Ending a File
-@comment node-name, next, previous, up
-@section Index Menus and Printing an Index
-@findex printindex
-@cindex Printing an index
-@cindex Indices, printing and menus
-@cindex Generating menus with indices
-@cindex Menus generated with indices
-
-To print an index means to include it as part of a manual or Info
-file. This does not happen automatically just because you use
-@code{@@cindex} or other index-entry generating commands in the
-Texinfo file; those just cause the raw data for the index to be
-accumulated. To generate an index, you must include the
-@code{@@printindex} command at the place in the document where you
-want the index to appear. Also, as part of the process of creating a
-printed manual, you must run a program called @code{texindex}
-(@pxref{Format/Print Hardcopy}) to sort the raw data to produce a sorted
-index file. The sorted index file is what is actually used to
-print the index.@refill
-
-Texinfo offers six different types of predefined index: the concept
-index, the function index, the variables index, the keystroke index, the
-program index, and the data type index (@pxref{Predefined Indices}). Each
-index type has a two-letter name: @samp{cp}, @samp{fn}, @samp{vr},
-@samp{ky}, @samp{pg}, and @samp{tp}. You may merge indices, or put them
-into separate sections (@pxref{Combining Indices}); or you may define
-your own indices (@pxref{New Indices, , Defining New Indices}).@refill
-
-The @code{@@printindex} command takes a two-letter index name, reads
-the corresponding sorted index file and formats it appropriately into
-an index.@refill
-
-@ignore
-The two-letter index names are:
-
-@table @samp
-@item cp
-concept index
-@item fn
-function index
-@item vr
-variable index
-@item ky
-key index
-@item pg
-program index
-@item tp
-data type index
-@end table
-@end ignore
-The @code{@@printindex} command does not generate a chapter heading
-for the index. Consequently, you should precede the
-@code{@@printindex} command with a suitable section or chapter command
-(usually @code{@@unnumbered}) to supply the chapter heading and put
-the index into the table of contents. Precede the @code{@@unnumbered}
-command with an @code{@@node} line.@refill
-
-@need 1200
-For example:
-
-@smallexample
-@group
-@@node Variable Index, Concept Index, Function Index, Top
-@@comment node-name, next, previous, up
-@@unnumbered Variable Index
-
-@@printindex vr
-@end group
-
-@group
-@@node Concept Index, , Variable Index, Top
-@@comment node-name, next, previous, up
-@@unnumbered Concept Index
-
-@@printindex cp
-@end group
-
-@group
-@@summarycontents
-@@contents
-@@bye
-@end group
-@end smallexample
-
-@noindent
-(Readers often prefer that the concept index come last in a book,
-since that makes it easiest to find.)@refill
-
-@ignore
-In @TeX{}, the @code{@@printindex} command needs a sorted index file
-to work from. @TeX{} does not know how to do sorting; this is a
-deficiency. @TeX{} writes output files of raw index data; use the
-@code{texindex} program to convert these files to sorted index files.
-(@xref{Format/Print Hardcopy}, for more information.)@refill
-@end ignore
-@node Contents, File End, Printing Indices & Menus, Ending a File
-@comment node-name, next, previous, up
-@section Generating a Table of Contents
-@cindex Table of contents
-@cindex Contents, Table of
-@findex contents
-@findex summarycontents
-@findex shortcontents
-
-The @code{@@chapter}, @code{@@section}, and other structuring commands
-supply the information to make up a table of contents, but they do not
-cause an actual table to appear in the manual. To do this, you must
-use the @code{@@contents} and @code{@@summarycontents}
-commands:@refill
-
-@table @code
-@item @@contents
-Generate a table of contents in a printed manual, including all
-chapters, sections, subsections, etc., as well as appendices and
-unnumbered chapters. (Headings generated by the @code{@@heading}
-series of commands do not appear in the table of contents.) The
-@code{@@contents} command should be written on a line by
-itself.@refill
-
-@item @@shortcontents
-@itemx @@summarycontents
-(@code{@@summarycontents} is a synonym for @code{@@shortcontents}; the
-two commands are exactly the same.)@refill
-
-Generate a short or summary table of contents that lists only the
-chapters (and appendices and unnumbered chapters). Omit sections, subsections
-and subsubsections. Only a long manual needs a short table
-of contents in addition to the full table of contents.@refill
-
-Write the @code{@@shortcontents} command on a line by itself right
-@emph{before} the @code{@@contents} command.@refill
-@end table
-
-The table of contents commands automatically generate a chapter-like
-heading at the top of the first table of contents page. Write the table
-of contents commands at the very end of a Texinfo file, just before the
-@code{@@bye} command, following any index sections---anything in the
-Texinfo file after the table of contents commands will be omitted from
-the table of contents.@refill
-
-When you print a manual with a table of contents, the table of
-contents are printed last and numbered with roman numerals. You need
-to place those pages in their proper place, after the title page,
-yourself. (This is the only collating you need to do for a printed
-manual. The table of contents is printed last because it is generated
-after the rest of the manual is typeset.)@refill
-
-@need 700
-Here is an example of where to write table of contents commands:@refill
-
-@example
-@group
-@var{indices}@dots{}
-@@shortcontents
-@@contents
-@@bye
-@end group
-@end example
-
-Since an Info file uses menus instead of tables of contents, the Info
-formatting commands ignore the @code{@@contents} and
-@code{@@shortcontents} commands.@refill
-
-@node File End, , Contents, Ending a File
-@comment node-name, next, previous, up
-@section @code{@@bye} File Ending
-@findex bye
-
-An @code{@@bye} command terminates @TeX{} or Info formatting. None of
-the formatting commands see any of the file following @code{@@bye}.
-The @code{@@bye} command should be on a line by itself.@refill
-
-If you wish, you may follow the @code{@@bye} line with notes. These notes
-will not be formatted and will not appear in either Info or a printed
-manual; it is as if text after @code{@@bye} were within @code{@@ignore}
-@dots{} @code{@@end ignore}. Also, you may follow the @code{@@bye} line
-with a local variables list. @xref{Compile-Command, , Using Local
-Variables and the Compile Command}, for more information.@refill
-
-@node Structuring, Nodes, Ending a File, Top
-@comment node-name, next, previous, up
-@chapter Chapter Structuring
-@cindex Chapter structuring
-@cindex Structuring of chapters
-
-The @dfn{chapter structuring} commands divide a document into a hierarchy of
-chapters, sections, subsections, and subsubsections. These commands
-generate large headings; they also provide information for the table
-of contents of a printed manual (@pxref{Contents, , Generating a Table
-of Contents}).@refill
-
-The chapter structuring commands do not create an Info node structure,
-so normally you should put an @code{@@node} command immediately before
-each chapter structuring command (@pxref{Nodes}). The only time you
-are likely to use the chapter structuring commands without using the
-node structuring commands is if you are writing a document that
-contains no cross references and will never be transformed into Info
-format.@refill
-
-It is unlikely that you will ever write a Texinfo file that is
-intended only as an Info file and not as a printable document. If you
-do, you might still use chapter structuring commands to create a
-heading at the top of each node---but you don't need to.@refill
-
-@menu
-* Tree Structuring:: A manual is like an upside down tree @dots{}
-* Structuring Command Types:: How to divide a manual into parts.
-* makeinfo top:: The @code{@@top} command, part of the `Top' node.
-* chapter::
-* unnumbered & appendix::
-* majorheading & chapheading::
-* section::
-* unnumberedsec appendixsec heading::
-* subsection::
-* unnumberedsubsec appendixsubsec subheading::
-* subsubsection:: Commands for the lowest level sections.
-@end menu
-
-@node Tree Structuring, Structuring Command Types, , Structuring
-@comment node-name, next, previous, up
-@section Tree Structure of Sections
-@cindex Tree structuring
-
-A Texinfo file is usually structured like a book with chapters,
-sections, subsections, and the like. This structure can be visualized
-as a tree (or rather as an upside-down tree) with the root at the top
-and the levels corresponding to chapters, sections, subsection, and
-subsubsections.@refill
-
-Here is a diagram that shows a Texinfo file with three chapters,
-each of which has two sections.@refill
-
-@example
-@group
- Top
- |
- -------------------------------------
- | | |
- Chapter 1 Chapter 2 Chapter 3
- | | |
- -------- -------- --------
- | | | | | |
- Section Section Section Section Section Section
- 1.1 1.2 2.1 2.2 3.1 3.2
-
-@end group
-@end example
-
-In a Texinfo file that has this structure, the beginning of Chapter 2
-looks like this:@refill
-
-@example
-@group
-@@node Chapter 2, Chapter 3, Chapter 1, top
-@@chapter Chapter 2
-@end group
-@end example
-
-The chapter structuring commands are described in the sections that
-follow; the @code{@@node} and @code{@@menu} commands are described in
-following chapters. (@xref{Nodes}, and see @ref{Menus}.)@refill
-
-@node Structuring Command Types, makeinfo top, Tree Structuring, Structuring
-@comment node-name, next, previous, up
-@section Types of Structuring Command
-
-The chapter structuring commands fall into four groups or series, each
-of which contains structuring commands corresponding to the
-hierarchical levels of chapters, sections, subsections, and
-subsubsections.@refill
-
-The four groups are the @code{@@chapter} series, the
-@code{@@unnumbered} series, the @code{@@appendix} series, and the
-@code{@@heading} series.@refill
-
-Each command produces titles that have a different appearance on the
-printed page or Info file; only some of the commands produce
-titles that are listed in the table of contents of a printed book or
-manual.@refill
-
-@itemize @bullet
-@item
-The @code{@@chapter} and @code{@@appendix} series of commands produce
-numbered or lettered entries both in the body of a printed work and in
-its table of contents.@refill
-
-@item
-The @code{@@unnumbered} series of commands produce unnumbered entries
-both in the body of a printed work and in its table of contents. The
-@code{@@top} command, which has a special use, is a member of this
-series (@pxref{makeinfo top, , @code{@@top}}).@refill
-
-@item
-The @code{@@heading} series of commands produce unnumbered headings
-that do not appear in a table of contents. The heading commands never
-start a new page.@refill
-
-@item
-The @code{@@majorheading} command produces results similar to using
-the @code{@@chapheading} command but generates a larger vertical
-whitespace before the heading.@refill
-
-@item
-When an @code{@@setchapternewpage} command says to do so, the
-@code{@@chapter}, @code{@@unnumbered}, and @code{@@appendix} commands
-start new pages in the printed manual; the @code{@@heading} commands
-do not.@refill
-@end itemize
-
-@need 1000
-Here are the four groups of chapter structuring commands:@refill
-
-@c Slightly different formatting for regular sized books and smallbooks.
-@ifset smallbook
-@sp 1
-@tex
-{\let\rm=\indrm \let\tt=\indtt
-\halign{\hskip\itemindent#\hfil& \hskip.5em#\hfil& \hskip.5em#\hfil&
-\hskip.5em#\hfil\cr
-
-& & & \rm No new pages\cr
-\rm Numbered& \rm Unnumbered& \rm Lettered and numbered& \rm Unnumbered\cr
-\rm In contents& \rm In contents& \rm In contents& \rm Not in contents\cr
-
-& & & \cr
- & \tt @@top& & \tt @@majorheading\cr
-\tt @@chapter& \tt @@unnumbered& \tt @@appendix& \tt @@chapheading\cr
-\tt @@section& \tt @@unnumberedsec& \tt @@appendixsec& \tt @@heading\cr
-\tt @@subsection&\tt @@unnumberedsubsec&\tt @@appendixsubsec&
-\tt @@subheading\cr
-\tt @@subsubsection& \tt @@unnumberedsubsubsec& \tt @@appendixsubsubsec&
-\tt @@subsubheading\cr}}
-@end tex
-@end ifset
-@ifclear smallbook
-@sp 1
-@tex
-\vbox{
-\halign{\hskip\itemindent\hskip.5em#\hfil& \hskip.5em#\hfil&
-\hskip.5em#\hfil& \hskip.5em #\hfil\cr
-
-& & & \cr
-& & & \rm No new pages\cr
-\rm Numbered& \rm Unnumbered& \rm Lettered and numbered& \rm Unnumbered\cr
-\rm In contents& \rm In contents& \rm In contents& \rm Not in contents\cr
-
-& & & \cr
- & \tt @@top& & \tt @@majorheading\cr
-\tt @@chapter& \tt @@unnumbered& \tt @@appendix& \tt @@chapheading\cr
-\tt @@section& \tt @@unnumberedsec& \tt @@appendixsec& \tt @@heading\cr
-\tt @@subsection&\tt @@unnumberedsubsec&\tt @@appendixsubsec&
-\tt @@subheading\cr
-\tt @@subsubsection& \tt @@unnumberedsubsubsec& \tt @@appendixsubsubsec&
-\tt @@subsubheading\cr}}
-@end tex
-@end ifclear
-@ifinfo
-@example
-@group
- @r{No new pages}
-@r{Numbered} @r{Unnumbered} @r{Lettered and numbered} @r{Unnumbered}
-@r{In contents} @r{In contents} @r{In contents} @r{Not in contents}
-
- @@top @@majorheading
-@@chapter @@unnumbered @@appendix @@chapheading
-@@section @@unnumberedsec @@appendixsec @@heading
-@@subsection @@unnumberedsubsec @@appendixsubsec @@subheading
-@@subsubsection @@unnumberedsubsubsec @@appendixsubsubsec @@subsubheading
-@end group
-@end example
-@end ifinfo
-
-@c Cannot line up columns properly inside of an example because of roman
-@c proportional fonts.
-@ignore
-@ifset smallbook
-@iftex
-@smallexample
-@group
- @r{No new pages}
-@r{Numbered} @r{Unnumbered} @r{Lettered and numbered} @r{Unnumbered}
-@r{In contents} @r{In contents} @r{In contents} @r{Not in contents}
-
- @@top @@majorheading
-@@chapter @@unnumbered @@appendix @@chapheading
-@@section @@unnumberedsec @@appendixsec @@heading
-@@subsection @@unnumberedsubsec @@appendixsubsec @@subheading
-@@subsubsection @@unnumberedsubsubsec @@appendixsubsubsec @@subsubheading
-@end group
-@end smallexample
-@end iftex
-@end ifset
-@ifclear smallbook
-@iftex
-@smallexample
-@group
- @r{No new pages}
-@r{Numbered} @r{Unnumbered} @r{Lettered and numbered} @r{Unnumbered}
-@r{In contents} @r{In contents} @r{In contents} @r{Not in contents}
-
- @@top @@majorheading
-@@chapter @@unnumbered @@appendix @@chapheading
-@@section @@unnumberedsec @@appendixsec @@heading
-@@subsection @@unnumberedsubsec @@appendixsubsec @@subheading
-@@subsubsection @@unnumberedsubsubsec @@appendixsubsubsec @@subsubheading
-@end group
-@end smallexample
-@end iftex
-@end ignore
-
-@node makeinfo top, chapter, Structuring Command Types, Structuring
-@comment node-name, next, previous, up
-@section @code{@@top}
-
-The @code{@@top} command is a special sectioning command that you use
-only after an @code{@@node Top} line at the beginning of a Texinfo file.
-The @code{@@top} command tells the @code{makeinfo} formatter
-which node is the `Top'
-node. It has the same typesetting effect as @code{@@unnumbered}
-(@pxref{unnumbered & appendix, , @code{@@unnumbered}, @code{@@appendix}}).
-For detailed information, see
-@ref{makeinfo top command, , The @code{@@top} Command}.@refill
-
-@node chapter, unnumbered & appendix, makeinfo top, Structuring
-@comment node-name, next, previous, up
-@section @code{@@chapter}
-@findex chapter
-
-@code{@@chapter} identifies a chapter in the document. Write the
-command at the beginning of a line and follow it on the same line by
-the title of the chapter.@refill
-
-For example, this chapter in this manual is entitled ``Chapter
-Structuring''; the @code{@@chapter} line looks like this:@refill
-
-@example
-@@chapter Chapter Structuring
-@end example
-
-In @TeX{}, the @code{@@chapter} command creates a chapter in the
-document, specifying the chapter title. The chapter is numbered
-automatically.@refill
-
-In Info, the @code{@@chapter} command causes the title to appear on a
-line by itself, with a line of asterisks inserted underneath. Thus,
-in Info, the above example produces the following output:@refill
-
-@example
-Chapter Structuring
-*******************
-@end example
-
-@node unnumbered & appendix, majorheading & chapheading, chapter, Structuring
-@comment node-name, next, previous, up
-@section @code{@@unnumbered}, @code{@@appendix}
-@findex unnumbered
-@findex appendix
-
-Use the @code{@@unnumbered} command to create a chapter that appears
-in a printed manual without chapter numbers of any kind. Use the
-@code{@@appendix} command to create an appendix in a printed manual
-that is labelled by letter instead of by number.@refill
-
-For Info file output, the @code{@@unnumbered} and @code{@@appendix}
-commands are equivalent to @code{@@chapter}: the title is printed on a
-line by itself with a line of asterisks underneath. (@xref{chapter, ,
-@code{@@chapter}}.)@refill
-
-To create an appendix or an unnumbered chapter, write an
-@code{@@appendix} or @code{@@unnumbered} command at the beginning of a
-line and follow it on the same line by the title, as you would if you
-were creating a chapter.@refill
-
-@node majorheading & chapheading, section, unnumbered & appendix, Structuring
-@section @code{@@majorheading}, @code{@@chapheading}
-@findex majorheading
-@findex chapheading
-
-The @code{@@majorheading} and @code{@@chapheading} commands put
-chapter-like headings in the body of a document.@refill
-
-However, neither command causes @TeX{} to produce a numbered heading
-or an entry in the table of contents; and neither command causes
-@TeX{} to start a new page in a printed manual.@refill
-
-In @TeX{}, an @code{@@majorheading} command generates a larger vertical
-whitespace before the heading than an @code{@@chapheading} command but
-is otherwise the same.@refill
-
-In Info,
-the @code{@@majorheading} and
-@code{@@chapheading} commands are equivalent to
-@code{@@chapter}: the title is printed on a line by itself with a line
-of asterisks underneath. (@xref{chapter, , @code{@@chapter}}.)@refill
-
-@node section, unnumberedsec appendixsec heading, majorheading & chapheading, Structuring
-@comment node-name, next, previous, up
-@section @code{@@section}
-@findex section
-
-In a printed manual, an @code{@@section} command identifies a
-numbered section within a chapter. The section title appears in the
-table of contents. In Info, an @code{@@section} command provides a
-title for a segment of text, underlined with @samp{=}.@refill
-
-This section is headed with an @code{@@section} command and looks like
-this in the Texinfo file:@refill
-
-@example
-@@section @@code@{@@@@section@}
-@end example
-
-To create a section, write the @code{@@section} command at the
-beginning of a line and follow it on the same line by the section
-title.@refill
-
-Thus,
-
-@example
-@@section This is a section
-@end example
-
-@noindent
-produces
-
-@example
-@group
-This is a section
-=================
-@end group
-@end example
-
-@noindent
-in Info.
-
-@node unnumberedsec appendixsec heading, subsection, section, Structuring
-@comment node-name, next, previous, up
-@section @code{@@unnumberedsec}, @code{@@appendixsec}, @code{@@heading}
-@findex unnumberedsec
-@findex appendixsec
-@findex heading
-
-The @code{@@unnumberedsec}, @code{@@appendixsec}, and @code{@@heading}
-commands are, respectively, the unnumbered, appendix-like, and
-heading-like equivalents of the @code{@@section} command.
-(@xref{section, , @code{@@section}}.)@refill
-
-@table @code
-@item @@unnumberedsec
-The @code{@@unnumberedsec} command may be used within an
-unnumbered chapter or within a regular chapter or appendix to
-provide an unnumbered section.@refill
-
-@item @@appendixsec
-@itemx @@appendixsection
-@code{@@appendixsection} is a longer spelling of the
-@code{@@appendixsec} command; the two are synonymous.@refill
-@findex appendixsection
-
-Conventionally, the @code{@@appendixsec} or @code{@@appendixsection}
-command is used only within appendices.@refill
-
-@item @@heading
-You may use the @code{@@heading} command anywhere you wish for a
-section-style heading that will not appear in the table of contents.@refill
-@end table
-
-@node subsection, unnumberedsubsec appendixsubsec subheading, unnumberedsec appendixsec heading, Structuring
-@comment node-name, next, previous, up
-@section The @code{@@subsection} Command
-@findex subsection
-
-Subsections are to sections as sections are to chapters.
-(@xref{section, , @code{@@section}}.) In Info, subsection titles are
-underlined with @samp{-}. For example,@refill
-
-@example
-@@subsection This is a subsection
-@end example
-
-@noindent
-produces
-
-@example
-@group
-This is a subsection
---------------------
-@end group
-@end example
-
-In a printed manual, subsections are listed in the table of contents
-and are numbered three levels deep.@refill
-
-@node unnumberedsubsec appendixsubsec subheading, subsubsection, subsection, Structuring
-@comment node-name, next, previous, up
-@section The @code{@@subsection}-like Commands
-@cindex Subsection-like commands
-@findex unnumberedsubsec
-@findex appendixsubsec
-@findex subheading
-
-The @code{@@unnumberedsubsec}, @code{@@appendixsubsec}, and
-@code{@@subheading} commands are, respectively, the unnumbered,
-appendix-like, and heading-like equivalents of the @code{@@subsection}
-command. (@xref{subsection, , @code{@@subsection}}.)@refill
-
-In Info, the @code{@@subsection}-like commands generate a title
-underlined with hyphens. In a printed manual, an @code{@@subheading}
-command produces a heading like that of a subsection except that it is
-not numbered and does not appear in the table of contents. Similarly,
-an @code{@@unnumberedsubsec} command produces an unnumbered heading like
-that of a subsection and an @code{@@appendixsubsec} command produces a
-subsection-like heading labelled with a letter and numbers; both of
-these commands produce headings that appear in the table of
-contents.@refill
-
-@node subsubsection, , unnumberedsubsec appendixsubsec subheading, Structuring
-@comment node-name, next, previous, up
-@section The `subsub' Commands
-@cindex Subsub commands
-@findex subsubsection
-@findex unnumberedsubsubsec
-@findex appendixsubsubsec
-@findex subsubheading
-
-The fourth and lowest level sectioning commands in Texinfo are the
-`subsub' commands. They are:@refill
-
-@table @code
-@item @@subsubsection
-Subsubsections are to subsections as subsections are to sections.
-(@xref{subsection, , @code{@@subsection}}.) In a printed manual,
-subsubsection titles appear in the table of contents and are numbered
-four levels deep.@refill
-
-@item @@unnumberedsubsubsec
-Unnumbered subsubsection titles appear in the table of contents of a
-printed manual, but lack numbers. Otherwise, unnumbered
-subsubsections are the same as subsubsections. In Info, unnumbered
-subsubsections look exactly like ordinary subsubsections.@refill
-
-@item @@appendixsubsubsec
-Conventionally, appendix commands are used only for appendices and are
-lettered and numbered appropriately in a printed manual. They also
-appear in the table of contents. In Info, appendix subsubsections look
-exactly like ordinary subsubsections.@refill
-
-@item @@subsubheading
-The @code{@@subsubheading} command may be used anywhere that you need
-a small heading that will not appear in the table of contents. In
-Info, subsubheadings look exactly like ordinary subsubsection
-headings.@refill
-@end table
-
-In Info, `subsub' titles are underlined with periods.
-For example,@refill
-
-@example
-@@subsubsection This is a subsubsection
-@end example
-
-@noindent
-produces
-
-@example
-@group
-This is a subsubsection
-.......................
-@end group
-@end example
-
-@node Nodes, Menus, Structuring, Top
-@comment node-name, next, previous, up
-@chapter Nodes
-
-@dfn{Nodes} are the primary segments of a Texinfo file. They do not
-themselves impose a hierarchic or any other kind of structure on a file.
-Nodes contain @dfn{node pointers} that name other nodes, and can contain
-@dfn{menus} which are lists of nodes. In Info, the movement commands
-can carry you to a pointed-to node or to a node listed in a menu. Node
-pointers and menus provide structure for Info files just as chapters,
-sections, subsections, and the like, provide structure for printed
-books.@refill
-
-@menu
-* Two Paths:: Different commands to structure
- Info output and printed output.
-* Node Menu Illustration:: A diagram, and sample nodes and menus.
-* node:: How to write a node, in detail.
-* makeinfo Pointer Creation:: How to create node pointers with @code{makeinfo}.
-@end menu
-
-@node Two Paths, Node Menu Illustration, , Nodes
-@ifinfo
-@heading Two Paths
-@end ifinfo
-
-The node and menu commands and the chapter structuring commands are
-independent of each other:
-
-@itemize @bullet
-@item
-In Info, node and menu commands provide structure. The chapter
-structuring commands generate headings with different kinds of
-underlining---asterisks for chapters, hyphens for sections, and so on;
-they do nothing else.@refill
-
-@item
-In @TeX{}, the chapter structuring commands generate chapter and section
-numbers and tables of contents. The node and menu commands provide
-information for cross references; they do nothing else.@refill
-@end itemize
-
-You can use node pointers and menus to structure an Info file any way
-you want; and you can write a Texinfo file so that its Info output has a
-different structure than its printed output. However, most Texinfo
-files are written such that the structure for the Info output
-corresponds to the structure for the printed output. It is not
-convenient to do otherwise.@refill
-
-Generally, printed output is structured in a tree-like hierarchy in
-which the chapters are the major limbs from which the sections branch
-out. Similarly, node pointers and menus are organized to create a
-matching structure in the Info output.@refill
-
-@node Node Menu Illustration, node, Two Paths, Nodes
-@comment node-name, next, previous, up
-@section Node and Menu Illustration
-
-Here is a copy of the diagram shown earlier that illustrates a Texinfo
-file with three chapters, each of which contains two sections.@refill
-
-Note that the ``root'' is at the top of the diagram and the ``leaves''
-are at the bottom. This is how such a diagram is drawn conventionally;
-it illustrates an upside-down tree. For this reason, the root node is
-called the `Top' node, and `Up' node pointers carry you closer to the
-root.@refill
-
-@example
-@group
- Top
- |
- -------------------------------------
- | | |
- Chapter 1 Chapter 2 Chapter 3
- | | |
- -------- -------- --------
- | | | | | |
- Section Section Section Section Section Section
- 1.1 1.2 2.1 2.2 3.1 3.2
-
-@end group
-@end example
-
-Write the beginning of the node for Chapter 2 like this:@refill
-
-@example
-@group
-@@node Chapter 2, Chapter 3, Chapter 1, top
-@@comment node-name, next, previous, up
-@end group
-@end example
-
-@noindent
-This @code{@@node} line says that the name of this node is ``Chapter 2'', the
-name of the `Next' node is ``Chapter 3'', the name of the `Previous'
-node is ``Chapter 1'', and the name of the `Up' node is ``Top''.
-
-@quotation
-@strong{Please Note:} `Next' refers to the next node at the same
-hierarchical level in the manual, not necessarily to the next node
-within the Texinfo file. In the Texinfo file, the subsequent node may
-be at a lower level---a section-level node may follow a chapter-level
-node, and a subsection-level node may follow a section-level node.
-`Next' and `Previous' refer to nodes at the @emph{same} hierarchical
-level. (The `Top' node contains the exception to this rule. Since the
-`Top' node is the only node at that level, `Next' refers to the first
-following node, which is almost always a chapter or chapter-level
-node.)@refill
-@end quotation
-
-To go to Sections 2.1 and 2.2 using Info, you need a menu inside Chapter
-2. (@xref{Menus}.) You would write the menu just
-before the beginning of Section 2.1, like this:@refill
-
-@example
-@group
- @@menu
- * Sect. 2.1:: Description of this section.
- * Sect. 2.2::
- @@end menu
-@end group
-@end example
-
-Write the node for Sect. 2.1 like this:@refill
-
-@example
-@group
- @@node Sect. 2.1, Sect. 2.2, Chapter 2, Chapter 2
- @@comment node-name, next, previous, up
-@end group
-@end example
-
-In Info format, the `Next' and `Previous' pointers of a node usually
-lead to other nodes at the same level---from chapter to chapter or from
-section to section (sometimes, as shown, the `Previous' pointer points
-up); an `Up' pointer usually leads to a node at the level above (closer
-to the `Top' node); and a `Menu' leads to nodes at a level below (closer
-to `leaves'). (A cross reference can point to a node at any level;
-see @ref{Cross References}.)@refill
-
-Usually, an @code{@@node} command and a chapter structuring command are
-used in sequence, along with indexing commands. (You may follow the
-@code{@@node} line with a comment line that reminds you which pointer is
-which.)@refill
-
-Here is the beginning of the chapter in this manual called ``Ending a
-Texinfo File''. This shows an @code{@@node} line followed by a comment
-line, an @code{@@chapter} line, and then by indexing lines.@refill
-
-@example
-@group
-@@node Ending a File, Structuring, Beginning a File, Top
-@@comment node-name, next, previous, up
-@@chapter Ending a Texinfo File
-@@cindex Ending a Texinfo file
-@@cindex Texinfo file ending
-@@cindex File ending
-@end group
-@end example
-
-@node node, makeinfo Pointer Creation, Node Menu Illustration, Nodes
-@comment node-name, next, previous, up
-@section The @code{@@node} Command
-
-@cindex Node, defined
-A @dfn{node} is a segment of text that begins at an @code{@@node}
-command and continues until the next @code{@@node} command. The
-definition of node is different from that for chapter or section. A
-chapter may contain sections and a section may contain subsections;
-but a node cannot contain subnodes; the text of a node continues only
-until the next @code{@@node} command in the file. A node usually
-contains only one chapter structuring command, the one that follows
-the @code{@@node} line. On the other hand, in printed output nodes
-are used only for cross references, so a chapter or section may
-contain any number of nodes. Indeed, a chapter usually contains
-several nodes, one for each section, subsection, and
-subsubsection.@refill
-
-To create a node, write an @code{@@node} command at the beginning of a
-line, and follow it with four arguments, separated by commas, on the
-rest of the same line. These arguments are the name of the node, and
-the names of the `Next', `Previous', and `Up' pointers, in that order.
-You may insert spaces before each pointer if you wish; the spaces are
-ignored. You must write the name of the node, and the names of the
-`Next', `Previous', and `Up' pointers, all on the same line. Otherwise,
-the formatters fail. (@inforef{Top, info, info}, for more information
-about nodes in Info.)@refill
-
-Usually, you write one of the chapter-structuring command lines
-immediately after an @code{@@node} line---for example, an
-@code{@@section} or @code{@@subsection} line. (@xref{Structuring
-Command Types, , Types of Structuring Command}.)@refill
-
-@quotation
-@strong{Please note:} The GNU Emacs Texinfo mode updating commands work
-only with Texinfo files in which @code{@@node} lines are followed by chapter
-structuring lines. @xref{Updating Requirements}.@refill
-@end quotation
-
-@TeX{} uses @code{@@node} lines to identify the names to use for cross
-references. For this reason, you must write @code{@@node} lines in a
-Texinfo file that you intend to format for printing, even if you do not
-intend to format it for Info. (Cross references, such as the one at the
-end of this sentence, are made with @code{@@xref} and its related
-commands; see @ref{Cross References}.)@refill
-
-@menu
-* Node Names:: How to choose node and pointer names.
-* Writing a Node:: How to write an @code{@@node} line.
-* Node Line Tips:: Keep names short.
-* Node Line Requirements:: Keep names unique, without @@-commands.
-* First Node:: How to write a `Top' node.
-* makeinfo top command:: How to use the @code{@@top} command.
-* Top Node Summary:: Write a brief description for readers.
-@end menu
-
-@node Node Names, Writing a Node, , node
-@ifinfo
-@subheading Choosing Node and Pointer Names
-@end ifinfo
-
-The name of a node identifies the node. The pointers enable
-you to reach other nodes and consist of the names of those nodes.@refill
-
-Normally, a node's `Up' pointer contains the name of the node whose menu
-mentions that node. The node's `Next' pointer contains the name of the
-node that follows that node in that menu and its `Previous' pointer
-contains the name of the node that precedes it in that menu. When a
-node's `Previous' node is the same as its `Up' node, both node pointers
-name the same node.@refill
-
-Usually, the first node of a Texinfo file is the `Top' node, and its
-`Up' and `Previous' pointers point to the @file{dir} file, which
-contains the main menu for all of Info.@refill
-
-The `Top' node itself contains the main or master menu for the manual.
-Also, it is helpful to include a brief description of the manual in the
-`Top' node. @xref{First Node}, for information on how to write the
-first node of a Texinfo file.@refill
-
-@node Writing a Node, Node Line Tips, Node Names, node
-@comment node-name, next, previous, up
-@subsection How to Write an @code{@@node} Line
-@cindex Writing an @code{@@node} line
-@cindex @code{@@node} line writing
-@cindex Node line writing
-
-The easiest way to write an @code{@@node} line is to write @code{@@node}
-at the beginning of a line and then the name of the node, like
-this:@refill
-
-@example
-@@node @var{node-name}
-@end example
-
-If you are using GNU Emacs, you can use the update node commands
-provided by Texinfo mode to insert the names of the pointers; or you
-can leave the pointers out of the Texinfo file and let @code{makeinfo}
-insert node pointers into the Info file it creates. (@xref{Texinfo
-Mode}, and @ref{makeinfo Pointer Creation}.)@refill
-
-Alternatively, you can insert the `Next', `Previous', and `Up'
-pointers yourself. If you do this, you may find it helpful to use the
-Texinfo mode keyboard command @kbd{C-c C-c n}. This command inserts
-@samp{@@node} and a comment line listing the names of the pointers in
-their proper order. The comment line helps you keep track of which
-arguments are for which pointers. This comment line is especially useful
-if you are not familiar with Texinfo.@refill
-
-The template for a node line with `Next', `Previous', and `Up' pointers
-looks like this:@refill
-
-@example
-@@node @var{node-name}, @var{next}, @var{previous}, @var{up}
-@end example
-
-If you wish, you can ignore @code{@@node} lines altogether in your first
-draft and then use the @code{texinfo-insert-node-lines} command to
-create @code{@@node} lines for you. However, we do not
-recommend this practice. It is better to name the node itself
-at the same time that you
-write a segment so you can easily make cross references. A large number
-of cross references are an especially important feature of a good Info
-file.@refill
-
-After you have inserted an @code{@@node} line, you should immediately
-write an @@-command for the chapter or section and insert its name.
-Next (and this is important!), put in several index entries. Usually,
-you will find at least two and often as many as four or five ways of
-referring to the node in the index. Use them all. This will make it
-much easier for people to find the node.@refill
-
-@node Node Line Tips, Node Line Requirements, Writing a Node, node
-@comment node-name, next, previous, up
-@subsection @code{@@node} Line Tips
-
-Here are three suggestions:
-
-@itemize @bullet
-@item
-Try to pick node names that are informative but short.@refill
-
-In the Info file, the file name, node name, and pointer names are all
-inserted on one line, which may run into the right edge of the window.
-(This does not cause a problem with Info, but is ugly.)@refill
-
-@item
-Try to pick node names that differ from each other near the beginnings
-of their names. This way, it is easy to use automatic name completion in
-Info.@refill
-
-@item
-By convention, node names are capitalized just as they would be for
-section or chapter titles---initial and significant words are
-capitalized; others are not.@refill
-@end itemize
-
-@node Node Line Requirements, First Node, Node Line Tips, node
-@comment node-name, next, previous, up
-@subsection @code{@@node} Line Requirements
-
-@cindex Node line requirements
-Here are several requirements for @code{@@node} lines:
-
-@itemize @bullet
-@cindex Unique nodename requirement
-@cindex Nodename must be unique
-@item
-All the node names for a single Info file must be unique.@refill
-
-Duplicates confuse the Info movement commands. This means, for
-example, that if you end every chapter with a summary, you must name
-each summary node differently. You cannot just call each one
-``Summary''. You may, however, duplicate the titles of chapters, sections,
-and the like. Thus you can end each chapter in a book with a section
-called ``Summary'', so long as the node names for those sections are all
-different.@refill
-
-@item
-A pointer name must be the name of a node.@refill
-
-The node to which a pointer points may come before or after the
-node containing the pointer.@refill
-
-@cindex @@-command in nodename
-@cindex Nodename, cannot contain
-@item
-You cannot use any of the Texinfo @@-commands in a node name;
-@w{@@-commands} confuse Info.@refill
-
-@need 750
-Thus, the beginning of the section called @code{@@chapter} looks like
-this:@refill
-
-@smallexample
-@group
-@@node chapter, unnumbered & appendix, makeinfo top, Structuring
-@@comment node-name, next, previous, up
-@@section @@code@{@@@@chapter@}
-@@findex chapter
-@end group
-@end smallexample
-
-@cindex Comma in nodename
-@cindex Colon in nodename
-@cindex Apostrophe in nodename
-@item
-You cannot use commas, colons, or apostrophes within a node name; these
-confuse @TeX{} or the Info formatters.@refill
-
-@need 700
-For example, the following is a section title:
-
-@smallexample
-@@code@{@@@@unnumberedsec@}, @@code@{@@@@appendixsec@}, @@code@{@@@@heading@}
-@end smallexample
-
-@noindent
-The corresponding node name is:
-
-@smallexample
-unnumberedsec appendixsec heading
-@end smallexample
-
-@cindex Case in nodename
-@item
-Case is significant.
-@end itemize
-
-@node First Node, makeinfo top command, Node Line Requirements, node
-@comment node-name, next, previous, up
-@subsection The First Node
-@cindex @samp{@r{Top}} node is first
-@cindex First node
-
-The first node of a Texinfo file is the `Top' node, except in an
-included file (@pxref{Include Files}).
-
-The `Top' node (which must be named @samp{top} or @samp{Top}) should
-have as its `Up' and `Previous' nodes the name of a node in another
-file, where there is a menu that leads to this file. Specify the file
-name in parentheses. If the file is to be installed directly in the
-Info directory file, use @samp{(dir)} as the parent of the `Top' node;
-this is short for @samp{(dir)top}, and specifies the `Top' node in the
-@file{dir} file, which contains the main menu for Info. For example,
-the @code{@@node Top} line of this manual looks like this:@refill
-
-@example
-@@node Top, Overview, (dir), (dir)
-@end example
-
-@noindent
-(You may use the Texinfo updating commands or the @code{makeinfo}
-utility to insert these `Next' and @samp{(dir)} pointers
-automatically.)@refill
-
-@xref{Install an Info File}, for more information about installing
-an Info file in the @file{info} directory.@refill
-
-The `Top' node contains the main or master menu for the document.
-
-@node makeinfo top command, Top Node Summary, First Node, node
-@comment node-name, next, previous, up
-@subsection The @code{@@top} Sectioning Command
-@findex top @r{(@@-command)}
-
-A special sectioning command, @code{@@top}, has been created for use
-with the @code{@@node Top} line. The @code{@@top} sectioning command tells
-@code{makeinfo} that it marks the `Top' node in the file. It provides
-the information that @code{makeinfo} needs to insert node
-pointers automatically. Write the @code{@@top} command at the
-beginning of the line immediately following the @code{@@node Top}
-line. Write the title on the remaining part of the same line as the
-@code{@@top} command.@refill
-
-In Info, the @code{@@top} sectioning command causes the title to appear on a
-line by itself, with a line of asterisks inserted underneath.@refill
-
-In @TeX{} and @code{texinfo-format-buffer}, the @code{@@top}
-sectioning command is merely a synonym for @code{@@unnumbered}.
-Neither of these formatters require an @code{@@top} command, and do
-nothing special with it. You can use @code{@@chapter} or
-@code{@@unnumbered} after the @code{@@node Top} line when you use
-these formatters. Also, you can use @code{@@chapter} or
-@code{@@unnumbered} when you use the Texinfo updating commands to
-create or update pointers and menus.@refill
-
-Whatever sectioning command follows an @code{@@node Top} line, whether
-it be @code{@@top} or @code{@@chapter}, the @code{@@node Top} line and
-the immediately following line and any additional text must be
-enclosed between @code{@@ifinfo} and @code{@@end ifinfo} commands.
-(@xref{Conditionals}.) This prevents the title and the accompanying
-text from appearing in printed output. Write the @code{@@ifinfo}
-command before the @code{@@node} line and write the @code{@@end ifinfo} command
-after the @code{@@top} or other sectioning command and after any
-additional text. (You can write the @code{@@end ifinfo} command after
-the @code{@@end menu} command if you like.)@refill
-
-@node Top Node Summary, , makeinfo top command, node
-@subsection The `Top' Node Summary
-@cindex @samp{@r{Top}} node summary
-
-You can help readers by writing a summary in the `Top' node, after the
-@code{@@top} line, before the main or master menu. The summary should
-briefly describe the Info file. You should also write the version
-number of the program to which the manual applies in this section. This
-helps the reader keep track of which manual is for which version of the
-program. If the manual changes more frequently than the program or is
-independent of it, you should also include an edition number for the
-manual. (The title page should also contain this information:
-see @ref{titlepage, , @code{@@titlepage}}.)@refill
-
-Put the whole of the `Top' node, including the @code{@@top} sectioning
-command line if you
-have one, between @code{@@ifinfo} and @code{@@end
-ifinfo} so none of the text appears in the printed output
-(@pxref{Conditionals, , Conditionally Visible Text}). (You may want to
-repeat the brief description from the `Top' node within @code{@@iftex}
-@dots{} @code{@@end iftex} at the beginning of the first chapter, for
-those who read the printed manual.)
-
-@node makeinfo Pointer Creation, , node, Nodes
-@section Creating Pointers with @code{makeinfo}
-@cindex Creating pointers with @code{makeinfo}
-@cindex Pointer creation with @code{makeinfo}
-@cindex Automatic pointer creation with @code{makeinfo}
-
-The @code{makeinfo} program has a feature for automatically creating
-node pointers for a hierarchically organized file that lacks
-them.@refill
-
-When you take advantage of this feature, you do not need to write the
-`Next', `Previous', and `Up' pointers after the name of a node.
-However, you must write a sectioning command, such as @code{@@chapter}
-or @code{@@section}, on the line immediately following each truncated
-@code{@@node} line. You cannot write a comment line after a node
-line; the section line must follow it immediately.@refill
-
-In addition, you must follow the `Top' @code{@@node} line with a line beginning
-with @code{@@top} to mark the `Top' node in the file. @xref{makeinfo
-top, , @code{@@top}}.
-
-Finally, you must write the name of each node (except for the `Top'
-node) in a menu that is one or more hierarchical levels above the
-node's hierarchical level.@refill
-
-This node pointer insertion feature in @code{makeinfo} is an
-alternative to the menu and pointer creation and update commands in
-Texinfo mode. (@xref{Updating Nodes and Menus}.) It is especially
-helpful to people who do not use GNU Emacs for writing Texinfo
-documents.@refill
-
-@node Menus, Cross References, Nodes, Top
-@comment node-name, next, previous, up
-@chapter Menus
-@cindex Menus
-@findex menu
-
-@dfn{Menus} contain pointers to subordinate
-nodes.@footnote{Menus can carry you to any node, regardless
-of the hierarchical structure; even to nodes in a different
-Info file. However, the GNU Emacs Texinfo mode updating
-commands work only to create menus of subordinate nodes.
-Conventionally, cross references are used to refer to other
-nodes.} In Info, you use menus to go to such nodes. Menus
-have no effect in printed manuals and do not appear in
-them.@refill
-
-By convention, a menu is put at the end of a node since a reader who
-uses the menu may not see text that follows it.@refill
-
-@ifinfo
-A node that has a menu should @emph{not} contain much text. If you
-have a lot of text and a menu, move most of the text into a new
-subnode---all but a few lines.@refill
-@end ifinfo
-@iftex
-@emph{A node that has a menu should not contain much text.} If you
-have a lot of text and a menu, move most of the text into a new
-subnode---all but a few lines. Otherwise, a reader with a terminal
-that displays only a few lines may miss the menu and its associated
-text. As a practical matter, you should locate a menu within 20 lines
-of the beginning of the node.@refill
-@end iftex
-
-@menu
-* Menu Location:: Put a menu in a short node.
-* Writing a Menu:: What is a menu?
-* Menu Parts:: A menu entry has three parts.
-* Less Cluttered Menu Entry:: Two part menu entry.
-* Menu Example:: Two and three part menu entries.
-* Other Info Files:: How to refer to a different Info file.
-@end menu
-
-@node Menu Location, Writing a Menu, , Menus
-@ifinfo
-@heading Menus Need Short Nodes
-@end ifinfo
-@cindex Menu location
-@cindex Location of menus
-@cindex Nodes for menus are short
-@cindex Short nodes for menus
-
-@ifinfo
-A reader can easily see a menu that is close to the beginning of the
-node. The node should be short. As a practical matter, you should
-locate a menu within 20 lines of the beginning of the node.
-Otherwise, a reader with a terminal that displays only a few lines may
-miss the menu and its associated text.@refill
-@end ifinfo
-
-The short text before a menu may look awkward in a printed manual. To
-avoid this, you can write a menu near the beginning of its node and
-follow the menu by an @code{@@node} line, and then an @code{@@heading}
-line located within @code{@@ifinfo} and @code{@@end ifinfo}. This way,
-the menu, @code{@@node} line, and title appear only in the Info file,
-not the printed document.@refill
-
-For example, the preceding two paragraphs follow an Info-only menu,
-@code{@@node} line, and heading, and look like this:@refill
-
-@example
-@group
-@@menu
-* Menu Location:: Put a menu in a short node.
-* Writing a Menu:: What is a menu?
-* Menu Parts:: A menu entry has three parts.
-* Less Cluttered Menu Entry:: Two part menu entry.
-* Menu Example:: Two and three part entries.
-* Other Info Files:: How to refer to a different
- Info file.
-@@end menu
-
-@@node Menu Location, Writing a Menu, , Menus
-@@ifinfo
-@@heading Menus Need Short Nodes
-@@end ifinfo
-@end group
-@end example
-
-The Texinfo file for this document contains more than a dozen
-examples of this procedure. One is at the beginning of this chapter;
-another is at the beginning of the ``Cross References'' chapter.@refill
-
-@node Writing a Menu, Menu Parts, Menu Location, Menus
-@section Writing a Menu
-@cindex Writing a menu
-@cindex Menu writing
-
-A menu consists of an @code{@@menu} command on a line by
-itself followed by menu entry lines or menu comment lines
-and then by an @code{@@end menu} command on a line by
-itself.@refill
-
-A menu looks like this:@refill
-
-@example
-@group
-@@menu
-Larger Units of Text
-
-* Files:: All about handling files.
-* Multiples: Buffers. Multiple buffers; editing
- several files at once.
-@@end menu
-@end group
-@end example
-
-In a menu, every line that begins with an @w{@samp{* }} is a
-@dfn{menu entry}. (Note the space after the asterisk.) A
-line that does not start with an @w{@samp{* }} may also
-appear in a menu. Such a line is not a menu entry but is a
-menu comment line that appears in the Info file. In
-the example above, the line @samp{Larger Units of Text} is a
-menu comment line; the two lines starting with @w{@samp{* }}
-are menu entries.
-
-@node Menu Parts, Less Cluttered Menu Entry, Writing a Menu, Menus
-@section The Parts of a Menu
-@cindex Parts of a menu
-@cindex Menu parts
-@cindex @code{@@menu} parts
-
-A menu entry has three parts, only the second of which is
-required:@refill
-
-@enumerate
-@item
-The menu entry name.
-
-@item
-The name of the node (required).
-
-@item
-A description of the item.
-@end enumerate
-
-The template for a menu entry looks like this:@refill
-
-@example
-* @var{menu-entry-name}: @var{node-name}. @var{description}
-@end example
-
-Follow the menu entry name with a single colon and follow the node name
-with tab, comma, period, or newline.@refill
-
-In Info, a user selects a node with the @kbd{m} (@code{Info-menu})
-command. The menu entry name is what the user types after the @kbd{m}
-command.@refill
-
-The third part of a menu entry is a descriptive phrase or
-sentence. Menu entry names and node names are often short; the
-description explains to the reader what the node is about. The
-description, which is optional, can spread over two or more lines. A
-useful description complements the node name rather than repeats
-it.@refill
-
-@node Less Cluttered Menu Entry, Menu Example, Menu Parts, Menus
-@comment node-name, next, previous, up
-@section Less Cluttered Menu Entry
-@cindex Two part menu entry
-@cindex Double-colon menu entries
-@cindex Menu entries with two colons
-@cindex Less cluttered menu entry
-@cindex Uncluttered menu entry
-
-When the menu entry name and node name are the same, you can write
-the name immediately after the asterisk and space at the beginning of
-the line and follow the name with two colons.@refill
-
-@need 800
-For example, write
-
-@example
-* Name:: @var{description}
-@end example
-
-@need 800
-@noindent
-instead of
-
-@example
-* Name: Name. @var{description}
-@end example
-
-You should use the node name for the menu entry name whenever possible,
-since it reduces visual clutter in the menu.@refill
-
-@node Menu Example, Other Info Files, Less Cluttered Menu Entry, Menus
-@comment node-name, next, previous, up
-@section A Menu Example
-@cindex Menu example
-@cindex Example menu
-
-A menu looks like this in Texinfo:@refill
-
-@example
-@group
-@@menu
-* menu entry name: Node name. A short description.
-* Node name:: This form is preferred.
-@@end menu
-@end group
-@end example
-
-@need 800
-@noindent
-This produces:
-
-@example
-@group
-* menu:
-
-* menu entry name: Node name. A short description.
-* Node name:: This form is preferred.
-@end group
-@end example
-
-@need 700
-Here is an example as you might see it in a Texinfo file:@refill
-
-@example
-@group
-@@menu
-Larger Units of Text
-
-* Files:: All about handling files.
-* Multiples: Buffers. Multiple buffers; editing
- several files at once.
-@@end menu
-@end group
-@end example
-
-@need 800
-@noindent
-This produces:
-
-@example
-@group
-* menu:
-Larger Units of Text
-
-* Files:: All about handling files.
-* Multiples: Buffers. Multiple buffers; editing
- several files at once.
-@end group
-@end example
-
-In this example, the menu has two entries. @samp{Files} is both a menu
-entry name and the name of the node referred to by that name.
-@samp{Multiples} is the menu entry name; it refers to the node named
-@samp{Buffers}. The line @samp{Larger Units of Text} is a comment; it
-appears in the menu, but is not an entry.@refill
-
-Since no file name is specified with either @samp{Files} or
-@samp{Buffers}, they must be the names of nodes in the same Info file
-(@pxref{Other Info Files, , Referring to Other Info Files}).@refill
-
-@node Other Info Files, , Menu Example, Menus
-@comment node-name, next, previous, up
-@section Referring to Other Info Files
-@cindex Referring to other Info files
-@cindex Nodes in other Info files
-@cindex Other Info files' nodes
-@cindex Going to other Info files' nodes
-@cindex Info; other files' nodes
-
-You can create a menu entry that enables a reader in Info to go to a
-node in another Info file by writing the file name in parentheses just
-before the node name. In this case, you should use the three-part menu
-entry format, which saves the reader from having to type the file
-name.@refill
-
-@need 800
-The format looks like this:@refill
-
-@example
-@group
-@@menu
-* @var{first-entry-name}:(@var{filename})@var{nodename}. @var{description}
-* @var{second-entry-name}:(@var{filename})@var{second-node}. @var{description}
-@@end menu
-@end group
-@end example
-
-For example, to refer directly to the @samp{Outlining} and
-@samp{Rebinding} nodes in the @cite{Emacs Manual}, you would write a
-menu like this:@refill
-
-@example
-@group
-@@menu
-* Outlining: (emacs)Outline Mode. The major mode for
- editing outlines.
-* Rebinding: (emacs)Rebinding. How to redefine the
- meaning of a key.
-@@end menu
-@end group
-@end example
-
-If you do not list the node name, but only name the file, then Info
-presumes that you are referring to the `Top' node.@refill
-
-The @file{dir} file that contains the main menu for Info has menu
-entries that list only file names. These take you directly to the `Top'
-nodes of each Info document. (@xref{Install an Info File}.)@refill
-
-@need 700
-For example:
-
-@example
-@group
-* Info: (info). Documentation browsing system.
-* Emacs: (emacs). The extensible, self-documenting
- text editor.
-@end group
-@end example
-
-@noindent
-(The @file{dir} top level directory for the Info system is an Info file,
-not a Texinfo file, but a menu entry looks the same in both types of
-file.)@refill
-
-Note that the GNU Emacs Texinfo mode menu updating commands only work
-with nodes within the current buffer, so you cannot use them to create
-menus that refer to other files. You must write such menus by hand.@refill
-
-@node Cross References, Marking Text, Menus, Top
-@comment node-name, next, previous, up
-@chapter Cross References
-@cindex Making cross references
-@cindex Cross references
-@cindex References
-
-@dfn{Cross references} are used to refer the reader to other parts of the
-same or different Texinfo files. In Texinfo, nodes are the
-places to which cross references can refer.@refill
-
-@menu
-* References:: What cross references are for.
-* Cross Reference Commands:: A summary of the different commands.
-* Cross Reference Parts:: A cross reference has several parts.
-* xref:: Begin a reference with `See' @dots{}
-* Top Node Naming:: How to refer to the beginning of another file.
-* ref:: A reference for the last part of a sentence.
-* pxref:: How to write a parenthetical cross reference.
-* inforef:: How to refer to an Info-only file.
-@end menu
-
-@node References, Cross Reference Commands, , Cross References
-@ifinfo
-@heading What References Are For
-@end ifinfo
-
-Often, but not always, a printed document should be designed so that
-it can be read sequentially. People tire of flipping back and forth
-to find information that should be presented to them as they need
-it.@refill
-
-However, in any document, some information will be too detailed for
-the current context, or incidental to it; use cross references to
-provide access to such information. Also, an on-line help system or a
-reference manual is not like a novel; few read such documents in
-sequence from beginning to end. Instead, people look up what they
-need. For this reason, such creations should contain many cross
-references to help readers find other information that they may not
-have read.@refill
-
-In a printed manual, a cross reference results in a page reference,
-unless it is to another manual altogether, in which case the cross
-reference names that manual.@refill
-
-In Info, a cross reference results in an entry that you can follow using
-the Info @samp{f} command. (@inforef{Help-Adv, Some advanced Info
-commands, info}.)@refill
-
-The various cross reference commands use nodes to define cross
-reference locations. This is evident in Info, in which a cross
-reference takes you to the specified node. @TeX{} also uses nodes to
-define cross reference locations, but the action is less obvious. When
-@TeX{} generates a @sc{dvi} file, it records nodes' page numbers and
-uses the page numbers in making references. Thus, if you are writing
-a manual that will only be printed, and will not be used on-line, you
-must nonetheless write @code{@@node} lines to name the places to which
-you make cross references.@refill
-
-@need 800
-@node Cross Reference Commands, Cross Reference Parts, References, Cross References
-@comment node-name, next, previous, up
-@section Different Cross Reference Commands
-@cindex Different cross reference commands
-
-There are four different cross reference commands:@refill
-
-@table @code
-@item @@xref
-Used to start a sentence in the printed manual saying
-@w{`See @dots{}'} or an entry in the Info file saying
-@samp{*Note @dots{}}.
-
-@item @@ref
-Used within or, more often, at the end of a sentence; same as
-@code{@@xref} for Info; produces just the reference in the printed
-manual without a preceding `See'.@refill
-
-@item @@pxref
-Used within parentheses to make a reference that suits both an Info
-file and a printed book. Starts with a lower case `see' within the
-printed manual. (@samp{p} is for `parenthesis'.)@refill
-
-@item @@inforef
-Used to make a reference to an Info file for which there is no printed
-manual.@refill
-@end table
-
-@noindent
-(The @code{@@cite} command is used to make references to books and
-manuals for which there is no corresponding Info file and, therefore,
-no node to which to point. @xref{cite, , @code{@@cite}}.)@refill
-
-@node Cross Reference Parts, xref, Cross Reference Commands, Cross References
-@comment node-name, next, previous, up
-@section Parts of a Cross Reference
-@cindex Cross reference parts
-@cindex Parts of a cross reference
-
-A cross reference command requires only one argument, which is the
-name of the node to which it refers. But a cross reference command
-may contain up to four additional arguments. By using these
-arguments, you can provide a cross reference name for Info, a topic
-description or section title for the printed output, the name of a
-different Info file, and the name of a different printed
-manual.@refill
-
-Here is a simple cross reference example:@refill
-
-@example
-@@xref@{Node name@}.
-@end example
-
-@noindent
-which produces
-
-@example
-*Note Node name::.
-@end example
-
-@noindent
-and
-
-@quotation
-See Section @var{nnn} [Node name], page @var{ppp}.
-@end quotation
-
-@need 700
-Here is an example of a full five-part cross reference:@refill
-
-@example
-@group
-@@xref@{Node name, Cross Reference Name, Particular Topic,
-info-file-name, A Printed Manual@}, for details.
-@end group
-@end example
-
-@noindent
-which produces
-
-@example
-*Note Cross Reference Name: (info-file-name)Node name,
-for details.
-@end example
-
-@noindent
-in Info and
-
-@quotation
-See section ``Particular Topic'' in @i{A Printed Manual}, for details.
-@end quotation
-
-@noindent
-in a printed book.
-
-The five possible arguments for a cross reference are:@refill
-
-@enumerate
-@item
-The node name (required). This is the node to which the
-cross reference takes you. In a printed document, the location of the
-node provides the page reference only for references within the same
-document.@refill
-
-@item
-The cross reference name for the Info reference, if it is to be different
-from the node name. If you include this argument, it argument becomes
-the first part of the cross reference. It is usually omitted.@refill
-
-@item
-A topic description or section name. Often, this is the title of the
-section. This is used as the name of the reference in the printed
-manual. If omitted, the node name is used.@refill
-
-@item
-The name of the Info file in which the reference is located, if it is
-different from the current file.@refill
-
-@item
-The name of a printed manual from a different Texinfo file.@refill
-@end enumerate
-
-The template for a full five argument cross reference looks like
-this:@refill
-
-@example
-@group
-@@xref@{@var{node-name}, @var{cross-reference-name}, @var{title-or-topic},
-@var{info-file-name}, @var{printed-manual-title}@}.
-@end group
-@end example
-
-Cross references with one, two, three, four, and five arguments are
-described separately following the description of @code{@@xref}.@refill
-
-Write a node name in a cross reference in exactly the same way as in
-the @code{@@node} line, including the same capitalization; otherwise, the
-formatters may not find the reference.@refill
-
-You can write cross reference commands within a paragraph, but note
-how Info and @TeX{} format the output of each of the various commands:
-write @code{@@xref} at the beginning of a sentence; write
-@code{@@pxref} only within parentheses, and so on.@refill
-
-@node xref, Top Node Naming, Cross Reference Parts, Cross References
-@comment node-name, next, previous, up
-@section @code{@@xref}
-@findex xref
-@cindex Cross references using @code{@@xref}
-@cindex References using @code{@@xref}
-
-The @code{@@xref} command generates a cross reference for the
-beginning of a sentence. The Info formatting commands convert it into
-an Info cross reference, which the Info @samp{f} command can use to
-bring you directly to another node. The @TeX{} typesetting commands
-convert it into a page reference, or a reference to another book or
-manual.@refill
-
-@menu
-* Reference Syntax:: What a reference looks like and requires.
-* One Argument:: @code{@@xref} with one argument.
-* Two Arguments:: @code{@@xref} with two arguments.
-* Three Arguments:: @code{@@xref} with three arguments.
-* Four and Five Arguments:: @code{@@xref} with four and five arguments.
-@end menu
-
-@node Reference Syntax, One Argument, , xref
-@ifinfo
-@subheading What a Reference Looks Like and Requires
-@end ifinfo
-
-Most often, an Info cross reference looks like this:@refill
-
-@example
-*Note @var{node-name}::.
-@end example
-
-@noindent
-or like this
-
-@example
-*Note @var{cross-reference-name}: @var{node-name}.
-@end example
-
-@noindent
-In @TeX{}, a cross reference looks like this:
-
-@example
-See Section @var{section-number} [@var{node-name}], page @var{page}.
-@end example
-
-@noindent
-or like this
-
-@example
-See Section @var{section-number} [@var{title-or-topic}], page @var{page}.
-@end example
-
-The @code{@@xref} command does not generate a period or comma to end
-the cross reference in either the Info file or the printed output.
-You must write that period or comma yourself; otherwise, Info will not
-recognize the end of the reference. (The @code{@@pxref} command works
-differently. @xref{pxref, , @code{@@pxref}}.)@refill
-
-@quotation
-@strong{Please note:} A period or comma @strong{must} follow the closing
-brace of an @code{@@xref}. It is required to terminate the cross
-reference. This period or comma will appear in the output, both in
-the Info file and in the printed manual.@refill
-@end quotation
-
-@code{@@xref} must refer to an Info node by name. Use @code{@@node}
-to define the node (@pxref{Writing a Node}).@refill
-
-@code{@@xref} is followed by several arguments inside braces, separated by
-commas. Whitespace before and after these commas is ignored.@refill
-
-A cross reference requires only the name of a node; but it may contain
-up to four additional arguments. Each of these variations produces a
-cross reference that looks somewhat different.@refill
-
-@quotation
-@strong{Please note:} Commas separate arguments in a cross reference;
-avoid including them in the title or other part lest the formatters
-mistake them for separators.@refill
-@end quotation
-
-@node One Argument, Two Arguments, Reference Syntax, xref
-@subsection @code{@@xref} with One Argument
-
-The simplest form of @code{@@xref} takes one argument, the name of
-another node in the same Info file. The Info formatters produce
-output that the Info readers can use to jump to the reference; @TeX{}
-produces output that specifies the page and section number for you.@refill
-
-@need 700
-@noindent
-For example,
-
-@example
-@@xref@{Tropical Storms@}.
-@end example
-
-@noindent
-produces
-
-@example
-*Note Tropical Storms::.
-@end example
-
-@noindent
-and
-
-@quotation
-See Section 3.1 [Tropical Storms], page 24.
-@end quotation
-
-@noindent
-(Note that in the preceding example the closing brace is followed by a
-period.)@refill
-
-You can write a clause after the cross reference, like this:@refill
-
-@example
-@@xref@{Tropical Storms@}, for more info.
-@end example
-
-@noindent
-which produces
-
-@example
-*Note Tropical Storms::, for more info.
-@end example
-
-@quotation
-See Section 3.1 [Tropical Storms], page 24, for more info.
-@end quotation
-
-@noindent
-(Note that in the preceding example the closing brace is followed by a
-comma, and then by the clause, which is followed by a period.)@refill
-
-@node Two Arguments, Three Arguments, One Argument, xref
-@subsection @code{@@xref} with Two Arguments
-
-With two arguments, the second is used as the name of the Info cross
-reference, while the first is still the name of the node to which the
-cross reference points.@refill
-
-@need 750
-@noindent
-The template is like this:
-
-@example
-@@xref@{@var{node-name}, @var{cross-reference-name}@}.
-@end example
-
-@need 700
-@noindent
-For example,
-
-@example
-@@xref@{Electrical Effects, Lightning@}.
-@end example
-
-@noindent
-produces:
-
-@example
-*Note Lightning: Electrical Effects.
-@end example
-
-@noindent
-and
-
-@quotation
-See Section 5.2 [Electrical Effects], page 57.
-@end quotation
-
-@noindent
-(Note that in the preceding example the closing brace is followed by a
-period; and that the node name is printed, not the cross reference name.)@refill
-
-You can write a clause after the cross reference, like this:@refill
-
-@example
-@@xref@{Electrical Effects, Lightning@}, for more info.
-@end example
-
-@noindent
-which produces
-@example
-*Note Lightning: Electrical Effects, for more info.
-@end example
-
-@noindent
-and
-
-@quotation
-See Section 5.2 [Electrical Effects], page 57, for more info.
-@end quotation
-
-@noindent
-(Note that in the preceding example the closing brace is followed by a
-comma, and then by the clause, which is followed by a period.)@refill
-
-@node Three Arguments, Four and Five Arguments, Two Arguments, xref
-@subsection @code{@@xref} with Three Arguments
-
-A third argument replaces the node name in the @TeX{} output. The third
-argument should be the name of the section in the printed output, or
-else state the topic discussed by that section. Often, you will want to
-use initial upper case letters so it will be easier to read when the
-reference is printed. Use a third argument when the node name is
-unsuitable because of syntax or meaning.@refill
-
-Remember to avoid placing a comma within the title or topic section of
-a cross reference, or within any other section. The formatters divide
-cross references into arguments according to the commas; a comma
-within a title or other section will divide it into two arguments. In
-a reference, you need to write a title such as ``Clouds, Mist, and
-Fog'' without the commas.@refill
-
-Also, remember to write a comma or period after the closing brace of a
-@code{@@xref} to terminate the cross reference. In the following
-examples, a clause follows a terminating comma.@refill
-
-
-@need 750
-@noindent
-The template is like this:
-
-@example
-@group
-@@xref@{@var{node-name}, @var{cross-reference-name}, @var{title-or-topic}@}.
-@end group
-@end example
-
-@need 700
-@noindent
-For example,
-
-@example
-@group
-@@xref@{Electrical Effects, Lightning, Thunder and Lightning@},
-for details.
-@end group
-@end example
-
-@noindent
-produces
-
-@example
-*Note Lightning: Electrical Effects, for details.
-@end example
-
-@noindent
-and
-
-@quotation
-See Section 5.2 [Thunder and Lightning], page 57, for details.
-@end quotation
-
-If a third argument is given and the second one is empty, then the
-third argument serves both. (Note how two commas, side by side, mark
-the empty second argument.)@refill
-
-@example
-@group
-@@xref@{Electrical Effects, , Thunder and Lightning@},
-for details.
-@end group
-@end example
-
-@noindent
-produces
-
-@example
-*Note Thunder and Lightning: Electrical Effects, for details.
-@end example
-
-@noindent
-and
-
-@quotation
-See Section 5.2 [Thunder and Lightning], page 57, for details.
-@end quotation
-
-As a practical matter, it is often best to write cross references with
-just the first argument if the node name and the section title are the
-same, and with the first and third arguments if the node name and title
-are different.@refill
-
-Here are several examples from @cite{The GAWK Manual}:@refill
-
-@smallexample
-@@xref@{Sample Program@}.
-@@xref@{Glossary@}.
-@@xref@{Case-sensitivity, ,Case-sensitivity in Matching@}.
-@@xref@{Close Output, , Closing Output Files and Pipes@},
- for more information.
-@@xref@{Regexp, , Regular Expressions as Patterns@}.
-@end smallexample
-
-@node Four and Five Arguments, , Three Arguments, xref
-@subsection @code{@@xref} with Four and Five Arguments
-
-In a cross reference, a fourth argument specifies the name of another
-Info file, different from the file in which the reference appears, and
-a fifth argument specifies its title as a printed manual.@refill
-
-Remember that a comma or period must follow the closing brace of an
-@code{@@xref} command to terminate the cross reference. In the
-following examples, a clause follows a terminating comma.@refill
-
-@need 800
-@noindent
-The template is:
-
-@example
-@group
-@@xref@{@var{node-name}, @var{cross-reference-name}, @var{title-or-topic},
-@var{info-file-name}, @var{printed-manual-title}@}.
-@end group
-@end example
-
-@need 700
-@noindent
-For example,
-
-@example
-@@xref@{Electrical Effects, Lightning, Thunder and Lightning,
-weather, An Introduction to Meteorology@}, for details.
-@end example
-
-@noindent
-produces
-
-@example
-*Note Lightning: (weather)Electrical Effects, for details.
-@end example
-
-@noindent
-The name of the Info file is enclosed in parentheses and precedes
-the name of the node.
-
-@noindent
-In a printed manual, the reference looks like this:@refill
-
-@quotation
-See section ``Thunder and Lightning'' in @i{An Introduction to
-Meteorology}, for details.
-@end quotation
-
-@noindent
-The title of the printed manual is typeset in italics; and the
-reference lacks a page number since @TeX{} cannot know to which page a
-reference refers when that reference is to another manual.@refill
-
-Often, you will leave out the second argument when you use the long
-version of @code{@@xref}. In this case, the third argument, the topic
-description, will be used as the cross reference name in Info.@refill
-
-@noindent
-The template looks like this:
-
-@example
-@@xref@{@var{node-name}, , @var{title-or-topic}, @var{info-file-name},
-@var{printed-manual-title}@}, for details.
-@end example
-
-@noindent
-which produces
-
-@example
-*Note @var{title-or-topic}: (@var{info-file-name})@var{node-name}, for details.
-@end example
-
-@noindent
-and
-
-@quotation
-See section @var{title-or-topic} in @var{printed-manual-title}, for details.
-@end quotation
-
-@need 700
-@noindent
-For example,
-
-@example
-@@xref@{Electrical Effects, , Thunder and Lightning,
-weather, An Introduction to Meteorology@}, for details.
-@end example
-
-@noindent
-produces
-
-@example
-@group
-*Note Thunder and Lightning: (weather)Electrical Effects,
-for details.
-@end group
-@end example
-
-@noindent
-and
-
-@quotation
-See section ``Thunder and Lightning'' in @i{An Introduction to
-Meteorology}, for details.
-@end quotation
-
-On rare occasions, you may want to refer to another Info file that
-is within a single printed manual---when multiple Texinfo files are
-incorporated into the same @TeX{} run but make separate Info files.
-In this case, you need to specify only the fourth argument, and not
-the fifth.@refill
-
-@node Top Node Naming, ref, xref, Cross References
-@section Naming a `Top' Node
-@cindex Naming a `Top' Node in references
-@cindex @samp{@r{Top}} node naming for references
-
-In a cross reference, you must always name a node. This means that in
-order to refer to a whole manual, you must identify the `Top' node by
-writing it as the first argument to the @code{@@xref} command. (This
-is different from the way you write a menu entry; see @ref{Other Info
-Files, , Referring to Other Info Files}.) At the same time, to
-provide a meaningful section topic or title in the printed cross
-reference (instead of the word `Top'), you must write an appropriate
-entry for the third argument to the @code{@@xref} command.
-@refill
-
-@noindent
-Thus, to make a cross reference to @cite{The GNU Make Manual},
-write:@refill
-
-@example
-@@xref@{Top, , Overview, make, The GNU Make Manual@}.
-@end example
-
-@noindent
-which produces
-
-@example
-*Note Overview: (make)Top.
-@end example
-
-@noindent
-and
-
-@quotation
-See section ``Overview'' in @i{The GNU Make Manual}.
-@end quotation
-
-@noindent
-In this example, @samp{Top} is the name of the first node, and
-@samp{Overview} is the name of the first section of the manual.@refill
-@node ref, pxref, Top Node Naming, Cross References
-@comment node-name, next, previous, up
-@section @code{@@ref}
-@cindex Cross references using @code{@@ref}
-@cindex References using @code{@@ref}
-@findex ref
-
-@code{@@ref} is nearly the same as @code{@@xref} except that it does
-not generate a `See' in the printed output, just the reference itself.
-This makes it useful as the last part of a sentence.@refill
-
-@need 700
-@noindent
-For example,
-
-@example
-For more information, see @@ref@{Hurricanes@}.
-@end example
-
-@noindent
-produces
-
-@example
-For more information, see *Note Hurricanes.
-@end example
-
-@noindent
-and
-
-@quotation
-For more information, see Section 8.2 [Hurricanes], page 123.
-@end quotation
-
-The @code{@@ref} command sometimes leads writers to express themselves
-in a manner that is suitable for a printed manual but looks awkward
-in the Info format. Bear in mind that your audience will be using
-both the printed and the Info format.@refill
-
-@need 800
-@noindent
-For example,
-
-@example
-@group
-Sea surges are described in @@ref@{Hurricanes@}.
-@end group
-@end example
-
-@need 800
-@noindent
-produces
-
-@quotation
-Sea surges are described in Section 6.7 [Hurricanes], page 72.
-@end quotation
-
-@need 800
-@noindent
-in a printed document, and the following in Info:
-
-@example
-Sea surges are described in *Note Hurricanes::.
-@end example
-
-@quotation
-@strong{Caution:} You @emph{must} write a period or comma immediately
-after an @code{@@ref} command with two or more arguments. Otherwise,
-Info will not find the end of the cross reference entry and its
-attempt to follow the cross reference will fail. As a general rule,
-you should write a period or comma after every @code{@@ref} command.
-This looks best in both the printed and the Info output.@refill
-@end quotation
-
-@node pxref, inforef, ref, Cross References
-@comment node-name, next, previous, up
-@section @code{@@pxref}
-@cindex Cross references using @code{@@pxref}
-@cindex References using @code{@@pxref}
-@findex pxref
-
-The parenthetical reference command, @code{@@pxref}, is nearly the
-same as @code{@@xref}, but you use it @emph{only} inside parentheses
-and you do @emph{not} type a comma or period after the command's
-closing brace. The command differs from @code{@@xref} in two
-ways:@refill
-
-@enumerate
-@item
-@TeX{} typesets the reference for the printed manual with a lower case
-`see' rather than an upper case `See'.@refill
-
-@item
-The Info formatting commands automatically end the reference with a
-closing colon or period.@refill
-@end enumerate
-
-Because one type of formatting automatically inserts closing
-punctuation and the other does not, you should use @code{@@pxref}
-@emph{only} inside parentheses as part of another sentence. Also, you
-yourself should not insert punctuation after the reference, as you do
-with @code{@@xref}.@refill
-
-@code{@@pxref} is designed so that the output looks right and works
-right between parentheses both in printed output and in an Info file.
-In a printed manual, a closing comma or period should not follow a
-cross reference within parentheses; such punctuation is wrong. But in
-an Info file, suitable closing punctuation must follow the cross
-reference so Info can recognize its end. @code{@@pxref} spares you
-the need to use complicated methods to put a terminator into one form
-of the output and not the other.@refill
-
-@noindent
-With one argument, a parenthetical cross reference looks like
-this:@refill
-
-@example
-@dots{} storms cause flooding (@@pxref@{Hurricanes@}) @dots{}
-@end example
-
-@need 800
-@noindent
-which produces
-
-@example
-@group
-@dots{} storms cause flooding (*Note Hurricanes::) @dots{}
-@end group
-@end example
-
-@noindent
-and
-
-@quotation
-@dots{} storms cause flooding (see Section 6.7 [Hurricanes], page 72) @dots{}
-@end quotation
-
-With two arguments, a parenthetical cross reference has this
-template:@refill
-
-@example
-@dots{} (@@pxref@{@var{node-name}, @var{cross-reference-name}@}) @dots{}
-@end example
-
-@noindent
-which produces
-
-@example
-@dots{} (*Note @var{cross-reference-name}: @var{node-name}.) @dots{}
-@end example
-
-@noindent
-and
-
-@need 1500
-@quotation
-@dots{} (see Section @var{nnn} [@var{node-name}], page @var{ppp}) @dots{}
-@end quotation
-
-@code{@@pxref} can be used with up to five arguments just like
-@code{@@xref} (@pxref{xref, , @code{@@xref}}).@refill
-
-@quotation
-@strong{Please note:} Use @code{@@pxref} only as a parenthetical
-reference. Do not try to use @code{@@pxref} as a clause in a sentence.
-It will look bad in either the Info file, the printed output, or
-both.@refill
-
-Also, parenthetical cross references look best at the ends of sentences.
-Although you may write them in the middle of a sentence, that location
-breaks up the flow of text.@refill
-@end quotation
-
-@node inforef, , pxref, Cross References
-@comment node-name, next, previous, up
-@section @code{@@inforef}
-@cindex Cross references using @code{@@inforef}
-@cindex References using @code{@@inforef}
-@findex inforef
-
-@code{@@inforef} is used for cross references to Info files for which
-there are no printed manuals. Even in a printed manual,
-@code{@@inforef} generates a reference directing the user to look in
-an Info file.@refill
-
-The command takes either two or three arguments, in the following
-order:@refill
-
-@enumerate
-@item
-The node name.
-
-@item
-The cross reference name (optional).
-
-@item
-The Info file name.
-@end enumerate
-
-@noindent
-Separate the arguments with commas, as with @code{@@xref}. Also, you
-must terminate the reference with a comma or period after the
-@samp{@}}, as you do with @code{@@xref}.@refill
-
-@noindent
-The template is:
-
-@example
-@@inforef@{@var{node-name}, @var{cross-reference-name}, @var{info-file-name}@},
-@end example
-
-@need 800
-@noindent
-Thus,
-
-@example
-@group
-@@inforef@{Expert, Advanced Info commands, info@},
-for more information.
-@end group
-@end example
-
-@need 800
-@noindent
-produces
-
-@example
-@group
-*Note Advanced Info commands: (info)Expert,
-for more information.
-@end group
-@end example
-
-@need 800
-@noindent
-and
-
-@quotation
-See Info file @file{info}, node @samp{Expert}, for more information.
-@end quotation
-
-@need 800
-@noindent
-Similarly,
-
-@example
-@group
-@@inforef@{Expert, , info@}, for more information.
-@end group
-@end example
-
-@need 800
-@noindent
-produces
-
-@example
-*Note (info)Expert::, for more information.
-@end example
-
-@need 800
-@noindent
-and
-
-@quotation
-See Info file @file{info}, node @samp{Expert}, for more information.
-@end quotation
-
-The converse of @code{@@inforef} is @code{@@cite}, which is used to
-refer to printed works for which no Info form exists. @xref{cite, ,
-@code{@@cite}}.@refill
-
-@node Marking Text, Quotations and Examples, Cross References, Top
-@comment node-name, next, previous, up
-@chapter Marking Words and Phrases
-@cindex Paragraph, marking text within
-@cindex Marking words and phrases
-@cindex Words and phrases, marking them
-@cindex Marking text within a paragraph
-
-In Texinfo, you can mark words and phrases in a variety of ways.
-The Texinfo formatters use this information to determine how to
-highlight the text.
-You can specify, for example, whether a word or phrase is a
-defining occurrence, a metasyntactic variable, or a symbol used in a
-program. Also, you can emphasize text.@refill
-
-@menu
-* Indicating:: How to indicate definitions, files, etc.
-* Emphasis:: How to emphasize text.
-@end menu
-
-@node Indicating, Emphasis, , Marking Text
-@comment node-name, next, previous, up
-@section Indicating Definitions, Commands, etc.
-@cindex Highlighting text
-@cindex Indicating commands, definitions, etc.
-
-Texinfo has commands for indicating just what kind of object a piece of
-text refers to. For example, metasyntactic variables are marked by
-@code{@@var}, and code by @code{@@code}. Since the pieces of text are
-labelled by commands that tell what kind of object they are, it is easy
-to change the way the Texinfo formatters prepare such text. (Texinfo is
-an @emph{intentional} formatting language rather than a @emph{typesetting}
-formatting language.)@refill
-
-For example, in a printed manual,
-code is usually illustrated in a typewriter font;
-@code{@@code} tells @TeX{} to typeset this text in this font. But it
-would be easy to change the way @TeX{} highlights code to use another
-font, and this change would not effect how keystroke examples are
-highlighted. If straight typesetting commands were used in the body
-of the file and you wanted to make a change, you would need to check
-every single occurrence to make sure that you were changing code and
-not something else that should not be changed.@refill
-
-@menu
-* Useful Highlighting:: Highlighting provides useful information.
-* code:: How to indicate code.
-* kbd:: How to show keyboard input.
-* key:: How to specify keys.
-* samp:: How to show a literal sequence of characters.
-* var:: How to indicate a metasyntactic variable.
-* file:: How to indicate the name of a file.
-* dfn:: How to specify a definition.
-* cite:: How to refer to a book that is not in Info.
-@end menu
-
-@node Useful Highlighting, code, , Indicating
-@ifinfo
-@subheading Highlighting Commands are Useful
-@end ifinfo
-
-The highlighting commands can be used to generate useful information
-from the file, such as lists of functions or file names. It is
-possible, for example, to write a program in Emacs Lisp (or a keyboard
-macro) to insert an index entry after every paragraph that contains
-words or phrases marked by a specified command. You could do this to
-construct an index of functions if you had not already made the
-entries.@refill
-
-The commands serve a variety of purposes:@refill
-
-@table @code
-@item @@code@{@var{sample-code}@}
-Indicate text that is a literal example of a piece of a program.@refill
-
-@item @@kbd@{@var{keyboard-characters}@}
-Indicate keyboard input.@refill
-
-@item @@key@{@var{key-name}@}
-Indicate the conventional name for a key on a keyboard.@refill
-
-@item @@samp@{@var{text}@}
-Indicate text that is a literal example of a sequence of characters.@refill
-
-@item @@var@{@var{metasyntactic-variable}@}
-Indicate a metasyntactic variable.@refill
-
-@item @@file@{@var{file-name}@}
-Indicate the name of a file.@refill
-
-@item @@dfn@{@var{term}@}
-Indicate the introductory or defining use of a term.@refill
-
-@item @@cite@{@var{reference}@}
-Indicate the name of a book.@refill
-
-@ignore
-@item @@ctrl@{@var{ctrl-char}@}
-Use for an @sc{ascii} control character.@refill
-@end ignore
-@end table
-
-@node code, kbd, Useful Highlighting, Indicating
-@comment node-name, next, previous, up
-@subsection @code{@@code}@{@var{sample-code}@}
-@findex code
-
-Use the @code{@@code} command to indicate text that is a piece of a
-program and which consists of entire syntactic tokens. Enclose the
-text in braces.@refill
-
-Thus, you should use @code{@@code} for an expression in a program, for
-the name of a variable or function used in a program, or for a
-keyword. Also, you should use @code{@@code} for the name of a
-program, such as @code{diff}, that is a name used in the machine. (You
-should write the name of a program in the ordinary text font if you
-regard it as a new English word, such as `Emacs' or `Bison'.)@refill
-
-Use @code{@@code} for environment variables such as @code{TEXINPUTS},
-and other variables.@refill
-
-Use @code{@@code} for command names in command languages that
-resemble programming languages, such as Texinfo or the shell.
-For example, @code{@@code} and @code{@@samp} are produced by writing
-@samp{@@code@{@@@@code@}} and @samp{@@code@{@@@@samp@}} in the Texinfo
-source, respectively.@refill
-
-Note, however, that you should not use @code{@@code} for shell options
-such as @samp{-c} when such options stand alone. (Use @code{@@samp}.)
-Also, an entire shell command often looks better if written using
-@code{@@samp} rather than @code{@@code}. In this case, the rule is to
-choose the more pleasing format.@refill
-
-It is incorrect to alter the case of a word inside an @code{@@code}
-command when it appears at the beginning of a sentence. Most computer
-languages are case sensitive. In C, for example, @code{Printf} is
-different from the identifier @code{printf}, and most likely is a
-misspelling of it. Even in languages which are not case sensitive, it
-is confusing to a human reader to see identifiers spelled in different
-ways. Pick one spelling and always use that. If you do not want to
-start a sentence with a command written all in lower case, you should
-rearrange the sentence.@refill
-
-Do not use the @code{@@code} command for a string of characters shorter
-than a syntactic token. If you are writing about @samp{TEXINPU}, which
-is just a part of the name for the @code{TEXINPUTS} environment
-variable, you should use @code{@@samp}.@refill
-
-In particular, you should not use the @code{@@code} command when writing
-about the characters used in a token; do not, for example, use
-@code{@@code} when you are explaining what letters or printable symbols
-can be used in the names of functions. (Use @code{@@samp}.) Also, you
-should not use @code{@@code} to mark text that is considered input to
-programs unless the input is written in a language that is like a
-programming language. For example, you should not use @code{@@code} for
-the keystroke commands of GNU Emacs (use @code{@@kbd} instead) although
-you may use @code{@@code} for the names of the Emacs Lisp functions that
-the keystroke commands invoke.@refill
-
-In the printed manual, @code{@@code} causes @TeX{} to typeset the
-argument in a typewriter face. In the Info file, it causes the Info
-formatting commands to use single quotation marks around the text.
-
-@need 700
-For example,
-
-@example
-Use @@code@{diff@} to compare two files.
-@end example
-
-@noindent
-produces this in the printed manual:@refill
-
-@quotation
-Use @code{diff} to compare two files.
-@end quotation
-@iftex
-
-@noindent
-and this in the Info file:@refill
-
-@example
-Use `diff' to compare two files.
-@end example
-@end iftex
-
-@node kbd, key, code, Indicating
-@comment node-name, next, previous, up
-@subsection @code{@@kbd}@{@var{keyboard-characters}@}
-@findex kbd
-
-Use the @code{@@kbd} command for characters of input to be typed by
-users. For example, to refer to the characters @kbd{M-a},
-write@refill
-
-@example
-@@kbd@{M-a@}
-@end example
-
-@noindent
-and to refer to the characters @kbd{M-x shell}, write@refill
-
-@example
-@@kbd@{M-x shell@}
-@end example
-
-The @code{@@kbd} command has the same effect as @code{@@code} in Info,
-but may produce a different font in a printed manual.@refill
-
-You can embed another @@-command inside the braces of an @code{@@kbd}
-command. Here, for example, is the way to describe a command that
-would be described more verbosely as ``press an @samp{r} and then
-press the @key{RET} key'':@refill
-
-@example
-@@kbd@{r @@key@{RET@}@}
-@end example
-
-@noindent
-This produces: @kbd{r @key{RET}}
-
-You also use the @code{@@kbd} command if you are spelling out the letters
-you type; for example:@refill
-
-@example
-To give the @@code@{logout@} command,
-type the characters @@kbd@{l o g o u t @@key@{RET@}@}.
-@end example
-
-@noindent
-This produces:
-
-@quotation
-To give the @code{logout} command,
-type the characters @kbd{l o g o u t @key{RET}}.
-@end quotation
-
-(Also, this example shows that you can add spaces for clarity. If you
-really want to mention a space character as one of the characters of
-input, write @kbd{@@key@{SPC@}} for it.)@refill
-
-@node key, samp, kbd, Indicating
-@comment node-name, next, previous, up
-@subsection @code{@@key}@{@var{key-name}@}
-@findex key
-
-Use the @code{@@key} command for the conventional name for a key on a
-keyboard, as in:@refill
-
-@example
-@@key@{RET@}
-@end example
-
-You can use the @code{@@key} command within the argument of an
-@code{@@kbd} command when the sequence of characters to be typed
-includes one or more keys that are described by name.@refill
-
-@need 700
-For example, to produce @kbd{C-x @key{ESC}} you would type:@refill
-
-@example
-@@kbd@{C-x @@key@{ESC@}@}
-@end example
-
-@c bob: this next sentence looks weird, having a semi-colon followed by
-@c a colon that ends the "sentence".. --mew
-Here is a list of the recommended names for keys; they are all in
-upper case:@refill
-@cindex Recommended names for keys
-@cindex Keys, recommended names
-@cindex Names recommended for keys
-@cindex Abbreviations for keys
-
-@quotation
-@table @t
-@item SPC
-Space
-@item RET
-Return
-@item LFD
-Linefeed
-@item TAB
-Tab
-@item BS
-Backspace
-@item ESC
-Escape
-@item DEL
-Delete
-@item SFT
-Shift
-@item CTL
-Control
-@item META
-Meta
-@end table
-@end quotation
-
-There are subtleties to handling words like `meta' or `ctl' that are
-names of shift keys. When mentioning a character in which the shift
-key is used, such as @kbd{Meta-a}, use the @code{@@kbd} command alone;
-do not use the @code{@@key} command; but when you are referring to the
-shift key in isolation, use the @code{@@key} command. For example,
-write @samp{@@kbd@{Meta-a@}} to produce @kbd{Meta-a} and
-@samp{@@key@{META@}} to produce @key{META}. This is because
-@kbd{Meta-a} refers to keys that you press on a keyboard, but
-@key{META} refers to a key without implying that you press it. In
-short, use @code{@@kbd} for what you do, and use @code{@@key} for what
-you talk about: ``Press @code{@@kbd@{M-a@}} to move point to the
-beginning of the sentence. The @code{@@key@{META@}} key is often in the
-lower left of the keyboard.''@refill
-@cindex META key
-
-@node samp, var, key, Indicating
-@comment node-name, next, previous, up
-@subsection @code{@@samp}@{@var{text}@}
-@findex samp
-
-Use the @code{@@samp} command to indicate text that is a literal example
-or `sample' of a sequence of characters in a file, string, pattern, etc.
-Enclose the text in braces. The argument appears within single
-quotation marks in both the Info file and the printed manual; in
-addition, it is printed in a fixed-width font.@refill
-
-@example
-To match @@samp@{foo@} at the end of the line,
-use the regexp @@samp@{foo$@}.
-@end example
-
-@noindent
-produces
-
-@quotation
-To match @samp{foo} at the end of the line, use the regexp
-@samp{foo$}.@refill
-@end quotation
-
-Any time you are referring to single characters, you should use
-@code{@@samp} unless @code{@@kbd} is more appropriate. Use
-@code{@@samp} for the names of command-line options. Also, you may use
-@code{@@samp} for entire statements in C and for entire shell
-commands---in this case, @code{@@samp} often looks better than
-@code{@@code}. Basically, @code{@@samp} is a catchall for whatever is
-not covered by @code{@@code}, @code{@@kbd}, or @code{@@key}.@refill
-
-Only include punctuation marks within braces if they are part of the
-string you are specifying. Write punctuation marks outside the braces
-if those punctuation marks are part of the English text that surrounds
-the string. In the following sentence, for example, the commas and
-period are outside of the braces:@refill
-
-@example
-@group
-In English, the vowels are @@samp@{a@}, @@samp@{e@},
-@@samp@{i@}, @@samp@{o@}, @@samp@{u@}, and sometimes
-@@samp@{y@}.
-@end group
-@end example
-
-@noindent
-This produces:
-
-@quotation
-In English, the vowels are @samp{a}, @samp{e},
-@samp{i}, @samp{o}, @samp{u}, and sometimes
-@samp{y}.
-@end quotation
-
-@node var, file, samp, Indicating
-@comment node-name, next, previous, up
-@subsection @code{@@var}@{@var{metasyntactic-variable}@}
-@findex var
-
-Use the @code{@@var} command to indicate metasyntactic variables. A
-@dfn{metasyntactic variable} is something that stands for another piece of
-text. For example, you should use a metasyntactic variable in the
-documentation of a function to describe the arguments that are passed
-to that function.@refill
-
-Do not use @code{@@var} for the names of particular variables in
-programming languages. These are specific names from a program, so
-@code{@@code} is correct for them. For example, the Lisp variable
-@code{texinfo-tex-command} is not a metasyntactic variable; it is
-properly formatted using @code{@@code}.@refill
-
-The effect of @code{@@var} in the Info file is to change the case of
-the argument to all upper case; in the printed manual, to italicize it.
-
-@need 700
-For example,
-
-@example
-To delete file @@var@{filename@},
-type @@code@{rm @@var@{filename@}@}.
-@end example
-
-@noindent
-produces
-
-@quotation
-To delete file @var{filename}, type @code{rm @var{filename}}.
-@end quotation
-
-@noindent
-(Note that @code{@@var} may appear inside @code{@@code},
-@code{@@samp}, @code{@@file}, etc.)@refill
-
-Write a metasyntactic variable all in lower case without spaces, and
-use hyphens to make it more readable. Thus, the Texinfo source for
-the illustration of how to begin a Texinfo manual looks like
-this:@refill
-
-@example
-@group
-\input texinfo
-@@@@setfilename @@var@{info-file-name@}
-@@@@settitle @@var@{name-of-manual@}
-@end group
-@end example
-
-@noindent
-This produces:
-
-@example
-@group
-\input texinfo
-@@setfilename @var{info-file-name}
-@@settitle @var{name-of-manual}
-@end group
-@end example
-
-In some documentation styles, metasyntactic variables are shown with
-angle brackets, for example:@refill
-
-@example
-@dots{}, type rm <filename>
-@end example
-
-@noindent
-However, that is not the style that Texinfo uses. (You can, of
-course, modify the sources to @TeX{} and the Info formatting commands
-to output the @code{<@dots{}>} format if you wish.)@refill
-
-@node file, dfn, var, Indicating
-@comment node-name, next, previous, up
-@subsection @code{@@file}@{@var{file-name}@}
-@findex file
-
-Use the @code{@@file} command to indicate text that is the name of a
-file, buffer, or directory, or is the name of a node in Info. You can
-also use the command for file name suffixes. Do not use @code{@@file}
-for symbols in a programming language; use @code{@@code}.
-
-Currently, @code{@@file} is equivalent to @code{@@samp} in its effects.
-For example,@refill
-
-@example
-The @@file@{.el@} files are in
-the @@file@{/usr/local/emacs/lisp@} directory.
-@end example
-
-@noindent
-produces
-
-@quotation
-The @file{.el} files are in
-the @file{/usr/local/emacs/lisp} directory.
-@end quotation
-
-@node dfn, cite, file, Indicating
-@comment node-name, next, previous, up
-@subsection @code{@@dfn}@{@var{term}@}
-@findex dfn
-
-Use the @code{@@dfn} command to identify the introductory or defining
-use of a technical term. Use the command only in passages whose
-purpose is to introduce a term which will be used again or which the
-reader ought to know. Mere passing mention of a term for the first
-time does not deserve @code{@@dfn}. The command generates italics in
-the printed manual, and double quotation marks in the Info file. For
-example:@refill
-
-@example
-Getting rid of a file is called @@dfn@{deleting@} it.
-@end example
-
-@noindent
-produces
-
-@quotation
-Getting rid of a file is called @dfn{deleting} it.
-@end quotation
-
-As a general rule, a sentence containing the defining occurrence of a
-term should be a definition of the term. The sentence does not need
-to say explicitly that it is a definition, but it should contain the
-information of a definition---it should make the meaning clear.
-
-@node cite, , dfn, Indicating
-@comment node-name, next, previous, up
-@subsection @code{@@cite}@{@var{reference}@}
-@findex cite
-
-Use the @code{@@cite} command for the name of a book that lacks a
-companion Info file. The command produces italics in the printed
-manual, and quotation marks in the Info file.@refill
-
-(If a book is written in Texinfo, it is better to use a cross reference
-command since a reader can easily follow such a reference in Info.
-@xref{xref, , @code{@@xref}}.)@refill
-@ignore
-
-@c node ctrl, , cite, Indicating
-@comment node-name, next, previous, up
-@c subsection @code{@@ctrl}@{@var{ctrl-char}@}
-@findex ctrl
-
-The @code{@@ctrl} command is seldom used. It describes an @sc{ascii}
-control character by inserting the actual character into the Info
-file.
-
-Usually, in Texinfo, you talk what you type as keyboard entry by
-describing it with @code{@@kbd}: thus, @samp{@@kbd@{C-a@}} for
-@kbd{C-a}. Use @code{@@kbd} in this way when talking about a control
-character that is typed on the keyboard by the user. When talking
-about a control character appearing in a file or a string, do not use
-@code{@@kbd} since the control character is not typed. Also, do not
-use @samp{C-} but spell out @code{control-}, as in @samp{control-a},
-to make it easier for a reader to understand.@refill
-
-@code{@@ctrl} is an idea from the beginnings of Texinfo which may not
-really fit in to the scheme of things. But there may be times when
-you want to use the command. The pattern is
-@code{@@ctrl@{@var{ch}@}}, where @var{ch} is an @sc{ascii} character
-whose control-equivalent is wanted. For example, to specify
-@samp{control-f}, you would enter@refill
-
-@example
-@@ctrl@{f@}
-@end example
-
-@noindent
-produces
-
-@quotation
-@ctrl{f}
-@end quotation
-
-In the Info file, this generates the specified control character, output
-literally into the file. This is done so a user can copy the specified
-control character (along with whatever else he or she wants) into another
-Emacs buffer and use it. Since the `control-h',`control-i', and
-`control-j' characters are formatting characters, they should not be
-indicated with @code{@@ctrl}.@refill
-
-In a printed manual, @code{@@ctrl} generates text to describe or
-identify that control character: an uparrow followed by the character
-@var{ch}.@refill
-@end ignore
-
-@node Emphasis, , Indicating, Marking Text
-@comment node-name, next, previous, up
-@section Emphasizing Text
-@cindex Emphasizing text
-
-Usually, Texinfo changes the font to mark words in the text according to
-what category the words belong to; an example is the @code{@@code} command.
-Most often, this is the best way to mark words.
-However, sometimes you will want to emphasize text without indicating a
-category. Texinfo has two commands to do this. Also, Texinfo has
-several commands that specify the font in which @TeX{} will typeset
-text. These commands have no affect on Info and only one of them,
-the @code{@@r} command, has any regular use.@refill
-
-@menu
-* emph & strong:: How to emphasize text in Texinfo.
-* Smallcaps:: How to use the small caps font.
-* Fonts:: Various font commands for printed output.
-@end menu
-
-@node emph & strong, Smallcaps, , Emphasis
-@comment node-name, next, previous, up
-@subsection @code{@@emph}@{@var{text}@} and @code{@@strong}@{@var{text}@}
-@cindex Emphasizing text, font for
-@findex emph
-@findex strong
-
-The @code{@@emph} and @code{@@strong} commands are for emphasis;
-@code{@@strong} is stronger. In printed output, @code{@@emph}
-produces @emph{italics} and @code{@@strong} produces
-@strong{bold}.@refill
-
-@need 800
-For example,
-
-@example
-@group
-@@quotation
-@@strong@{Caution:@} @@code@{rm * .[^.]*@} removes @@emph@{all@}
-files in the directory.
-@@end quotation
-@end group
-@end example
-
-@iftex
-@noindent
-produces the following in printed output:
-
-@quotation
-@strong{Caution}: @code{rm * .[^.]*} removes @emph{all}
-files in the directory.
-@end quotation
-
-@noindent
-and the following in Info:
-@end iftex
-@ifinfo
-@noindent
-produces:
-@end ifinfo
-
-@example
- *Caution*: `rm * .[^.]*' removes *all*
- files in the directory.
-@end example
-
-The @code{@@strong} command is seldom used except to mark what is, in
-effect, a typographical element, such as the word `Caution' in the
-preceding example.
-
-In the Info file, both @code{@@emph} and @code{@@strong} put asterisks
-around the text.@refill
-
-@quotation
-@strong{Caution:} Do not use @code{@@emph} or @code{@@strong} with the
-word @samp{Note}; Info will mistake the combination for a cross
-reference. Use a phrase such as @strong{Please note} or
-@strong{Caution} instead.@refill
-@end quotation
-
-@node Smallcaps, Fonts, emph & strong, Emphasis
-@subsection @code{@@sc}@{@var{text}@}: The Small Caps Font
-@cindex Small caps font
-@findex sc @r{(small caps font)}
-
-@iftex
-Use the @samp{@@sc} command to set text in the printed output in @sc{a
-small caps font} and set text in the Info file in upper case letters.@refill
-@end iftex
-@ifinfo
-Use the @samp{@@sc} command to set text in the printed output in a
-small caps font and set text in the Info file in upper case letters.@refill
-@end ifinfo
-
-Write the text between braces in lower case, like this:@refill
-
-@example
-The @@sc@{acm@} and @@sc@{ieee@} are technical societies.
-@end example
-
-@noindent
-This produces:
-
-@display
-The @sc{acm} and @sc{ieee} are technical societies.
-@end display
-
-@TeX{} typesets the small caps font in a manner that prevents the
-letters from `jumping out at you on the page'. This makes small caps
-text easier to read than text in all upper case. The Info formatting
-commands set all small caps text in upper case.@refill
-
-@ifinfo
-If the text between the braces of an @code{@@sc} command is upper case,
-@TeX{} typesets in full-size capitals. Use full-size capitals
-sparingly.@refill
-@end ifinfo
-@iftex
-If the text between the braces of an @code{@@sc} command is upper case,
-@TeX{} typesets in @sc{FULL-SIZE CAPITALS}. Use full-size capitals
-sparingly.@refill
-@end iftex
-
-You may also use the small caps font for a jargon word such as
-@sc{ato} (a @sc{nasa} word meaning `abort to orbit').@refill
-
-There are subtleties to using the small caps font with a jargon word
-such as @sc{cdr}, a word used in Lisp programming. In this case, you
-should use the small caps font when the word refers to the second and
-subsequent elements of a list (the @sc{cdr} of the list), but you
-should use @samp{@@code} when the word refers to the Lisp function of
-the same spelling.@refill
-
-@node Fonts, , Smallcaps, Emphasis
-@comment node-name, next, previous, up
-@subsection Fonts for Printing, Not Info
-@cindex Fonts for printing, not for Info
-@findex i @r{(italic font)}
-@findex b @r{(bold font)}
-@findex t @r{(typewriter font)}
-@findex r @r{(Roman font)}
-
-Texinfo provides four font commands that specify font changes in the
-printed manual but have no effect in the Info file. @code{@@i}
-requests @i{italic} font (in some versions of @TeX{}, a slanted font
-is used), @code{@@b} requests @b{bold} face, @code{@@t} requests the
-@t{fixed-width}, typewriter-style font used by @code{@@code}, and @code{@@r} requests a
-@r{roman} font, which is the usual font in which text is printed. All
-four commands apply to an argument that follows, surrounded by
-braces.@refill
-
-Only the @code{@@r} command has much use: in example programs, you
-can use the @code{@@r} command to convert code comments from the
-fixed-width font to a roman font. This looks better in printed
-output.@refill
-
-@need 700
-For example,
-
-@example
-@group
-@@lisp
-(+ 2 2) ; @@r@{Add two plus two.@}
-@@end lisp
-@end group
-@end example
-
-@noindent
-produces
-
-@lisp
-(+ 2 2) ; @r{Add two plus two.}
-@end lisp
-
-If possible, you should avoid using the other three font commands. If
-you need to use one, it probably indicates a gap in the Texinfo
-language.@refill
-
-@node Quotations and Examples, Lists and Tables, Marking Text, Top
-@comment node-name, next, previous, up
-@chapter Quotations and Examples
-
-Quotations and examples are blocks of text consisting of one or more
-whole paragraphs that are set off from the bulk of the text and
-treated differently. They are usually indented.@refill
-
-In Texinfo, you always begin a quotation or example by writing an
-@@-command at the beginning of a line by itself, and end it by writing
-an @code{@@end} command that is also at the beginning of a line by
-itself. For instance, you begin an example by writing @code{@@example}
-by itself at the beginning of a line and end the example by writing
-@code{@@end example} on a line by itself, at the beginning of that
-line.@refill
-@findex end
-
-@menu
-* Block Enclosing Commands:: Use different constructs for
- different purposes.
-* quotation:: How to write a quotation.
-* example:: How to write an example in a fixed-width font.
-* noindent:: How to prevent paragraph indentation.
-* Lisp Example:: How to illustrate Lisp code.
-* smallexample & smalllisp:: Forms for the @code{@@smallbook} option.
-* display:: How to write an example in the current font.
-* format:: How to write an example that does not narrow
- the margins.
-* exdent:: How to undo the indentation of a line.
-* flushleft & flushright:: How to push text flushleft or flushright.
-* cartouche:: How to draw cartouches around examples.
-@end menu
-
-@node Block Enclosing Commands, quotation, , Quotations and Examples
-@section The Block Enclosing Commands
-
-Here are commands for quotations and examples:@refill
-
-@table @code
-@item @@quotation
-Indicate text that is quoted. The text is filled, indented, and
-printed in a roman font by default.@refill
-
-@item @@example
-Illustrate code, commands, and the like. The text is printed
-in a fixed-width font, and indented but not filled.@refill
-
-@item @@lisp
-Illustrate Lisp code. The text is printed in a fixed-width font,
-and indented but not filled.@refill
-
-@item @@smallexample
-Illustrate code, commands, and the like. Similar to
-@code{@@example}, except that in @TeX{} this command typesets text in
-a smaller font for the smaller @code{@@smallbook} format than for the
-8.5 by 11 inch format.@refill
-
-@item @@smalllisp
-Illustrate Lisp code. Similar to @code{@@lisp}, except that
-in @TeX{} this command typesets text in a smaller font for the smaller
-@code{@@smallbook} format than for the 8.5 by 11 inch format.@refill
-
-@item @@display
-Display illustrative text. The text is indented but not filled, and
-no font is specified (so, by default, the font is roman).@refill
-
-@item @@format
-Print illustrative text. The text is not indented and not filled
-and no font is specified (so, by default, the font is roman).@refill
-@end table
-
-The @code{@@exdent} command is used within the above constructs to
-undo the indentation of a line.
-
-The @code{@@flushleft} and @code{@@flushright} commands are used to line
-up the left or right margins of unfilled text.@refill
-
-The @code{@@noindent} command may be used after one of the above
-constructs to prevent the following text from being indented as a new
-paragraph.@refill
-
-You can use the @code{@@cartouche} command within one of the above
-constructs to highlight the example or quotation by drawing a box with
-rounded corners around it. (The @code{@@cartouche} command affects
-only the printed manual; it has no effect in the Info file; see
-@ref{cartouche, , Drawing Cartouches Around Examples}.)@refill
-
-@node quotation, example, Block Enclosing Commands, Quotations and Examples
-@comment node-name, next, previous, up
-@section @code{@@quotation}
-@cindex Quotations
-@findex quotation
-
-The text of a quotation is
-processed normally except that:@refill
-
-@itemize @bullet
-@item
-the margins are closer to the center of the page, so the whole of the
-quotation is indented;@refill
-
-@item
-the first lines of paragraphs are indented no more than other
-lines;@refill
-
-@item
-in the printed output, interparagraph spacing is reduced.@refill
-@end itemize
-
-@quotation
-This is an example of text written between an @code{@@quotation}
-command and an @code{@@end quotation} command. An @code{@@quotation}
-command is most often used to indicate text that is excerpted from
-another (real or hypothetical) printed work.@refill
-@end quotation
-
-Write an @code{@@quotation} command as text on a line by itself. This
-line will disappear from the output. Mark the end of the quotation
-with a line beginning with and containing only @code{@@end quotation}.
-The @code{@@end quotation} line will likewise disappear from the
-output. Thus, the following,@refill
-
-@example
-@@quotation
-This is
-a foo.
-@@end quotation
-@end example
-
-@noindent
-produces
-
-@quotation
-This is a foo.
-@end quotation
-
-@node example, noindent, quotation, Quotations and Examples
-@comment node-name, next, previous, up
-@section @code{@@example}
-@cindex Examples, formatting them
-@cindex Formatting examples
-@findex example
-
-The @code{@@example} command is used to indicate an example that is
-not part of the running text, such as computer input or output.@refill
-
-@example
-@group
-This is an example of text written between an
-@code{@@example} command
-and an @code{@@end example} command.
-The text is indented but not filled.
-@end group
-
-@group
-In the printed manual, the text is typeset in a
-fixed-width font, and extra spaces and blank lines are
-significant. In the Info file, an analogous result is
-obtained by indenting each line with five spaces.
-@end group
-@end example
-
-Write an @code{@@example} command at the beginning of a line by itself.
-This line will disappear from the output. Mark the end of the example
-with an @code{@@end example} command, also written at the beginning of a
-line by itself. The @code{@@end example} will disappear from the
-output.@refill
-
-@need 700
-For example,
-
-@example
-@@example
-mv foo bar
-@@end example
-@end example
-
-@noindent
-produces
-
-@example
-mv foo bar
-@end example
-
-Since the lines containing @code{@@example} and @code{@@end example}
-will disappear, you should put a blank line before the
-@code{@@example} and another blank line after the @code{@@end
-example}. (Remember that blank lines between the beginning
-@code{@@example} and the ending @code{@@end example} will appear in
-the output.)@refill
-
-@quotation
-@strong{Caution:} Do not use tabs in the lines of an example (or anywhere
-else in Texinfo, for that matter)! @TeX{} treats tabs as single
-spaces, and that is not what they look like. This is a problem with
-@TeX{}. (If necessary, in Emacs, you can use @kbd{M-x untabify} to
-convert tabs in a region to multiple spaces.)@refill
-@end quotation
-
-Examples are often, logically speaking, ``in the middle'' of a
-paragraph, and the text continues after an example should not be
-indented. The @code{@@noindent} command prevents a piece of text from
-being indented as if it were a new paragraph.
-@ifinfo
-(@xref{noindent}.)
-@end ifinfo
-
-(The @code{@@code} command is used for examples of code that are
-embedded within sentences, not set off from preceding and following
-text. @xref{code, , @code{@@code}}.)
-
-@node noindent, Lisp Example, example, Quotations and Examples
-@comment node-name, next, previous, up
-@section @code{@@noindent}
-@findex noindent
-
-An example or other inclusion can break a paragraph into segments.
-Ordinarily, the formatters indent text that follows an example as a new
-paragraph. However, you can prevent this by writing @code{@@noindent}
-at the beginning of a line by itself preceding the continuation
-text.@refill
-
-@need 750
-For example:
-
-@example
-@group
-@@example
-This is an example
-@@end example
-
-@@noindent
-This line is not indented. As you can see, the
-beginning of the line is fully flush left with the line
-that follows after it. (This whole example is between
-@@code@{@@@@display@} and @@code@{@@@@end display@}.)
-@end group
-@end example
-
-@noindent
-produces
-
-@display
-@example
-This is an example
-@end example
-@tex
-% Remove extra vskip; this is a kludge to counter the effect of display
-\vskip-3.5\baselineskip
-@end tex
-
-@noindent
-This line is not indented. As you can see, the
-beginning of the line is fully flush left with the line
-that follows after it. (This whole example is between
-@code{@@display} and @code{@@end display}.)
-@end display
-
-To adjust the number of blank lines properly in the Info file output,
-remember that the line containing @code{@@noindent} does not generate a
-blank line, and neither does the @code{@@end example} line.@refill
-
-In the Texinfo source file for this manual, each line that says
-`produces' is preceded by a line containing @code{@@noindent}.@refill
-
-Do not put braces after an @code{@@noindent} command; they are not
-necessary, since @code{@@noindent} is a command used outside of
-paragraphs (@pxref{Command Syntax}).@refill
-
-@node Lisp Example, smallexample & smalllisp, noindent, Quotations and Examples
-@comment node-name, next, previous, up
-@section @code{@@lisp}
-@cindex Lisp example
-@findex lisp
-
-The @code{@@lisp} command is used for Lisp code. It is synonymous
-with the @code{@@example} command.
-
-@lisp
-This is an example of text written between an
-@code{@@lisp} command and an @code{@@end lisp} command.
-@end lisp
-
-Use @code{@@lisp} instead of @code{@@example} so as to preserve
-information regarding the nature of the example. This is useful, for
-example, if you write a function that evaluates only and all the Lisp
-code in a Texinfo file. Then you can use the Texinfo file as a Lisp
-library.@footnote{It would be straightforward to extend Texinfo to
-work in a similar fashion for C, @sc{fortran}, or other languages.}@refill
-
-Mark the end of @code{@@lisp} with @code{@@end lisp} on a line by
-itself.@refill
-
-@node smallexample & smalllisp, display, Lisp Example, Quotations and Examples
-@comment node-name, next, previous, up
-@section @code{@@smallexample} and @code{@@smalllisp}
-@cindex Small book example
-@cindex Example for a small book
-@cindex Lisp example for a small book
-@findex smallexample
-@findex smalllisp
-
-In addition to the regular @code{@@example} and @code{@@lisp} commands,
-Texinfo has two other ``example-style'' commands. These are the
-@code{@@smallexample} and @code{@@smalllisp} commands. Both these
-commands are designed for use with the @code{@@smallbook} command that
-causes @TeX{} to produce a printed manual in a 7 by 9.25 inch format
-rather than the regular 8.5 by 11 inch format.@refill
-
-In @TeX{}, the @code{@@smallexample} and @code{@@smalllisp} commands
-typeset text in a smaller font for the smaller @code{@@smallbook}
-format than for the 8.5 by 11 inch format. Consequently, many examples
-containing long lines fit in a narrower, @code{@@smallbook} page
-without needing to be shortened. Both commands typeset in the normal
-font size when you format for the 8.5 by 11 inch size; indeed,
-in this situation, the @code{@@smallexample} and @code{@@smalllisp}
-commands are defined to be the @code{@@example} and @code{@@lisp}
-commands.@refill
-
-In Info, the @code{@@smallexample} and @code{@@smalllisp} commands are
-equivalent to the @code{@@example} and @code{@@lisp} commands, and work
-exactly the same.@refill
-
-Mark the end of @code{@@smallexample} or @code{@@smalllisp} with
-@code{@@end smallexample} or @code{@@end smalllisp},
-respectively.@refill
-
-@iftex
-Here is an example written in the small font used by the
-@code{@@smallexample} and @code{@@smalllisp} commands:
-
-@ifclear smallbook
-@display
-@tex
-% Remove extra vskip; this is a kludge to counter the effect of display
-\vskip-3\baselineskip
-{\ninett
-\dots{} to make sure that you have the freedom to
-distribute copies of free software (and charge for
-this service if you wish), that you receive source
-code or can get it if you want it, that you can
-change the software or use pieces of it in new free
-programs; and that you know you can do these things.}
-@end tex
-@end display
-@end ifclear
-@end iftex
-@ifset smallbook
-@iftex
-@smallexample
-This is an example of text written between @code{@@smallexample} and
-@code{@@end smallexample}. In Info and in an 8.5 by 11 inch manual,
-this text appears in its normal size; but in a 7 by 9.25 inch manual,
-this text appears in a smaller font.
-@end smallexample
-@end iftex
-@end ifset
-@ifinfo
-@smallexample
-This is an example of text written between @code{@@smallexample} and
-@code{@@end smallexample}. In Info and in an 8.5 by 11 inch manual,
-this text appears in its normal size; but in a 7 by 9.25 inch manual,
-this text appears in a smaller font.
-@end smallexample
-@end ifinfo
-
-The @code{@@smallexample} and @code{@@smalllisp} commands make it
-easier to prepare smaller format manuals without forcing you to edit
-examples by hand to fit them onto narrower pages.@refill
-
-As a general rule, a printed document looks better if you write all the
-examples in a chapter consistently in @code{@@example} or in
-@code{@@smallexample}. Only occasionally should you mix the two
-formats.@refill
-
-@xref{smallbook, , Printing ``Small'' Books}, for more information
-about the @code{@@smallbook} command.@refill
-
-@node display, format, smallexample & smalllisp, Quotations and Examples
-@comment node-name, next, previous, up
-@section @code{@@display}
-@cindex Display formatting
-@findex display
-
-The @code{@@display} command begins a kind of example. It is like the
-@code{@@example} command
-except that, in
-a printed manual, @code{@@display} does not select the fixed-width
-font. In fact, it does not specify the font at all, so that the text
-appears in the same font it would have appeared in without the
-@code{@@display} command.@refill
-
-@display
-This is an example of text written between an @code{@@display} command
-and an @code{@@end display} command. The @code{@@display} command
-indents the text, but does not fill it.
-@end display
-
-@node format, exdent, display, Quotations and Examples
-@comment node-name, next, previous, up
-@section @code{@@format}
-@findex format
-
-The @code{@@format} command is similar to @code{@@example} except
-that, in the printed manual, @code{@@format} does not select the
-fixed-width font and does not narrow the margins.@refill
-
-@format
-This is an example of text written between an @code{@@format} command
-and an @code{@@end format} command. As you can see
-from this example,
-the @code{@@format} command does not fill the text.
-@end format
-
-@node exdent, flushleft & flushright, format, Quotations and Examples
-@section @code{@@exdent}: Undoing a Line's Indentation
-@cindex Indentation undoing
-@findex exdent
-
-The @code{@@exdent} command removes any indentation a line might have.
-The command is written at the beginning of a line and applies only to
-the text that follows the command that is on the same line. Do not use
-braces around the text. In a printed manual, the text on an
-@code{@@exdent} line is printed in the roman font.@refill
-
-@code{@@exdent} is usually used within examples. Thus,@refill
-
-@example
-@group
-@@example
-This line follows an @@@@example command.
-@@exdent This line is exdented.
-This line follows the exdented line.
-The @@@@end example comes on the next line.
-@@end group
-@end group
-@end example
-
-@noindent
-produces
-
-@example
-@group
-This line follows an @@example command.
-@exdent This line is exdented.
-This line follows the exdented line.
-The @@end example comes on the next line.
-@end group
-@end example
-
-In practice, the @code{@@exdent} command is rarely used.
-Usually, you un-indent text by ending the example and
-returning the page to its normal width.@refill
-
-@node flushleft & flushright, cartouche, exdent, Quotations and Examples
-@section @code{@@flushleft} and @code{@@flushright}
-@findex flushleft
-@findex flushright
-
-The @code{@@flushleft} and @code{@@flushright} commands line up the
-ends of lines on the left and right margins of a page,
-but do not fill the text. The commands are written on lines of their
-own, without braces. The @code{@@flushleft} and @code{@@flushright}
-commands are ended by @code{@@end flushleft} and @code{@@end
-flushright} commands on lines of their own.@refill
-
-@need 800
-For example,
-
-@example
-@group
-@@flushleft
-This text is
-written flushleft.
-@@end flushleft
-@end group
-@end example
-
-@noindent
-produces
-
-@quotation
-@flushleft
-This text is
-written flushleft.
-@end flushleft
-@end quotation
-
-
-Flushright produces the type of indentation often used in the return
-address of letters.@refill
-
-@need 800
-@noindent
-For example,
-
-@example
-@group
-@@flushright
-Here is an example of text written
-flushright. The @@code@{@@flushright@} command
-right justifies every line but leaves the
-left end ragged.
-@@end flushright
-@end group
-@end example
-
-@noindent
-produces
-
-@flushright
-Here is an example of text written
-flushright. The @code{@@flushright} command
-right justifies every line but leaves the
-left end ragged.
-@end flushright
-
-@node cartouche, , flushleft & flushright, Quotations and Examples
-@section Drawing Cartouches Around Examples
-@findex cartouche
-@cindex Box with rounded corners
-
-In a printed manual, the @code{@@cartouche} command draws a box with
-rounded corners around its contents. You can use this command to
-further highlight an example or quotation. For instance, you could
-write a manual in which one type of example is surrounded by a cartouche
-for emphasis.@refill
-
-The @code{@@cartouche} command affects only the printed manual; it has
-no effect in the Info file.@refill
-
-@need 1500
-For example,
-
-@example
-@group
-@@example
-@@cartouche
-% pwd
-/usr/local/lib/emacs/info
-@@end cartouche
-@@end example
-@end group
-@end example
-
-@noindent
-surrounds the two-line example with a box with rounded corners, in the
-printed manual.
-
-@iftex
-In a printed manual, the example looks like this:@refill
-
-@example
-@group
-@cartouche
-% pwd
-/usr/local/lib/emacs/info
-@end cartouche
-@end group
-@end example
-@end iftex
-
-@node Lists and Tables, Indices, Quotations and Examples, Top
-@comment node-name, next, previous, up
-@chapter Making Lists and Tables
-@cindex Making lists and tables
-@cindex Lists and tables, making them
-@cindex Tables and lists, making them
-
-Texinfo has several ways of making lists and two-column tables. Lists can
-be bulleted or numbered, while two-column tables can highlight the items in
-the first column.@refill
-
-@menu
-* Introducing Lists:: Texinfo formats lists for you.
-* itemize:: How to construct a simple list.
-* enumerate:: How to construct a numbered list.
-* Two-column Tables:: How to construct a two-column table.
-@end menu
-
-@ifinfo
-@node Introducing Lists, itemize, , Lists and Tables
-@heading Introducing Lists
-@end ifinfo
-
-Texinfo automatically indents the text in lists or tables, and numbers
-an enumerated list. This last feature is useful if you modify the
-list, since you do not need to renumber it yourself.@refill
-
-Numbered lists and tables begin with the appropriate @@-command at the
-beginning of a line, and end with the corresponding @code{@@end}
-command on a line by itself. The table and itemized-list commands
-also require that you write formatting information on the same line as
-the beginning @@-command.@refill
-
-Begin an enumerated list, for example, with an @code{@@enumerate}
-command and end the list with an @code{@@end enumerate} command.
-Begin an itemized list with an @code{@@itemize} command, followed on
-the same line by a formatting command such as @code{@@bullet}, and end
-the list with an @code{@@end itemize} command.@refill
-@findex end
-
-Precede each element of a list with an @code{@@item} or @code{@@itemx}
-command.@refill
-
-@sp 1
-@noindent
-Here is an itemized list of the different kinds of table and lists:@refill
-
-@itemize @bullet
-@item
-Itemized lists with and without bullets.
-
-@item
-Enumerated lists, using numbers or letters.
-
-@item
-Two-column tables with highlighting.
-@end itemize
-
-@sp 1
-@noindent
-Here is an enumerated list with the same items:@refill
-
-@enumerate
-@item
-Itemized lists with and without bullets.
-
-@item
-Enumerated lists, using numbers or letters.
-
-@item
-Two-column tables with highlighting.
-@end enumerate
-
-@sp 1
-@noindent
-And here is a two-column table with the same items and their
-@w{@@-commands}:@refill
-
-@table @code
-@item @@itemize
-Itemized lists with and without bullets.
-
-@item @@enumerate
-Enumerated lists, using numbers or letters.
-
-@item @@table
-@itemx @@ftable
-@itemx @@vtable
-Two-column tables with highlighting.
-@end table
-
-@node itemize, enumerate, Introducing Lists, Lists and Tables
-@comment node-name, next, previous, up
-@section Making an Itemized List
-@cindex Itemization
-@findex itemize
-
-The @code{@@itemize} command produces sequences of indented
-paragraphs, with a bullet or other mark inside the left margin
-at the beginning of each paragraph for which such a mark is desired.@refill
-
-Begin an itemized list by writing @code{@@itemize} at the beginning of
-a line. Follow the command, on the same line, with a character or a
-Texinfo command that generates a mark. Usually, you will write
-@code{@@bullet} after @code{@@itemize}, but you can use
-@code{@@minus}, or any character or any special symbol that results in
-a single character in the Info file. (When you write @code{@@bullet}
-or @code{@@minus} after an @code{@@itemize} command, you may omit the
-@samp{@{@}}.)@refill
-
-Write the text of the indented paragraphs themselves after the
-@code{@@itemize}, up to another line that says @code{@@end
-itemize}.@refill
-
-Before each paragraph for which a mark in the margin is desired, write
-a line that says just @code{@@item}. Do not write any other text on this
-line.@refill
-@findex item
-
-Usually, you should put a blank line before an @code{@@item}. This
-puts a blank line in the Info file. (@TeX{} inserts the proper
-interline whitespace in either case.) Except when the entries are
-very brief, these blank lines make the list look better.@refill
-
-Here is an example of the use of @code{@@itemize}, followed by the
-output it produces. Note that @code{@@bullet} produces an @samp{*} in
-Info and a round dot in @TeX{}.@refill
-
-@example
-@group
-@@itemize @@bullet
-@@item
-Some text for foo.
-
-@@item
-Some text
-for bar.
-@@end itemize
-@end group
-@end example
-
-@noindent
-This produces:
-
-@quotation
-@itemize @bullet
-@item
-Some text for foo.
-
-@item
-Some text
-for bar.
-@end itemize
-@end quotation
-
-Itemized lists may be embedded within other itemized lists. Here is a
-list marked with dashes embedded in a list marked with bullets:@refill
-
-@example
-@group
-@@itemize @@bullet
-@@item
-First item.
-
-@@itemize @@minus
-@@item
-Inner item.
-
-@@item
-Second inner item.
-@@end itemize
-
-@@item
-Second outer item.
-@@end itemize
-@end group
-@end example
-
-@noindent
-This produces:
-
-@quotation
-@itemize @bullet
-@item
-First item.
-
-@itemize @minus
-@item
-Inner item.
-
-@item
-Second inner item.
-@end itemize
-
-@item
-Second outer item.
-@end itemize
-@end quotation
-
-@node enumerate, Two-column Tables, itemize, Lists and Tables
-@comment node-name, next, previous, up
-@section Making a Numbered or Lettered List
-@cindex Enumeration
-@findex enumerate
-
-@code{@@enumerate} is like @code{@@itemize} except that the marks in
-the left margin contain successive integers or letters.
-(@xref{itemize, , @code{@@itemize}}.)@refill
-
-Write the @code{@@enumerate} command at the beginning of a line.
-The command does not require an argument, but accepts either a number or
-a letter as an option.
-Without an argument, @code{@@enumerate} starts the list
-with the number 1. With a numeric argument, such as 3,
-the command starts the list with that number.
-With an upper or lower case letter, such as @kbd{a} or @kbd{A},
-the command starts the list with that letter.@refill
-
-Write the text of the enumerated list in the same way you write an
-itemized list: put @code{@@item} on a line of its own before the start of
-each paragraph that you want enumerated. Do not write any other text on
-the line beginning with @code{@@item}.@refill
-
-You should put a blank line between entries in the list.
-This generally makes it easier to read the Info file.@refill
-
-@need 1500
-Here is an example of @code{@@enumerate} without an argument:@refill
-
-@example
-@group
-@@enumerate
-@@item
-Underlying causes.
-
-@@item
-Proximate causes.
-@@end enumerate
-@end group
-@end example
-
-@noindent
-This produces:
-
-@enumerate
-@item
-Underlying causes.
-
-@item
-Proximate causes.
-@end enumerate
-@sp 1
-Here is an example with an argument of @kbd{3}:@refill
-@sp 1
-@example
-@group
-@@enumerate 3
-@@item
-Predisposing causes.
-
-@@item
-Precipitating causes.
-
-@@item
-Perpetuating causes.
-@@end enumerate
-@end group
-@end example
-
-@noindent
-This produces:
-
-@enumerate 3
-@item
-Predisposing causes.
-
-@item
-Precipitating causes.
-
-@item
-Perpetuating causes.
-@end enumerate
-@sp 1
-Here is a brief summary of the alternatives. The summary is constructed
-using @code{@@enumerate} with an argument of @kbd{a}.@refill
-@sp 1
-@enumerate a
-@item
-@code{@@enumerate}
-
-Without an argument, produce a numbered list, starting with the number
-1.@refill
-
-@item
-@code{@@enumerate @var{positive-integer}}
-
-With a (positive) numeric argument, start a numbered list with that
-number. You can use this to continue a list that you interrupted with
-other text.@refill
-
-@item
-@code{@@enumerate @var{upper-case-letter}}
-
-With an upper case letter as argument, start a list
-in which each item is marked
-by a letter, beginning with that upper case letter.@refill
-
-@item
-@code{@@enumerate @var{lower-case-letter}}
-
-With a lower case letter as argument, start a list
-in which each item is marked by
-a letter, beginning with that lower case letter.@refill
-@end enumerate
-
-You can also nest enumerated lists, as in an outline.@refill
-
-@node Two-column Tables, , enumerate, Lists and Tables
-@comment node-name, next, previous, up
-@section Making a Two-column Table
-@cindex Tables, making two-column
-@findex table
-
-@code{@@table} is similar to @code{@@itemize}, but the command allows
-you to specify a name or heading line for each item. (@xref{itemize,
-, @code{@@itemize}}.) The @code{@@table} command is used to produce
-two-column tables, and is especially useful for glossaries and
-explanatory exhibits.@refill
-
-@menu
-* table:: How to construct a two-column table.
-* ftable vtable:: How to construct a two-column table
- with automatic indexing.
-* itemx:: How to put more entries in the first column.
-@end menu
-
-@ifinfo
-@node table, ftable vtable, , Two-column Tables
-@subheading Using the @code{@@table} Command
-
-Use the @code{@@table} command to produce two-column tables.@refill
-@end ifinfo
-
-Write the @code{@@table} command at the beginning of a line and follow
-it on the same line with an argument that is a Texinfo command such as
-@code{@@code}, @code{@@samp}, @code{@@var}, or @code{@@kbd}.
-Although these commands are usually followed by arguments in braces,
-in this case you use the command name without an argument because
-@code{@@item} will supply the argument. This command will be applied
-to the text that goes into the first column of each item and
-determines how it will be highlighted. For example, @code{@@samp}
-will cause the text in the first column to be highlighted with an
-@code{@@samp} command.@refill
-
-You may also choose to use the @code{@@asis} command as an argument to
-@code{@@table}. @code{@@asis} is a command that does nothing; if you use this
-command after @code{@@table}, @TeX{} and the Info formatting commands
-output the first column entries without added highlighting (`as
-is').@refill
-
-(The @code{@@table} command may work with other commands besides those
-listed here. However, you can only use commands
-that normally take arguments in braces.)@refill
-
-Begin each table entry with an @code{@@item} command at the beginning
-of a line. Write the first column text on the same line as the
-@code{@@item} command. Write the second column text on the line
-following the @code{@@item} line and on subsequent lines. (You do not
-need to type anything for an empty second column entry.) You may
-write as many lines of supporting text as you wish, even several
-paragraphs. But only text on the same line as the @code{@@item} will
-be placed in the first column.@refill
-@findex item
-
-Normally, you should put a blank line before an @code{@@item} line.
-This puts a blank like in the Info file. Except when the entries are
-very brief, a blank line looks better.@refill
-
-@need 1500
-The following table, for example, highlights the text in the first
-column with an @code{@@samp} command:@refill
-
-@example
-@group
-@@table @@samp
-@@item foo
-This is the text for
-@@samp@{foo@}.
-
-@@item bar
-Text for @@samp@{bar@}.
-@@end table
-@end group
-@end example
-
-@noindent
-This produces:
-
-@table @samp
-@item foo
-This is the text for
-@samp{foo}.
-@item bar
-Text for @samp{bar}.
-@end table
-
-If you want to list two or more named items with a single block of
-text, use the @code{@@itemx} command. (@xref{itemx, ,
-@code{@@itemx}}.)@refill
-
-@node ftable vtable, itemx, table, Two-column Tables
-@comment node-name, next, previous, up
-@subsection @code{@@ftable} and @code{@@vtable}
-@cindex Tables with indexes
-@cindex Indexing table entries automatically
-@findex ftable
-@findex vtable
-
-The @code{@@ftable} and @code{@@vtable} commands are the same as the
-@code{@@table} command except that @code{@@ftable} automatically enters
-each of the items in the first column of the table into the index of
-functions and @code{@@vtable} automatically enters each of the items in
-the first column of the table into the index of variables. This
-simplifies the task of creating indices. Only the items on the same
-line as the @code{@@item} commands are indexed, and they are indexed in
-exactly the form that they appear on that line. @xref{Indices, ,
-Creating Indices}, for more information about indices.@refill
-
-Begin a two-column table using @code{@@ftable} or @code{@@vtable} by
-writing the @@-command at the beginning of a line, followed on the same
-line by an argument that is a Texinfo command such as @code{@@code},
-exactly as you would for an @code{@@table} command; and end the table
-with an @code{@@end ftable} or @code{@@end vtable} command on a line by
-itself.
-
-@node itemx, , ftable vtable, Two-column Tables
-@comment node-name, next, previous, up
-@subsection @code{@@itemx}
-@cindex Two named items for @code{@@table}
-@findex itemx
-
-Use the @code{@@itemx} command inside a table when you have two or
-more first column entries for the same item, each of which should
-appear on a line of its own. Use @code{@@itemx} for all but the first
-entry. The @code{@@itemx} command works exactly like @code{@@item}
-except that it does not generate extra vertical space above the first
-column text.@refill
-
-@need 1000
-For example,
-
-@example
-@group
-@@table @@code
-@@item upcase
-@@itemx downcase
-These two functions accept a character or a string as
-argument, and return the corresponding upper case (lower
-case) character or string.
-@@end table
-@end group
-@end example
-
-@noindent
-This produces:
-
-@table @code
-@item upcase
-@itemx downcase
-These two functions accept a character or a string as
-argument, and return the corresponding upper case (lower
-case) character or string.@refill
-@end table
-
-@noindent
-(Note also that this example illustrates multi-line supporting text in
-a two-column table.)@refill
-
-@node Indices, Insertions, Lists and Tables, Top
-@comment node-name, next, previous, up
-@chapter Creating Indices
-@cindex Indices
-@cindex Creating indices
-
-Using Texinfo, you can generate indices without having to sort and
-collate entries manually. In an index, the entries are listed in
-alphabetical order, together with information on how to find the
-discussion of each entry. In a printed manual, this information
-consists of page numbers. In an Info file, this information is a menu
-entry leading to the first node referenced.@refill
-
-Texinfo provides several predefined kinds of index: an index
-for functions, an index for variables, an index for concepts, and so
-on. You can combine indices or use them for other than their
-canonical purpose. If you wish, you can define your own indices.@refill
-
-@menu
-* Index Entries:: Choose different words for index entries.
-* Predefined Indices:: Use different indices for different kinds
- of entry.
-* Indexing Commands:: How to make an index entry.
-* Combining Indices:: How to combine indices.
-* New Indices:: How to define your own indices.
-@end menu
-
-@node Index Entries, Predefined Indices, , Indices
-@comment node-name, next, previous, up
-@section Making Index Entries
-@cindex Index entries, making
-@cindex Entries, making index
-
-When you are making index entries, it is good practice to think of the
-different ways people may look for something. Different people
-@emph{do not} think of the same words when they look something up. A
-helpful index will have items indexed under all the different words
-that people may use. For example, one reader may think it obvious that
-the two-letter names for indices should be listed under ``Indices,
-two-letter names'', since the word ``Index'' is the general concept.
-But another reader may remember the specific concept of two-letter
-names and search for the entry listed as ``Two letter names for
-indices''. A good index will have both entries and will help both
-readers.@refill
-
-Like typesetting, the construction of an index is a highly skilled,
-professional art, the subtleties of which are not appreciated until you
-need to do it yourself.@refill
-
-@xref{Printing Indices & Menus}, for information about printing an index
-at the end of a book or creating an index menu in an Info file.@refill
-
-@node Predefined Indices, Indexing Commands, Index Entries, Indices
-@comment node-name, next, previous, up
-@section Predefined Indices
-
-Texinfo provides six predefined indices:@refill
-
-@itemize @bullet
-@item
-A @dfn{concept index} listing concepts that are discussed.@refill
-
-@item
-A @dfn{function index} listing functions (such as entry points of
-libraries).@refill
-
-@item
-A @dfn{variables index} listing variables (such as global variables
-of libraries).@refill
-
-@item
-A @dfn{keystroke index} listing keyboard commands.@refill
-
-@item
-A @dfn{program index} listing names of programs.@refill
-
-@item
-A @dfn{data type index} listing data types (such as structures defined in
-header files).@refill
-@end itemize
-
-@noindent
-Not every manual needs all of these, and most manuals use two or three
-of them. This manual has two indices: a
-concept index and an @@-command index (that is actually the function
-index but is called a command index in the chapter heading). Two or
-more indices can be combined into one using the @code{@@synindex} or
-@code{@@syncodeindex} commands. @xref{Combining Indices}.@refill
-
-@node Indexing Commands, Combining Indices, Predefined Indices, Indices
-@comment node-name, next, previous, up
-@section Defining the Entries of an Index
-@cindex Defining indexing entries
-@cindex Index entries
-@cindex Entries for an index
-@cindex Specifying index entries
-@cindex Creating index entries
-
-The data to make an index come from many individual indexing commands
-scattered throughout the Texinfo source file. Each command says to add
-one entry to a particular index; after formatting, the index will give
-the current page number or node name as the reference.@refill
-
-An index entry consists of an indexing command at the beginning of a
-line followed, on the rest of the line, by the entry.@refill
-
-For example, this section begins with the following five entries for
-the concept index:@refill
-
-@example
-@@cindex Defining indexing entries
-@@cindex Index entries
-@@cindex Entries for an index
-@@cindex Specifying index entries
-@@cindex Creating index entries
-@end example
-
-Each predefined index has its own indexing command---@code{@@cindex}
-for the concept index, @code{@@findex} for the function index, and so
-on.@refill
-
-@cindex Capitalizing index entries
-@cindex Index entry capitalization
-The usual convention is to capitalize the first word of each index
-entry, unless that word is the name of a function, variable, or other
-such entity that should not be capitalized. Thus, if you are
-documenting Emacs Lisp, you should usually capitalize entries in
-the concept index, but not those in the function index.
-However, if your
-concept index entries are consistently short (one or two words each)
-it may look better for each regular entry to start with a lower case
-letter. Whichever convention you adapt, please be consistent!
-
-By default, entries for a concept index are printed in a small roman
-font and entries for the other indices are printed in a small
-@code{@@code} font. You may change the way part of an entry is
-printed with the usual Texinfo commands, such as @code{@@file} for
-file names and @code{@@emph} for emphasis (@pxref{Marking
-Text}).@refill
-@cindex Index font types
-
-@cindex Predefined indexing commands
-@cindex Indexing commands, predefined
-The six indexing commands for predefined indices are:
-
-@table @code
-@item @@cindex @var{concept}
-@findex cindex
-Make an entry in the concept index for @var{concept}.@refill
-
-@item @@findex @var{function}
-@findex findex
-Make an entry in the function index for @var{function}.@refill
-
-@item @@vindex @var{variable}
-@findex vindex
-Make an entry in the variable index for @var{variable}.@refill
-
-@item @@kindex @var{keystroke}
-@findex kindex
-Make an entry in the key index for @var{keystroke}.@refill
-
-@item @@pindex @var{program}
-@findex pindex
-Make an entry in the program index for @var{program}.@refill
-
-@item @@tindex @var{data type}
-@findex tindex
-Make an entry in the data type index for @var{data type}.@refill
-@end table
-
-@quotation
-@strong{Caution:} Do not use a colon in an index entry. In Info, a
-colon separates the menu entry name from the node name. An extra
-colon confuses Info.
-@xref{Menu Parts, , The Parts of a Menu},
-for more information about the structure of a menu entry.@refill
-@end quotation
-
-If you write several identical index entries in different places in a
-Texinfo file, the index in the printed manual will list all the pages to
-which those entries refer. However, the index in the Info file will
-list @strong{only} the node that references the @strong{first} of those
-index entries. Therefore, it is best to write indices in which each
-entry refers to only one place in the Texinfo file. Fortunately, this
-constraint is a feature rather than a loss since it means that the index
-will be easy to use. Otherwise, you could create an index that lists
-several pages for one entry and your reader would not know to which page
-to turn. If you have two identical entries for one topic, change the
-topics slightly, or qualify them to indicate the difference.@refill
-
-You are not actually required to use the predefined indices for their
-canonical purposes. For example, suppose you wish to index some C
-preprocessor macros. You could put them in the function index along
-with actual functions, just by writing @code{@@findex} commands for
-them; then, when you print the ``Function Index'' as an unnumbered
-chapter, you could give it the title `Function and Macro Index' and
-all will be consistent for the reader. Or you could put the macros in
-with the data types by writing @code{@@tindex} commands for them, and
-give that index a suitable title so the reader will understand.
-(@xref{Printing Indices & Menus}.)@refill
-
-@node Combining Indices, New Indices, Indexing Commands, Indices
-@comment node-name, next, previous, up
-@section Combining Indices
-@cindex Combining indices
-@cindex Indices, combining them
-
-Sometimes you will want to combine two disparate indices such as functions
-and concepts, perhaps because you have few enough of one of them that
-a separate index for them would look silly.@refill
-
-You could put functions into the concept index by writing
-@code{@@cindex} commands for them instead of @code{@@findex} commands,
-and produce a consistent manual by printing the concept index with the
-title `Function and Concept Index' and not printing the `Function
-Index' at all; but this is not a robust procedure. It works only if
-your document is never included as part of another
-document that is designed to have a separate function index; if your
-document were to be included with such a document, the functions from
-your document and those from the other would not end up together.
-Also, to make your function names appear in the right font in the
-concept index, you would need to enclose every one of them between
-the braces of @code{@@code}.@refill
-
-@menu
-* syncodeindex:: How to merge two indices, using @code{@@code}
- font for the merged-from index.
-* synindex:: How to merge two indices, using the
- default font of the merged-to index.
-@end menu
-
-@node syncodeindex, synindex, , Combining Indices
-@subsubsection @code{@@syncodeindex}
-@findex syncodeindex
-
-When you want to combine functions and concepts into one index, you
-should index the functions with @code{@@findex} and index the concepts
-with @code{@@cindex}, and use the @code{@@syncodeindex} command to
-redirect the function index entries into the concept index.@refill
-@findex syncodeindex
-
-The @code{@@syncodeindex} command takes two arguments; they are the name
-of the index to redirect, and the name of the index to redirect it to.
-The template looks like this:@refill
-
-@example
-@@syncodeindex @var{from} @var{to}
-@end example
-
-@cindex Predefined names for indices
-@cindex Two letter names for indices
-@cindex Indices, two letter names
-@cindex Names for indices
-For this purpose, the indices are given two-letter names:@refill
-
-@table @samp
-@item cp
-concept index
-@item fn
-function index
-@item vr
-variable index
-@item ky
-key index
-@item pg
-program index
-@item tp
-data type index
-@end table
-
-Write an @code{@@syncodeindex} command before or shortly after the
-end-of-header line at the beginning of a Texinfo file. For example,
-to merge a function index with a concept index, write the
-following:@refill
-
-@example
-@@syncodeindex fn cp
-@end example
-
-@noindent
-This will cause all entries designated for the function index to merge
-in with the concept index instead.@refill
-
-To merge both a variables index and a function index into a concept
-index, write the following:@refill
-
-@example
-@group
-@@syncodeindex vr cp
-@@syncodeindex fn cp
-@end group
-@end example
-
-@cindex Fonts for indices
-The @code{@@syncodeindex} command puts all the entries from the `from'
-index (the redirected index) into the @code{@@code} font, overriding
-whatever default font is used by the index to which the entries are
-now directed. This way, if you direct function names from a function
-index into a concept index, all the function names are printed in the
-@code{@@code} font as you would expect.@refill
-
-@node synindex, , syncodeindex, Combining Indices
-@subsubsection @code{@@synindex}
-@findex synindex
-
-The @code{@@synindex} command is nearly the same as the
-@code{@@syncodeindex} command, except that it does not put the
-`from' index entries into the @code{@@code} font; rather it puts
-them in the roman font. Thus, you use @code{@@synindex} when you
-merge a concept index into a function index.@refill
-
-@xref{Printing Indices & Menus}, for information about printing an index
-at the end of a book or creating an index menu in an Info file.@refill
-
-@node New Indices, , Combining Indices, Indices
-@section Defining New Indices
-@cindex Defining new indices
-@cindex Indices, defining new
-@cindex New index defining
-@findex defindex
-@findex defcodeindex
-
-In addition to the predefined indices, you may use the
-@code{@@defindex} and @code{@@defcodeindex} commands to define new
-indices. These commands create new indexing @@-commands with which
-you mark index entries. The @code{@@defindex }command is used like
-this:@refill
-
-@example
-@@defindex @var{name}
-@end example
-
-The name of an index should be a two letter word, such as @samp{au}.
-For example:@refill
-
-@example
-@@defindex au
-@end example
-
-This defines a new index, called the @samp{au} index. At the same
-time, it creates a new indexing command, @code{@@auindex}, that you
-can use to make index entries. Use the new indexing command just as
-you would use a predefined indexing command.@refill
-
-For example, here is a section heading followed by a concept index
-entry and two @samp{au} index entries.@refill
-
-@example
-@@section Cognitive Semantics
-@@cindex kinesthetic image schemas
-@@auindex Johnson, Mark
-@@auindex Lakoff, George
-@end example
-
-@noindent
-(Evidently, @samp{au} serves here as an abbreviation for ``author''.)
-Texinfo constructs the new indexing command by concatenating the name
-of the index with @samp{index}; thus, defining an @samp{au} index
-leads to the automatic creation of an @code{@@auindex} command.@refill
-
-Use the @code{@@printindex} command to print the index, as you do with
-the predefined indices. For example:@refill
-
-@example
-@group
-@@node Author Index, Subject Index, , Top
-@@unnumbered Author Index
-
-@@printindex au
-@end group
-@end example
-
-The @code{@@defcodeindex} is like the @code{@@defindex} command, except
-that, in the printed output, it prints entries in an @code{@@code} font
-instead of a roman font. Thus, it parallels the @code{@@findex} command
-rather than the @code{@@cindex} command.@refill
-
-You should define new indices within or right after the end-of-header
-line of a Texinfo file, before any @code{@@synindex} or
-@code{@@syncodeindex} commands (@pxref{Header}).@refill
-
-@node Insertions, Glyphs, Indices, Top
-@comment node-name, next, previous, up
-@chapter Special Insertions
-@cindex Inserting special characters and symbols
-@cindex Special insertions
-
-Texinfo provides several commands for formatting dimensions, for
-inserting single characters that have special meaning in Texinfo, such
-as braces, and for inserting special graphic symbols that do not
-correspond to characters, such as dots and bullets.@refill
-
-@iftex
-These are:
-
-@itemize @bullet
-@item
-Braces, @samp{@@} and periods.
-
-@item
-Format a dimension, such as @samp{12@dmn{pt}}.
-
-@item
-Dots and bullets.
-
-@item
-The @TeX{} logo and the copyright symbol.
-
-@item
-A minus sign.
-@end itemize
-@end iftex
-
-@menu
-* Braces Atsigns Periods:: How to insert braces, @samp{@@} and periods.
-* dmn:: How to format a dimension.
-* Dots Bullets:: How to insert dots and bullets.
-* TeX and copyright:: How to insert the @TeX{} logo
- and the copyright symbol.
-* minus:: How to insert a minus sign.
-@end menu
-
-@node Braces Atsigns Periods, dmn, , Insertions
-@comment node-name, next, previous, up
-@section Inserting @samp{@@}, Braces, and Periods
-@cindex Inserting @@, braces, and periods
-@cindex Braces, inserting
-@cindex Periods, inserting
-@cindex Single characters, commands to insert
-@cindex Commands to insert single characters
-
-@samp{@@} and curly braces are special characters in Texinfo. To
-insert these characters so they appear in text, you must put an @samp{@@} in front
-of these characters to prevent Texinfo from misinterpreting them.@refill
-
-Periods are also special. Depending on whether the period is inside
-or at the end of a sentence, less or more space is inserted after a
-period in a typeset manual. Since it is not always possible for
-Texinfo to determine when a period ends a sentence and when it is used
-in an abbreviation, special commands are needed in some circumstances.
-(Usually, Texinfo can guess how to handle periods, so you do not need
-to use the special commands; you just enter a period as you would if
-you were using a typewriter, which means you put two spaces after the
-period, question mark, or exclamation mark that ends a
-sentence.)@refill
-
-Do not put braces after any of these commands; they are not
-necessary.@refill
-
-@menu
-* Inserting An Atsign::
-* Inserting Braces:: How to insert @samp{@{} and @samp{@}}
-* Controlling Spacing:: How to insert the right amount of space
- after punctuation within a sentence.
-@end menu
-
-@node Inserting An Atsign, Inserting Braces, , Braces Atsigns Periods
-@comment node-name, next, previous, up
-@subsection Inserting @samp{@@} with @@@@
-@findex @@ @r{(single @samp{@@})}
-
-@code{@@@@} stands for a single @samp{@@} in either printed or Info
-output.@refill
-
-Do not put braces after an @code{@@@@} command.@refill
-
-@node Inserting Braces, Controlling Spacing, Inserting An Atsign, Braces Atsigns Periods
-@comment node-name, next, previous, up
-@subsection Inserting @samp{@{} and @samp{@}}with @@@{ and @@@}
-@findex @{ @r{(single @samp{@{})}
-@findex @} @r{(single @samp{@}})}
-
-@code{@@@{} stands for a single @samp{@{} in either printed or Info
-output.@refill
-
-@code{@@@}} stands for a single @samp{@}} in either printed or Info
-output.@refill
-
-Do not put braces after either an @code{@@@{} or an @code{@@@}}
-command.@refill
-
-@node Controlling Spacing, , Inserting Braces, Braces Atsigns Periods
-@comment node-name, next, previous, up
-@subsection Spacing After Colons and Periods
-@findex : @r{(suppress widening)}
-
-Use the @code{@@:}@: command after a period, question mark,
-exclamation mark, or colon that should not be followed by extra space.
-For example, use @code{@@:}@: after periods that end abbreviations
-which are not at the ends of sentences. @code{@@:}@: has no effect on
-the Info file output.@refill
-
-@need 700
-For example,
-
-@example
-The s.o.p.@@: has three parts @dots{}
-The s.o.p. has three parts @dots{}
-@end example
-
-@noindent
-@ifinfo
-produces
-@end ifinfo
-@iftex
-produces the following. If you look carefully at this printed output,
-you will see a little more whitespace after @samp{s.o.p.} in the second
-line.@refill
-@end iftex
-
-@quotation
-The s.o.p.@: has three parts @dots{}@*
-The s.o.p. has three parts @dots{}
-@end quotation
-
-@noindent
-@kbd{@@:} has no effect on the Info output. (@samp{s.o.p} is an acronym
-for ``Standard Operating Procedure''.)
-
-@findex . @r{(true end of sentence)}
-Use @code{@@.}@: instead of a period at the end of a sentence that
-ends with a single capital letter. Otherwise, @TeX{} will think the
-letter is an abbreviation and will not insert the correct
-end-of-sentence spacing. Here is an example:@refill
-
-@example
-Give it to M.I.B. and to M.E.W@@. Also, give it to R.J.C@@.
-Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
-@end example
-
-@noindent
-@ifinfo
-produces
-@end ifinfo
-@iftex
-produces the following. If you look carefully at this printed output,
-you will see a little more whitespace after the @samp{W} in the first
-line.@refill
-@end iftex
-
-@quotation
-Give it to M.I.B. and to M.E.W@. Also, give it to R.J.C@.@*
-Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
-@end quotation
-
-In the Info file output, @code{@@.}@: is equivalent to a simple
-@samp{.}.@refill
-
-The meanings of @code{@@:}@: and @code{@@.}@: in Texinfo are designed
-to work well with the Emacs sentence motion commands. This made it
-necessary for them to be incompatible with some other formatting
-systems that use @@-commands.@refill
-
-Do not put braces after either an @code{@@:} or an @code{@@.} command.@refill
-
-@node dmn, Dots Bullets, Braces Atsigns Periods, Insertions
-@section @code{@@dmn}@{@var{dimension}@}: Format a Dimension
-@cindex Thin space between number, dimension
-@cindex Dimension formatting
-@cindex Format a dimension
-@findex dmn
-
-At times, you may want to write @samp{12@dmn{pt}} or
-@samp{8.5@dmn{in}} with little or no space between the number and the
-abbreviation for the dimension. You can use the @code{@@dmn} command
-to do this. On seeing the command, @TeX{} inserts just enough space
-for proper typesetting; the Info formatting commands insert no space
-at all, since the Info file does not require it.@refill
-
-To use the @code{@@dmn} command, write the number and then follow it
-immediately, with no intervening space, by @code{@@dmn}, and then by
-the dimension within braces.@refill
-
-@need 700
-@noindent
-For example,
-
-@example
-A4 paper is 8.27@@dmn@{in@} wide.
-@end example
-
-@noindent
-produces
-
-@quotation
-A4 paper is 8.27@dmn{in} wide.
-@end quotation
-
-Not everyone uses this style. Instead of writing
-@w{@samp{8.27@@dmn@{in@}}} in the Texinfo file, you may write
-@w{@samp{8.27 in.}} or @w{@samp{8.27 inches}}. (In these cases, the
-formatters may insert a line break between the number and the
-dimension. Also, if you write a period after an abbreviation within a
-sentence, you should write @samp{@@:} after the period to prevent
-@TeX{} from inserting extra whitespace. @xref{Controlling Spacing, ,
-Spacing After Colons and Periods}.)@refill
-
-@node Dots Bullets, TeX and copyright, dmn, Insertions
-@comment node-name, next, previous, up
-@section Inserting Ellipsis, Dots, and Bullets
-@cindex Dots, inserting
-@cindex Bullets, inserting
-@cindex Ellipsis, inserting
-@cindex Inserting ellipsis
-@cindex Inserting dots
-@cindex Special typesetting commands
-@cindex Typesetting commands for dots, etc.
-
-An @dfn{ellipsis} (a line of dots) is not typeset as a string of
-periods, so a special command is used for ellipsis in Texinfo. The
-@code{@@bullet} command is special, too. Each of these commands is
-followed by a pair of braces, @samp{@{@}}, without any whitespace
-between the name of the command and the braces. (You need to use braces
-with these commands because you can use them next to other text; without
-the braces, the formatters would be confused. @xref{Command Syntax, ,
-@@-Command Syntax}, for further information.)@refill
-
-@menu
-* dots:: How to insert dots @dots{}
-* bullet:: How to insert a bullet.
-@end menu
-
-@node dots, bullet, , Dots Bullets
-@comment node-name, next, previous, up
-@subsection @code{@@dots}@{@}
-@findex dots
-@cindex Inserting dots
-@cindex Dots, inserting
-
-Use the @code{@@dots@{@}} command to generate an ellipsis, which is
-three dots in a row, appropriately spaced, like this: `@dots{}'. Do
-not simply write three periods in the input file; that would work for
-the Info file output, but would produce the wrong amount of space
-between the periods in the printed manual.@refill
-
-@iftex
-Here is an ellipsis: @dots{}
-
-Here are three periods in a row: ...
-
-In printed output, the three periods in a row are closer together than
-the dots in the ellipsis.
-@end iftex
-
-@node bullet, , dots, Dots Bullets
-@comment node-name, next, previous, up
-@subsection @code{@@bullet}@{@}
-@findex bullet
-
-Use the @code{@@bullet@{@}} command to generate a large round dot, or
-the closest possible thing to one. In Info, an asterisk is used.@refill
-
-Here is a bullet: @bullet{}
-
-When you use @code{@@bullet} in @code{@@itemize}, you do not need to
-type the braces, because @code{@@itemize} supplies them. @xref{itemize}.@refill
-
-@node TeX and copyright, minus, Dots Bullets, Insertions
-@comment node-name, next, previous, up
-@section Inserting @TeX{} and the Copyright Symbol
-
-The logo `@TeX{}' is typeset in a special fashion and it needs an
-@@-command. The copyright symbol, `@copyright{}', is also special.
-Each of these commands is followed by a pair of braces, @samp{@{@}},
-without any whitespace between the name of the command and the
-braces.@refill
-
-@menu
-* tex:: How to insert the @TeX{} logo.
-* copyright symbol:: How to use @code{@@copyright}@{@}.
-@end menu
-
-@node tex, copyright symbol, , TeX and copyright
-@comment node-name, next, previous, up
-@subsection @code{@@TeX}@{@}
-@findex tex (command)
-
-Use the @code{@@TeX@{@}} command to generate `@TeX{}'. In a printed
-manual, this is a special logo that is different from three ordinary
-letters. In Info, it just looks like @samp{TeX}. The
-@code{@@TeX@{@}} command is unique among Texinfo commands in that the
-@key{T} and the @key{X} are in upper case.@refill
-
-@node copyright symbol, , tex, TeX and copyright
-@comment node-name, next, previous, up
-@subsection @code{@@copyright}@{@}
-@findex copyright
-
-Use the @code{@@copyright@{@}} command to generate `@copyright{}'. In
-a printed manual, this is a @samp{c} inside a circle, and in Info,
-this is @samp{(C)}.@refill
-
-@node minus, , TeX and copyright, Insertions
-@section @code{@@minus}@{@}: Inserting a Minus Sign
-@findex minus
-
-Use the @code{@@minus@{@}} command to generate a minus sign. In a
-fixed-width font, this is a single hyphen, but in a proportional font,
-the symbol is the customary length for a minus sign---a little longer
-than a hyphen.@refill
-
-You can compare the two forms:
-
-@display
-@samp{@minus{}} is a minus sign generated with @samp{@@minus@{@}},
-
-`-' is a hyphen generated with the character @samp{-}.
-@end display
-
-@noindent
-In the fixed-width font used by Info, @code{@@minus@{@}} is the same
-as a hyphen.@refill
-
-You should not use @code{@@minus@{@}} inside @code{@@code} or
-@code{@@example} because the width distinction is not made in the
-fixed-width font they use.@refill
-
-When you use @code{@@minus} to specify the mark beginning each entry in
-an itemized list, you do not need to type the braces
-(@pxref{itemize}).@refill
-
-@node Glyphs, Breaks, Insertions, Top
-@comment node-name, next, previous, up
-@chapter Glyphs for Examples
-@cindex Glyphs
-
-In Texinfo, code is often illustrated in examples that are delimited
-by @code{@@example} and @code{@@end example}, or by @code{@@lisp} and
-@code{@@end lisp}. In such examples, you can indicate the results of
-evaluation or an expansion using @samp{@result{}} or
-@samp{@expansion{}}. Likewise, there are commands to insert glyphs
-to indicate
-printed output, error messages, equivalence of expressions, and the
-location of point.@refill
-
-The glyph-insertion commands do not need to be used within an example, but
-most often they are. Every glyph-insertion command is followed by a pair of
-left- and right-hand braces.@refill
-
-@menu
-* Glyphs Summary::
-* result:: How to show the result of expression.
-* expansion:: How to indicate an expansion.
-* Print Glyph:: How to indicate printed output.
-* Error Glyph:: How to indicate an error message.
-* Equivalence:: How to indicate equivalence.
-* Point Glyph:: How to indicate the location of point.
-@end menu
-
-@node Glyphs Summary, result, , Glyphs
-@ifinfo
-@heading Glyphs Summary
-
-Here are the different glyph commands:@refill
-@end ifinfo
-
-@table @asis
-@item @result{}
-@code{@@result@{@}} points to the result of an expression.@refill
-
-@item @expansion{}
-@code{@@expansion@{@}} shows the results of a macro expansion.@refill
-
-@item @print{}
-@code{@@print@{@}} indicates printed output.@refill
-
-@item @error{}
-@code{@@error@{@}} indicates that the following text is an error
-message.@refill
-
-@item @equiv{}
-@code{@@equiv@{@}} indicates the exact equivalence of two forms.@refill
-
-@item @point{}
-@code{@@point@{@}} shows the location of point.@refill
-@end table
-
-@node result, expansion, Glyphs Summary, Glyphs
-@section @result{}: Indicating Evaluation
-@cindex Result of an expression
-@cindex Indicating evaluation
-@cindex Evaluation glyph
-@cindex Value of an expression, indicating
-
-Use the @code{@@result@{@}} command to indicate the result of
-evaluating an expression.@refill
-
-@iftex
-The @code{@@result@{@}} command is displayed as @samp{=>} in Info and
-as @samp{@result{}} in the printed output.
-@end iftex
-@ifinfo
-The @code{@@result@{@}} command is displayed as @samp{@result{}} in Info
-and as a double stemmed arrow in the printed output.@refill
-@end ifinfo
-
-Thus, the following,
-
-@lisp
-(cdr '(1 2 3))
- @result{} (2 3)
-@end lisp
-
-@noindent
-may be read as ``@code{(cdr '(1 2 3))} evaluates to @code{(2 3)}''.
-
-@node expansion, Print Glyph, result, Glyphs
-@section @expansion{}: Indicating an Expansion
-@cindex Expansion, indicating it
-
-When an expression is a macro call, it expands into a new expression.
-You can indicate the result of the expansion with the
-@code{@@expansion@{@}} command.@refill
-
-@iftex
-The @code{@@expansion@{@}} command is displayed as @samp{==>} in Info and
-as @samp{@expansion{}} in the printed output.
-@end iftex
-@ifinfo
-The @code{@@expansion@{@}} command is displayed as @samp{@expansion{}}
-in Info and as a long arrow with a flat base in the printed output.@refill
-@end ifinfo
-
-@need 700
-For example, the following
-
-@example
-@group
-@@lisp
-(third '(a b c))
- @@expansion@{@} (car (cdr (cdr '(a b c))))
- @@result@{@} c
-@@end lisp
-@end group
-@end example
-
-@noindent
-produces
-
-@lisp
-@group
-(third '(a b c))
- @expansion{} (car (cdr (cdr '(a b c))))
- @result{} c
-@end group
-@end lisp
-
-@noindent
-which may be read as:
-
-@quotation
-@code{(third '(a b c))} expands to @code{(car (cdr (cdr '(a b c))))};
-the result of evaluating the expression is @code{c}.
-@end quotation
-
-@noindent
-Often, as in this case, an example looks better if the
-@code{@@expansion@{@}} and @code{@@result@{@}} commands are indented
-five spaces.@refill
-
-@node Print Glyph, Error Glyph, expansion, Glyphs
-@section @print{}: Indicating Printed Output
-@cindex Printed output, indicating it
-
-Sometimes an expression will print output during its execution. You
-can indicate the printed output with the @code{@@print@{@}} command.@refill
-
-@iftex
-The @code{@@print@{@}} command is displayed as @samp{-|} in Info and
-as @samp{@print{}} in the printed output.
-@end iftex
-@ifinfo
-The @code{@@print@{@}} command is displayed as @samp{@print{}} in Info
-and similarly, as a horizontal dash butting against a vertical bar, in
-the printed output.@refill
-@end ifinfo
-
-In the following example, the printed text is indicated with
-@samp{@print{}}, and the value of the expression follows on the
-last line.@refill
-
-@lisp
-@group
-(progn (print 'foo) (print 'bar))
- @print{} foo
- @print{} bar
- @result{} bar
-@end group
-@end lisp
-
-@noindent
-In a Texinfo source file, this example is written as follows:
-
-@lisp
-@group
-@@lisp
-(progn (print 'foo) (print 'bar))
- @@print@{@} foo
- @@print@{@} bar
- @@result@{@} bar
-@@end lisp
-@end group
-@end lisp
-
-@node Error Glyph, Equivalence, Print Glyph, Glyphs
-@section @error{}: Indicating an Error Message
-@cindex Error message, indicating it
-
-A piece of code may cause an error when you evaluate it. You can
-designate the error message with the @code{@@error@{@}} command.@refill
-
-@iftex
-The @code{@@error@{@}} command is displayed as @samp{error-->} in Info
-and as @samp{@error{}} in the printed output.
-@end iftex
-@ifinfo
-The @code{@@error@{@}} command is displayed as @samp{@error{}} in Info
-and as the word `error' in a box in the printed output.@refill
-@end ifinfo
-
-@need 700
-Thus,
-
-@example
-@@lisp
-(+ 23 'x)
-@@error@{@} Wrong type argument: integer-or-marker-p, x
-@@end lisp
-@end example
-
-@noindent
-produces
-
-@lisp
-(+ 23 'x)
-@error{} Wrong type argument: integer-or-marker-p, x
-@end lisp
-
-@noindent
-This indicates that the following error message is printed
-when you evaluate the expression:
-
-@lisp
-Wrong type argument: integer-or-marker-p, x
-@end lisp
-
-Note that @samp{@error{}} itself is not part of the error
-message.
-
-@node Equivalence, Point Glyph, Error Glyph, Glyphs
-@section @equiv{}: Indicating Equivalence
-@cindex Equivalence, indicating it
-
-Sometimes two expressions produce identical results. You can indicate the
-exact equivalence of two forms with the @code{@@equiv@{@}} command.@refill
-
-@iftex
-The @code{@@equiv@{@}} command is displayed as @samp{==} in Info and
-as @samp{@equiv{}} in the printed output.
-@end iftex
-@ifinfo
-The @code{@@equiv@{@}} command is displayed as @samp{@equiv{}} in Info
-and as a three parallel horizontal lines in the printed output.@refill
-@end ifinfo
-
-Thus,
-
-@example
-@@lisp
-(make-sparse-keymap) @@equiv@{@} (list 'keymap)
-@@end lisp
-@end example
-
-@noindent
-produces
-
-@lisp
-(make-sparse-keymap) @equiv{} (list 'keymap)
-@end lisp
-
-@noindent
-This indicates that evaluating @code{(make-sparse-keymap)} produces
-identical results to evaluating @code{(list 'keymap)}.
-
-@c Cannot write point command here because it causes trouble with TOC.
-@node Point Glyph, , Equivalence, Glyphs
-@section Indicating Point in a Buffer
-@cindex Point, indicating it in a buffer
-
-Sometimes you need to show an example of text in an Emacs buffer. In
-such examples, the convention is to include the entire contents of the
-buffer in question between two lines of dashes containing the buffer
-name.@refill
-
-You can use the @samp{@@point@{@}} command to show the location of point
-in the text in the buffer. (The symbol for point, of course, is not
-part of the text in the buffer; it indicates the place @emph{between}
-two characters where point is located.)@refill
-
-@iftex
-The @code{@@point@{@}} command is displayed as @samp{-!-} in Info and
-as @samp{@point{}} in the printed output.
-@end iftex
-@ifinfo
-The @code{@@point@{@}} command is displayed as @samp{@point{}} in Info
-and as a small five pointed star in the printed output.@refill
-@end ifinfo
-
-The following example shows the contents of buffer @file{foo} before
-and after evaluating a Lisp command to insert the word @code{changed}.@refill
-
-@example
-@group
----------- Buffer: foo ----------
-This is the @point{}contents of foo.
----------- Buffer: foo ----------
-
-@end group
-@end example
-
-@example
-@group
-(insert "changed ")
- @result{} nil
----------- Buffer: foo ----------
-This is the changed @point{}contents of foo.
----------- Buffer: foo ----------
-
-@end group
-@end example
-
-In a Texinfo source file, the example is written like this:@refill
-
-@example
-@@example
----------- Buffer: foo ----------
-This is the @@point@{@}contents of foo.
----------- Buffer: foo ----------
-
-(insert "changed ")
- @@result@{@} nil
----------- Buffer: foo ----------
-This is the changed @@point@{@}contents of foo.
----------- Buffer: foo ----------
-@@end example
-@end example
-
-@node Breaks, Definition Commands, Glyphs, Top
-@comment node-name, next, previous, up
-@chapter Making and Preventing Breaks
-@cindex Making line and page breaks
-@cindex Preventing line and page breaks
-
-Usually, a Texinfo file is processed both by @TeX{} and by one of the
-Info formatting commands. Line, paragraph, or page breaks sometimes
-occur in the `wrong' place in one or other form of output. You must
-ensure that text looks right both in the printed manual and in the
-Info file.@refill
-
-For example, in a printed manual, page breaks may occur awkwardly in
-the middle of an example; to prevent this, you can hold text together
-using a grouping command that keeps the text from being split across
-two pages. Conversely, you may want to force a page break where none
-would occur normally. Fortunately, problems like these do not often
-arise. When they do, use the break, break prevention, or pagination
-commands.@refill
-
-@menu
-* Break Commands:: Cause and prevent splits.
-* Line Breaks:: How to force a single line to use two lines.
-* w:: How to prevent unwanted line breaks.
-* sp:: How to insert blank lines.
-* page:: How to force the start of a new page.
-* group:: How to prevent unwanted page breaks.
-* need:: Another way to prevent unwanted page breaks.
-@end menu
-
-@ifinfo
-@node Break Commands, Line Breaks, , Breaks
-@heading The Break Commands
-@end ifinfo
-@iftex
-@sp 1
-@end iftex
-
-The break commands create line and paragraph breaks:@refill
-
-@table @code
-@item @@*
-Force a line break.
-
-@item @@sp @var{n}
-Skip @var{n} blank lines.@refill
-@end table
-@iftex
-@sp 1
-@end iftex
-
-The line-break-prevention command holds text together all on one
-line:@refill
-
-@table @code
-@item @@w@{@var{text}@}
-Prevent @var{text} from being split and hyphenated across two lines.@refill
-@end table
-@iftex
-@sp 1
-@end iftex
-
-The pagination commands apply only to printed output, since Info
-files do not have pages.@refill
-
-@table @code
-@item @@page
-Start a new page in the printed manual.@refill
-
-@item @@group
-Hold text together that must appear on one printed page.@refill
-
-@item @@need @var{mils}
-Start a new printed page if not enough space on this one.@refill
-@end table
-
-@node Line Breaks, w, Break Commands, Breaks
-@comment node-name, next, previous, up
-@section @code{@@*}: Generate Line Breaks
-@findex * @r{(force line break)}
-@cindex Line breaks
-@cindex Breaks in a line
-
-The @code{@@*} command forces a line break in both the printed manual and
-in Info.@refill
-
-@need 700
-For example,
-
-@example
-This line @@* is broken @@*in two places.
-@end example
-
-@noindent
-produces
-
-@example
-@group
-This line
- is broken
-in two places.
-@end group
-@end example
-
-@noindent
-(Note that the space after the first @code{@@*} command is faithfully
-carried down to the next line.)@refill
-
-@need 800
-The @code{@@*} command is often used in a file's copyright page:@refill
-
-@example
-@group
-This is edition 2.0 of the Texinfo documentation,@@*
-and is for @dots{}
-@end group
-@end example
-
-@noindent
-In this case, the @code{@@*} command keeps @TeX{} from stretching the
-line across the whole page in an ugly manner.@refill
-
-@quotation
-@strong{Please note:} Do not write braces after an @code{@@*} command;
-they are not needed.@refill
-
-Do not write an @code{@@refill} command at the end of a paragraph
-containing an @code{@@*} command; it will cause the paragraph to be
-refilled after the line break occurs, negating the effect of the line
-break.@refill
-@end quotation
-
-@node w, sp, Line Breaks, Breaks
-@comment node-name, next, previous, up
-@section @code{@@w}@{@var{text}@}: Prevent Line Breaks
-@findex w @r{(prevent line break)}
-@cindex Line breaks, preventing
-
-@code{@@w@{@var{text}@}} outputs @var{text} and prohibits line breaks
-within @var{text}.@refill
-
-You can use the @code{@@w} command to prevent @TeX{} from automatically
-hyphenating a long name or phrase that accidentally falls near the end
-of a line.@refill
-
-@example
-You can copy GNU software from @@w@{@@file@{prep.ai.mit.edu@}@}.
-@end example
-
-@noindent
-produces
-
-@quotation
-You can copy GNU software from @w{@file{prep.ai.mit.edu}}.
-@end quotation
-
-In the Texinfo file, you must write the @code{@@w} command and its
-argument (all the affected text) all on one line.@refill
-
-@quotation
-@strong{Caution:} Do not write an @code{@@refill} command at the end
-of a paragraph containing an @code{@@w} command; it will cause the
-paragraph to be refilled and may thereby negate the effect of the
-@code{@@w} command.@refill
-@end quotation
-
-@node sp, page, w, Breaks
-@comment node-name, next, previous, up
-@section @code{@@sp} @var{n}: Insert Blank Lines
-@findex sp @r{(line spacing)}
-@cindex Spaces (blank lines)
-@cindex Blank lines
-@cindex Line spacing
-
-A line beginning with and containing only @code{@@sp @var{n}}
-generates @var{n} blank lines of space in both the printed manual and
-the Info file. @code{@@sp} also forces a paragraph break. For
-example,@refill
-
-@example
-@@sp 2
-@end example
-
-@noindent
-generates two blank lines.
-
-The @code{@@sp} command is most often used in the title page.@refill
-
-@ignore
-@c node br, page, sp, Breaks
-@comment node-name, next, previous, up
-@c section @code{@@br}: Generate Paragraph Breaks
-@findex br @r{(paragraph breaks)}
-@cindex Paragraph breaks
-@cindex Breaks in a paragraph
-
-The @code{@@br} command forces a paragraph break. It inserts a blank
-line. You can use the command within or at the end of a line. If
-used within a line, the @code{@@br@{@}} command must be followed by
-left and right braces (as shown here) to mark the end of the
-command.@refill
-
-@need 700
-For example,
-
-@example
-@group
-This line @@br@{@}contains and is ended by paragraph breaks@@br
-and is followed by another line.
-@end group
-@end example
-
-@noindent
-produces
-
-@example
-@group
-This line
-
-contains and is ended by paragraph breaks
-
-and is followed by another line.
-@end group
-@end example
-
-The @code{@@br} command is seldom used.
-@end ignore
-
-@node page, group, sp, Breaks
-@comment node-name, next, previous, up
-@section @code{@@page}: Start a New Page
-@cindex Page breaks
-@findex page
-
-A line containing only @code{@@page} starts a new page in a printed
-manual. The command has no effect on Info files since they are not
-paginated. An @code{@@page} command is often used in the @code{@@titlepage}
-section of a Texinfo file to start the copyright page.@refill
-
-@node group, need, page, Breaks
-@comment node-name, next, previous, up
-@section @code{@@group}: Prevent Page Breaks
-@cindex Group (hold text together vertically)
-@cindex Holding text together vertically
-@cindex Vertically holding text together
-@findex group
-
-The @code{@@group} command (on a line by itself) is used inside an
-@code{@@example} or similar construct to begin an unsplittable vertical
-group, which will appear entirely on one page in the printed output.
-The group is terminated by a line containing only @code{@@end group}.
-These two lines produce no output of their own, and in the Info file
-output they have no effect at all.@refill
-
-@c Once said that these environments
-@c turn off vertical spacing between ``paragraphs''.
-@c Also, quotation used to work, but doesn't in texinfo-2.72
-Although @code{@@group} would make sense conceptually in a wide
-variety of contexts, its current implementation works reliably only
-within @code{@@example} and variants, and within @code{@@display},
-@code{@@format}, @code{@@flushleft} and @code{@@flushright}.
-@xref{Quotations and Examples}. (What all these commands have in
-common is that each line of input produces a line of output.) In
-other contexts, @code{@@group} can cause anomalous vertical
-spacing.@refill
-
-@need 750
-This formatting requirement means that you should write:
-
-@example
-@group
-@@example
-@@group
-@dots{}
-@@end group
-@@end example
-@end group
-@end example
-
-@noindent
-with the @code{@@group} and @code{@@end group} commands inside the
-@code{@@example} and @code{@@end example} commands.
-
-The @code{@@group} command is most often used to hold an example
-together on one page. In this Texinfo manual, more than 100 examples
-contain text that is enclosed between @code{@@group} and @code{@@end
-group}.
-
-If you forget to end a group, you may get strange and unfathomable
-error messages when you run @TeX{}. This is because @TeX{} keeps
-trying to put the rest of the Texinfo file onto the one page and does
-not start to generate error messages until it has processed
-considerable text. It is a good rule of thumb to look for a missing
-@code{@@end group} if you get incomprehensible error messages in
-@TeX{}.@refill
-
-@node need, , group, Breaks
-@comment node-name, next, previous, up
-@section @code{@@need @var{mils}}: Prevent Page Breaks
-@cindex Need space at page bottom
-@findex need
-
-A line containing only @code{@@need @var{n}} starts
-a new page in a printed manual if fewer than @var{n} mils (thousandths
-of an inch) remain on the current page. Do not use
-braces around the argument @var{n}. The @code{@@need} command has no
-effect on Info files since they are not paginated.@refill
-
-@need 800
-This paragraph is preceded by an @code{@@need} command that tells
-@TeX{} to start a new page if fewer than 800 mils (eight-tenths
-inch) remain on the page. It looks like this:@refill
-
-@example
-@group
-@@need 800
-This paragraph is preceded by @dots{}
-@end group
-@end example
-
-The @code{@@need} command is useful for preventing orphans (single
-lines at the bottoms of printed pages).@refill
-
-@node Definition Commands, Footnotes, Breaks, Top
-@chapter Definition Commands
-@cindex Definition commands
-
-The @code{@@deffn} command and the other @dfn{definition commands}
-enable you to describe functions, variables, macros, commands, user
-options, special forms and other such artifacts in a uniform
-format.@refill
-
-In the Info file, a definition causes the entity
-category---`Function', `Variable', or whatever---to appear at the
-beginning of the first line of the definition, followed by the
-entity's name and arguments. In the printed manual, the command
-causes @TeX{} to print the entity's name and its arguments on the left
-margin and print the category next to the right margin. In both
-output formats, the body of the definition is indented. Also, the
-name of the entity is entered into the appropriate index:
-@code{@@deffn} enters the name into the index of functions,
-@code{@@defvr} enters it into the index of variables, and so
-on.@refill
-
-A manual need not and should not contain more than one definition for
-a given name. An appendix containing a summary should use
-@code{@@table} rather than the definition commands.@refill
-
-@menu
-* Def Cmd Template:: How to structure a description using a
- definition command.
-* Optional Arguments:: How to handle optional and repeated arguments.
-* deffnx:: How to group two or more `first' lines.
-* Def Cmds in Detail:: All the definition commands.
-* Def Cmd Conventions:: Conventions for writing definitions.
-* Sample Function Definition::
-@end menu
-
-@node Def Cmd Template, Optional Arguments, , Definition Commands
-@section The Template for a Definition
-@cindex Definition template
-@cindex Template for a definition
-
-The @code{@@deffn} command is used for definitions of entities that
-resemble functions. To write a definition using the @code{@@deffn}
-command, write the @code{@@deffn} command at the beginning of a line
-and follow it on the same line by the category of the entity, the name
-of the entity itself, and its arguments (if any). Then write the body
-of the definition on succeeding lines. (You may embed examples in the
-body.) Finally, end the definition with an @code{@@end deffn} command
-written on a line of its own. (The other definition commands follow
-the same format.)@refill
-
-The template for a definition looks like this:
-
-@example
-@group
-@@deffn @var{category} @var{name} @var{arguments}@dots{}
-@var{body-of-definition}
-@@end deffn
-@end group
-@end example
-
-@need 700
-@noindent
-For example,
-
-@example
-@group
-@@deffn Command forward-word count
-This command moves point forward @@var@{count@} words
-(or backward if @@var@{count@} is negative). @dots{}
-@@end deffn
-@end group
-@end example
-
-@noindent
-produces
-
-@quotation
-@deffn Command forward-word count
-This function moves point forward @var{count} words
-(or backward if @var{count} is negative). @dots{}
-@end deffn
-@end quotation
-
-Capitalize the category name like a title. If the name of the
-category contains spaces, as in the phrase `Interactive Command',
-write braces around it. For example:@refill
-
-@example
-@group
-@@deffn @{Interactive Command@} isearch-forward
-@dots{}
-@@end deffn
-@end group
-@end example
-
-@noindent
-Otherwise, the second word will be mistaken for the name of the
-entity.@refill
-
-Some of the definition commands are more general than others. The
-@code{@@deffn} command, for example, is the general definition command
-for functions and the like---for entities that may take arguments. When
-you use this command, you specify the category to which the entity
-belongs. The @code{@@deffn} command possesses three predefined,
-specialized variations, @code{@@defun}, @code{@@defmac}, and
-@code{@@defspec}, that specify the category for you: ``Function'',
-``Macro'', and ``Special Form'' respectively. The @code{@@defvr}
-command also is accompanied by several predefined, specialized
-variations for describing particular kinds of variables.@refill
-
-The template for a specialized definition, such as @code{@@defun}, is
-similar to the template for a generalized definition, except that you
-do not need to specify the category:@refill
-
-@example
-@group
-@@defun @var{name} @var{arguments}@dots{}
-@var{body-of-definition}
-@@end defun
-@end group
-@end example
-
-@noindent
-Thus,
-
-@example
-@group
-@@defun buffer-end flag
-This function returns @@code@{(point-min)@} if @@var@{flag@}
-is less than 1, @@code@{(point-max)@} otherwise.
-@dots{}
-@@end defun
-@end group
-@end example
-
-@noindent
-produces
-
-@quotation
-@defun buffer-end flag
-This function returns @code{(point-min)} if @var{flag} is less than 1,
-@code{(point-max)} otherwise. @dots{}
-@end defun
-@end quotation
-
-@noindent
-@xref{Sample Function Definition, Sample Function Definition, A Sample
-Function Definition}, for a more detailed example of a function
-definition, including the use of @code{@@example} inside the
-definition.@refill
-
-The other specialized commands work like @code{@@defun}.@refill
-
-@node Optional Arguments, deffnx, Def Cmd Template, Definition Commands
-@section Optional and Repeated Arguments
-@cindex Optional and repeated arguments
-@cindex Repeated and optional arguments
-@cindex Arguments, repeated and optional
-@cindex Syntax, optional & repeated arguments
-@cindex Meta-syntactic chars for arguments
-
-Some entities take optional or repeated arguments, which may be
-specified by a distinctive glyph that uses square brackets and
-ellipses. For @w{example}, a special form often breaks its argument list
-into separate arguments in more complicated ways than a
-straightforward function.@refill
-
-@iftex
-An argument enclosed within square brackets is optional.
-Thus, the phrase
-@samp{@code{@r{[}@var{optional-arg}@r{]}}} means that
-@var{optional-arg} is optional.
-An argument followed by an ellipsis is optional
-and may be repeated more than once.
-@c This is consistent with Emacs Lisp Reference manual
-Thus, @samp{@var{repeated-args}@dots{}} stands for zero or more arguments.
-Parentheses are used when several arguments are grouped
-into additional levels of list structure in Lisp.
-@end iftex
-@c The following looks better in Info (no `r', `samp' and `code'):
-@ifinfo
-An argument enclosed within square brackets is optional.
-Thus, [@var{optional-arg}] means that @var{optional-arg} is optional.
-An argument followed by an ellipsis is optional
-and may be repeated more than once.
-@c This is consistent with Emacs Lisp Reference manual
-Thus, @var{repeated-args}@dots{} stands for zero or more arguments.
-Parentheses are used when several arguments are grouped
-into additional levels of list structure in Lisp.
-@end ifinfo
-
-Here is the @code{@@defspec} line of an example of an imaginary
-special form:@refill
-
-@quotation
-@defspec foobar (@var{var} [@var{from} @var{to} [@var{inc}]]) @var{body}@dots{}
-@end defspec
-@tex
-\vskip \parskip
-@end tex
-@end quotation
-
-@noindent
-In this example, the arguments @var{from} and @var{to} are optional,
-but must both be present or both absent. If they are present,
-@var{inc} may optionally be specified as well. These arguments are
-grouped with the argument @var{var} into a list, to distinguish them
-from @var{body}, which includes all remaining elements of the
-form.@refill
-
-In a Texinfo source file, this @code{@@defspec} line is written like
-this (except it would not be split over two lines, as it is in this
-example).@refill
-
-@example
-@group
-@@defspec foobar (@@var@{var@} [@@var@{from@} @@var@{to@}
- [@@var@{inc@}]]) @@var@{body@}@@dots@{@}
-@end group
-@end example
-
-@noindent
-The function is listed in the Command and Variable Index under
-@samp{foobar}.@refill
-
-@node deffnx, Def Cmds in Detail, Optional Arguments, Definition Commands
-@section Two or More `First' Lines
-@cindex Two `First' Lines for @code{@@deffn}
-@cindex Grouping two definitions together
-@cindex Definitions grouped together
-@findex deffnx
-
-To create two or more `first' or header lines for a definition, follow
-the first @code{@@deffn} line by a line beginning with @code{@@deffnx}.
-The @code{@@deffnx} command works exactly like @code{@@deffn}
-except that it does not generate extra vertical white space between it
-and the preceding line.@refill
-
-@need 1000
-For example,
-
-@example
-@group
-@@deffn @{Interactive Command@} isearch-forward
-@@deffnx @{Interactive Command@} isearch-backward
-These two search commands are similar except @dots{}
-@@end deffn
-@end group
-@end example
-
-@noindent
-produces
-
-@deffn {Interactive Command} isearch-forward
-@deffnx {Interactive Command} isearch-backward
-These two search commands are similar except @dots{}
-@end deffn
-
-Each of the other definition commands has an `x' form: @code{@@defunx},
-@code{@@defvrx}, @code{@@deftypefunx}, etc.
-
-The `x' forms work just like @code{@@itemx}; see @ref{itemx, , @code{@@itemx}}.
-
-@node Def Cmds in Detail, Def Cmd Conventions, deffnx, Definition Commands
-@section The Definition Commands
-
-Texinfo provides more than a dozen definition commands, all of which
-are described in this section.@refill
-
-The definition commands automatically enter the name of the entity in
-the appropriate index: for example, @code{@@deffn}, @code{@@defun},
-and @code{@@defmac} enter function names in the index of functions;
-@code{@@defvr} and @code{@@defvar} enter variable names in the index
-of variables.@refill
-
-Although the examples that follow mostly illustrate Lisp, the commands
-can be used for other programming languages.@refill
-
-@menu
-* Functions Commands:: Commands for functions and similar entities.
-* Variables Commands:: Commands for variables and similar entities.
-* Typed Functions:: Commands for functions in typed languages.
-* Typed Variables:: Commands for variables in typed languages.
-* Abstract Objects:: Commands for object-oriented programming.
-* Data Types:: The definition command for data types.
-@end menu
-
-@node Functions Commands, Variables Commands, , Def Cmds in Detail
-@subsection Functions and Similar Entities
-
-This section describes the commands for describing functions and similar
-entities:@refill
-
-@table @code
-@findex deffn
-@item @@deffn @var{category} @var{name} @var{arguments}@dots{}
-The @code{@@deffn} command is the general definition command for
-functions, interactive commands, and similar entities that may take
-arguments. You must choose a term to describe the category of entity
-being defined; for example, ``Function'' could be used if the entity is
-a function. The @code{@@deffn} command is written at the beginning of a
-line and is followed on the same line by the category of entity being
-described, the name of this particular entity, and its arguments, if
-any. Terminate the definition with @code{@@end deffn} on a line of its
-own.@refill
-
-@need 750
-For example, here is a definition:
-
-@example
-@group
-@@deffn Command forward-char nchars
-Move point forward @@var@{nchars@} characters.
-@@end deffn
-@end group
-@end example
-
-@noindent
-This shows a rather terse definition for a ``command'' named
-@code{forward-char} with one argument, @var{nchars}.
-
-@code{@@deffn} prints argument names such as @var{nchars} in italics or
-upper case, as if @code{@@var} had been used, because we think of these
-names as metasyntactic variables---they stand for the actual argument
-values. Within the text of the description, write an argument name
-explicitly with @code{@@var} to refer to the value of the argument. In
-the example above, we used @samp{@@var@{nchars@}} in this way.
-
-The template for @code{@@deffn} is:
-
-@example
-@group
-@@deffn @var{category} @var{name} @var{arguments}@dots{}
-@var{body-of-definition}
-@@end deffn
-@end group
-@end example
-
-@findex defun
-@item @@defun @var{name} @var{arguments}@dots{}
-The @code{@@defun} command is the definition command for functions.
-@code{@@defun} is equivalent to @samp{@@deffn Function
-@dots{}}.@refill
-
-@need 800
-@noindent
-For example,
-
-@example
-@group
-@@defun set symbol new-value
-Change the value of the symbol @@var@{symbol@}
-to @@var@{new-value@}.
-@@end defun
-@end group
-@end example
-
-@noindent
-shows a rather terse definition for a function @code{set} whose
-arguments are @var{symbol} and @var{new-value}. The argument names on
-the @code{@@defun} line automatically appear in italics or upper case as
-if they were enclosed in @code{@@var}. Terminate the definition with
-@code{@@end defun} on a line of its own.@refill
-
-The template is:
-
-@example
-@group
-@@defun @var{function-name} @var{arguments}@dots{}
-@var{body-of-definition}
-@@end defun
-@end group
-@end example
-
-@code{@@defun} creates an entry in the index of functions.
-
-@findex defmac
-@item @@defmac @var{name} @var{arguments}@dots{}
-The @code{@@defmac} command is the definition command for macros.
-@code{@@defmac} is equivalent to @samp{@@deffn Macro @dots{}} and
-works like @code{@@defun}.@refill
-
-@findex defspec
-@item @@defspec @var{name} @var{arguments}@dots{}
-The @code{@@defspec} command is the definition command for special
-forms. (In Lisp, a special form is an entity much like a function.)
-@code{@@defspec} is equivalent to @samp{@@deffn @{Special Form@}
-@dots{}} and works like @code{@@defun}.@refill
-@end table
-
-@node Variables Commands, Typed Functions, Functions Commands, Def Cmds in Detail
-@subsection Variables and Similar Entities
-
-Here are the commands for defining variables and similar
-entities:@refill
-
-@table @code
-@findex defvr
-@item @@defvr @var{category} @var{name}
-The @code{@@defvr} command is a general definition command for
-something like a variable---an entity that records a value. You must
-choose a term to describe the category of entity being defined; for
-example, ``Variable'' could be used if the entity is a variable.
-Write the @code{@@defvr} command at the beginning of a line and
-followed it on the same line by the category of the entity and the
-name of the entity.@refill
-
-Capitalize the category name like a title. If the name of the
-category contains spaces, as in the name `User Option', write braces
-around it. Otherwise, the second word will be mistaken for the name
-of the entity, for example:
-
-@example
-@group
-@@defvr @{User Option@} fill-column
-This buffer-local variable specifies
-the maximum width of filled lines.
-@dots{}
-@@end defvr
-@end group
-@end example
-
-Terminate the definition with @code{@@end defvr} on a line of its
-own.@refill
-
-The template is:
-
-@example
-@group
-@@defvr @var{category} @var{name}
-@var{body-of-definition}
-@@end defvr
-@end group
-@end example
-
-@code{@@defvr} creates an entry in the index of variables for @var{name}.
-
-@findex defvar
-@item @@defvar @var{name}
-The @code{@@defvar} command is the definition command for variables.
-@code{@@defvar} is equivalent to @samp{@@defvr Variable
-@dots{}}.@refill
-
-@need 750
-For example:
-
-@example
-@group
-@@defvar kill-ring
-@dots{}
-@@end defvar
-@end group
-@end example
-
-The template is:
-
-@example
-@group
-@@defvar @var{name}
-@var{body-of-definition}
-@@end defvar
-@end group
-@end example
-
-@code{@@defvar} creates an entry in the index of variables for
-@var{name}.@refill
-
-@findex defopt
-@item @@defopt @var{name}
-The @code{@@defopt} command is the definition command for user
-options. @code{@@defopt} is equivalent to @samp{@@defvr @{User
-Option@} @dots{}} and works like @code{@@defvar}.@refill
-@end table
-
-@node Typed Functions, Typed Variables, Variables Commands, Def Cmds in Detail
-@subsection Functions in Typed Languages
-
-The @code{@@deftypefn} command and its variations are for describing
-functions in C or any other language in which you must declare types
-of variables and functions.@refill
-
-@table @code
-@findex deftypefn
-@item @@deftypefn @var{category} @var{data-type} @var{name} @var{arguments}@dots{}
-The @code{@@deftypefn} command is the general definition command for
-functions and similar entities that may take arguments and that are
-typed. The @code{@@deftypefn} command is written at the beginning of
-a line and is followed on the same line by the category of entity
-being described, the type of the returned value, the name of this
-particular entity, and its arguments, if any.@refill
-
-@need 800
-@noindent
-For example,
-
-@example
-@group
-@@deftypefn @{Library Function@} int foobar
- (int @@var@{foo@}, float @@var@{bar@})
-@dots{}
-@@end deftypefn
-@end group
-@end example
-
-@need 1000
-@noindent
-(where the text before the ``@dots{}'', shown above as two lines, would
-actually be a single line in a real Texinfo file) produces the following
-in Info:
-
-@smallexample
-@group
--- Library Function: int foobar (int FOO, float BAR)
-@dots{}
-@end group
-@end smallexample
-@iftex
-
-In a printed manual, it produces:
-
-@quotation
-@deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-@dots{}
-@end deftypefn
-@end quotation
-@end iftex
-
-This means that @code{foobar} is a ``library function'' that returns an
-@code{int}, and its arguments are @var{foo} (an @code{int}) and
-@var{bar} (a @code{float}).@refill
-
-The argument names that you write in @code{@@deftypefn} are not subject
-to an implicit @code{@@var}---since the actual names of the arguments in
-@code{@@deftypefn} are typically scattered among data type names and
-keywords, Texinfo cannot find them without help. Instead, you must write
-@code{@@var} explicitly around the argument names. In the example
-above, the argument names are @samp{foo} and @samp{bar}.@refill
-
-The template for @code{@@deftypefn} is:@refill
-
-@example
-@group
-@@deftypefn @var{category} @var{data-type} @var{name} @var{arguments} @dots{}
-@var{body-of-description}
-@@end deftypefn
-@end group
-@end example
-
-@noindent
-Note that if the @var{category} or @var{data type} is more than one
-word then it must be enclosed in braces to make it a single argument.@refill
-
-If you are describing a procedure in a language that has packages,
-such as Ada, you might consider using @code{@@deftypefn} in a manner
-somewhat contrary to the convention described in the preceding
-paragraphs.@refill
-
-@need 800
-@noindent
-For example:
-
-@example
-@group
-@@deftypefn stacks private push
- (@@var@{s@}:in out stack;
- @@var@{n@}:in integer)
-@dots{}
-@@end deftypefn
-@end group
-@end example
-
-@noindent
-(The @code{@@deftypefn} arguments are shown split into three lines, but
-would be a single line in a real Texinfo file.)
-
-In this instance, the procedure is classified as belonging to the
-package @code{stacks} rather than classified as a `procedure' and its
-data type is described as @code{private}. (The name of the procedure
-is @code{push}, and its arguments are @var{s} and @var{n}.)@refill
-
-@code{@@deftypefn} creates an entry in the index of functions for
-@var{name}.@refill
-
-@findex deftypefun
-@item @@deftypefun @var{data-type} @var{name} @var{arguments}@dots{}
-The @code{@@deftypefun} command is the specialized definition command
-for functions in typed languages. The command is equivalent to
-@samp{@@deftypefn Function @dots{}}.@refill
-
-@need 800
-@noindent
-Thus,
-
-@smallexample
-@group
-@@deftypefun int foobar (int @@var@{foo@}, float @@var@{bar@})
-@dots{}
-@@end deftypefun
-@end group
-@end smallexample
-
-@noindent
-produces the following in Info:
-
-@example
-@group
--- Function: int foobar (int FOO, float BAR)
-@dots{}
-@end group
-@end example
-@iftex
-
-@need 800
-@noindent
-and the following in a printed manual:
-
-@quotation
-@deftypefun int foobar (int @var{foo}, float @var{bar})
-@dots{}
-@end deftypefun
-@end quotation
-@end iftex
-
-@need 800
-The template is:
-
-@example
-@group
-@@deftypefun @var{type} @var{name} @var{arguments}@dots{}
-@var{body-of-description}
-@@end deftypefun
-@end group
-@end example
-
-@code{@@deftypefun} creates an entry in the index of functions for
-@var{name}.@refill
-@end table
-
-@node Typed Variables, Abstract Objects, Typed Functions, Def Cmds in Detail
-@subsection Variables in Typed Languages
-
-Variables in typed languages are handled in a manner similar to
-functions in typed languages. @xref{Typed Functions}. The general
-definition command @code{@@deftypevr} corresponds to
-@code{@@deftypefn} and the specialized definition command
-@code{@@deftypevar} corresponds to @code{@@deftypefun}.@refill
-
-@table @code
-@findex deftypevr
-@item @@deftypevr @var{category} @var{data-type} @var{name}
-The @code{@@deftypevr} command is the general definition command for
-something like a variable in a typed language---an entity that records
-a value. You must choose a term to describe the category of the
-entity being defined; for example, ``Variable'' could be used if the
-entity is a variable.@refill
-
-The @code{@@deftypevr} command is written at the beginning of a line
-and is followed on the same line by the category of the entity
-being described, the data type, and the name of this particular
-entity.@refill
-
-@need 800
-@noindent
-For example:
-
-@example
-@group
-@@deftypevr @{Global Flag@} int enable
-@dots{}
-@@end deftypevr
-@end group
-@end example
-
-@noindent
-produces the following in Info:
-
-@example
-@group
--- Global Flag: int enable
-@dots{}
-@end group
-@end example
-@iftex
-
-@noindent
-and the following in a printed manual:
-
-@quotation
-@deftypevr {Global Flag} int enable
-@dots{}
-@end deftypevr
-@end quotation
-@end iftex
-
-@need 800
-The template is:
-
-@example
-@@deftypevr @var{category} @var{data-type} @var{name}
-@var{body-of-description}
-@@end deftypevr
-@end example
-
-@code{@@deftypevr} creates an entry in the index of variables for
-@var{name}.@refill
-
-@findex deftypevar
-@item @@deftypevar @var{data-type} @var{name}
-The @code{@@deftypevar} command is the specialized definition command
-for variables in typed languages. @code{@@deftypevar} is equivalent
-to @samp{@@deftypevr Variable @dots{}}.@refill
-
-@need 800
-@noindent
-For example:
-
-@example
-@group
-@@deftypevar int fubar
-@dots{}
-@@end deftypevar
-@end group
-@end example
-
-@noindent
-produces the following in Info:
-
-@example
-@group
--- Variable: int fubar
-@dots{}
-@end group
-@end example
-@iftex
-
-@need 800
-@noindent
-and the following in a printed manual:
-
-@quotation
-@deftypevar int fubar
-@dots{}
-@end deftypevar
-@end quotation
-@end iftex
-
-@need 800
-@noindent
-The template is:
-
-@example
-@group
-@@deftypevar @var{data-type} @var{name}
-@var{body-of-description}
-@@end deftypevar
-@end group
-@end example
-
-@code{@@deftypevar} creates an entry in the index of variables for
-@var{name}.@refill
-@end table
-
-@node Abstract Objects, Data Types, Typed Variables, Def Cmds in Detail
-@subsection Object-Oriented Programming
-
-Here are the commands for formatting descriptions about abstract
-objects, such as are used in object-oriented programming. A class is
-a defined type of abstract object. An instance of a class is a
-particular object that has the type of the class. An instance
-variable is a variable that belongs to the class but for which each
-instance has its own value.@refill
-
-In a definition, if the name of a class is truly a name defined in the
-programming system for a class, then you should write an @code{@@code}
-around it. Otherwise, it is printed in the usual text font.@refill
-
-@table @code
-@findex defcv
-@item @@defcv @var{category} @var{class} @var{name}
-The @code{@@defcv} command is the general definition command for
-variables associated with classes in object-oriented programming. The
-@code{@@defcv} command is followed by three arguments: the category of
-thing being defined, the class to which it belongs, and its
-name. Thus,@refill
-
-@example
-@group
-@@defcv @{Class Option@} Window border-pattern
-@dots{}
-@@end defcv
-@end group
-@end example
-
-@noindent
-illustrates how you would write the first line of a definition of the
-@code{border-pattern} class option of the class @code{Window}.@refill
-
-The template is
-
-@example
-@group
-@@defcv @var{category} @var{class} @var{name}
-@dots{}
-@@end defcv
-@end group
-@end example
-
-@code{@@defcv} creates an entry in the index of variables.
-
-@findex defivar
-@item @@defivar @var{class} @var{name}
-The @code{@@defivar} command is the definition command for instance
-variables in object-oriented programming. @code{@@defivar} is
-equivalent to @samp{@@defcv @{Instance Variable@} @dots{}}@refill
-
-The template is:
-
-@example
-@group
-@@defivar @var{class} @var{instance-variable-name}
-@var{body-of-definition}
-@@end defivar
-@end group
-@end example
-
-@code{@@defivar} creates an entry in the index of variables.
-
-@findex defop
-@item @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
-The @code{@@defop} command is the general definition command for
-entities that may resemble methods in object-oriented programming.
-These entities take arguments, as functions do, but are associated
-with particular classes of objects.@refill
-
-For example, some systems have constructs called @dfn{wrappers} that
-are associated with classes as methods are, but that act more like
-macros than like functions. You could use @code{@@defop Wrapper} to
-describe one of these.@refill
-
-Sometimes it is useful to distinguish methods and @dfn{operations}.
-You can think of an operation as the specification for a method.
-Thus, a window system might specify that all window classes have a
-method named @code{expose}; we would say that this window system
-defines an @code{expose} operation on windows in general. Typically,
-the operation has a name and also specifies the pattern of arguments;
-all methods that implement the operation must accept the same
-arguments, since applications that use the operation do so without
-knowing which method will implement it.@refill
-
-Often it makes more sense to document operations than methods. For
-example, window application developers need to know about the
-@code{expose} operation, but need not be concerned with whether a
-given class of windows has its own method to implement this operation.
-To describe this operation, you would write:@refill
-
-@example
-@@defop Operation windows expose
-@end example
-
-The @code{@@defop} command is written at the beginning of a line and
-is followed on the same line by the overall name of the category of
-operation, the name of the class of the operation, the name of the
-operation, and its arguments, if any.@refill
-
-@need 800
-@noindent
-The template is:
-
-@example
-@group
-@@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
-@var{body-of-definition}
-@@end defop
-@end group
-@end example
-
-@code{@@defop} creates an entry, such as `@code{expose} on
-@code{windows}', in the index of functions.@refill
-
-@findex defmethod
-@item @@defmethod @var{class} @var{name} @var{arguments}@dots{}
-The @code{@@defmethod} command is the definition command for methods
-in object-oriented programming. A method is a kind of function that
-implements an operation for a particular class of objects and its
-subclasses. In the Lisp Machine, methods actually were functions, but
-they were usually defined with @code{defmethod}.
-
-@code{@@defmethod} is equivalent to @samp{@@defop Method @dots{}}.
-The command is written at the beginning of a line and is followed by
-the name of the class of the method, the name of the method, and its
-arguments, if any.@refill
-
-@need 800
-@noindent
-For example,
-
-@example
-@group
-@@defmethod @code{bar-class} bar-method argument
-@dots{}
-@@end defmethod
-@end group
-@end example
-
-@noindent
-illustrates the definition for a method called @code{bar-method} of
-the class @code{bar-class}. The method takes an argument.@refill
-
-The template is:
-
-@example
-@group
-@@defmethod @var{class} @var{method-name} @var{arguments}@dots{}
-@var{body-of-definition}
-@@end defmethod
-@end group
-@end example
-
-@c !!! reworded to prevent overfull hbox --bob 26 Mar 93
-@code{@@defmethod} creates an entry in the index of functions, such as
-`@code{bar-method} on @code{bar-class}'.@refill
-@end table
-
-@node Data Types, , Abstract Objects, Def Cmds in Detail
-@subsection Data Types
-
-Here is the command for data types:@refill
-
-@table @code
-@findex deftp
-@item @@deftp @var{category} @var{name} @var{attributes}@dots{}
-The @code{@@deftp} command is the generic definition command for data
-types. The command is written at the beginning of a line and is
-followed on the same line by the category, by the name of the type
-(which is a word like @code{int} or @code{float}), and then by names of
-attributes of objects of that type. Thus, you could use this command
-for describing @code{int} or @code{float}, in which case you could use
-@code{data type} as the category. (A data type is a category of
-certain objects for purposes of deciding which operations can be
-performed on them.)@refill
-
-In Lisp, for example, @dfn{pair} names a particular data
-type, and an object of that type has two slots called the
-@sc{car} and the @sc{cdr}. Here is how you would write the first line
-of a definition of @code{pair}.@refill
-
-@example
-@group
-@@deftp @{Data type@} pair car cdr
-@dots{}
-@@end deftp
-@end group
-@end example
-
-@need 950
-The template is:
-
-@example
-@group
-@@deftp @var{category} @var{name-of-type} @var{attributes}@dots{}
-@var{body-of-definition}
-@@end deftp
-@end group
-@end example
-
-@code{@@deftp} creates an entry in the index of data types.
-@end table
-
-@node Def Cmd Conventions, Sample Function Definition, Def Cmds in Detail, Definition Commands
-@section Conventions for Writing Definitions
-@cindex Definition conventions
-@cindex Conventions for writing definitions
-
-When you write a definition using @code{@@deffn}, @code{@@defun}, or
-one of the other definition commands, please take care to use
-arguments that indicate the meaning, as with the @var{count} argument
-to the @code{forward-word} function. Also, if the name of an argument
-contains the name of a type, such as @var{integer}, take care that the
-argument actually is of that type.@refill
-
-@node Sample Function Definition, , Def Cmd Conventions, Definition Commands
-@section A Sample Function Definition
-@cindex Function definitions
-@cindex Command definitions
-@cindex Macro definitions
-@cindex Sample function definition
-
-A function definition uses the @code{@@defun} and @code{@@end defun}
-commands. The name of the function follows immediately after the
-@code{@@defun} command and it is followed, on the same line, by the
-parameter list.@refill
-
-Here is a definition from @cite{The GNU Emacs Lisp Reference Manual}.
-(@xref{Calling Functions, , Calling Functions, elisp, The GNU Emacs
-Lisp Reference Manual}.)
-
-@quotation
-@defun apply function &rest arguments
-@code{apply} calls @var{function} with @var{arguments}, just
-like @code{funcall} but with one difference: the last of
-@var{arguments} is a list of arguments to give to
-@var{function}, rather than a single argument. We also say
-that this list is @dfn{appended} to the other arguments.
-
-@code{apply} returns the result of calling @var{function}.
-As with @code{funcall}, @var{function} must either be a Lisp
-function or a primitive function; special forms and macros
-do not make sense in @code{apply}.
-
-@example
-(setq f 'list)
- @result{} list
-(apply f 'x 'y 'z)
-@error{} Wrong type argument: listp, z
-(apply '+ 1 2 '(3 4))
- @result{} 10
-(apply '+ '(1 2 3 4))
- @result{} 10
-
-(apply 'append '((a b c) nil (x y z) nil))
- @result{} (a b c x y z)
-@end example
-
-An interesting example of using @code{apply} is found in the description
-of @code{mapcar}.@refill
-@end defun
-@end quotation
-
-@need 1200
-In the Texinfo source file, this example looks like this:
-
-@example
-@group
-@@defun apply function &rest arguments
-
-@@code@{apply@} calls @@var@{function@} with
-@@var@{arguments@}, just like @@code@{funcall@} but with one
-difference: the last of @@var@{arguments@} is a list of
-arguments to give to @@var@{function@}, rather than a single
-argument. We also say that this list is @@dfn@{appended@}
-to the other arguments.
-@end group
-
-@group
-@@code@{apply@} returns the result of calling
-@@var@{function@}. As with @@code@{funcall@},
-@@var@{function@} must either be a Lisp function or a
-primitive function; special forms and macros do not make
-sense in @@code@{apply@}.
-@end group
-
-@group
-@@example
-(setq f 'list)
- @@result@{@} list
-(apply f 'x 'y 'z)
-@@error@{@} Wrong type argument: listp, z
-(apply '+ 1 2 '(3 4))
- @@result@{@} 10
-(apply '+ '(1 2 3 4))
- @@result@{@} 10
-
-(apply 'append '((a b c) nil (x y z) nil))
- @@result@{@} (a b c x y z)
-@@end example
-@end group
-
-@group
-An interesting example of using @@code@{apply@} is found
-in the description of @@code@{mapcar@}.@@refill
-@@end defun
-@end group
-@end example
-
-@noindent
-In this manual, this function is listed in the Command and Variable
-Index under @code{apply}.@refill
-
-Ordinary variables and user options are described using a format like
-that for functions except that variables do not take arguments.
-
-@node Footnotes, Conditionals, Definition Commands, Top
-@comment node-name, next, previous, up
-@chapter Footnotes
-@cindex Footnotes
-@findex footnote
-
-A @dfn{footnote} is for a reference that documents or elucidates the
-primary text.@footnote{A footnote should complement or expand upon
-the primary text, but a reader should not need to read a footnote to
-understand the primary text. For a thorough discussion of footnotes,
-see @cite{The Chicago Manual of Style}, which is published by the
-University of Chicago Press.}@refill
-
-In Texinfo, footnotes are created with the @code{@@footnote} command.
-This command is followed immediately by a left brace, then by the text
-of the footnote, and then by a terminating right brace. The template
-is:
-
-@example
-@@footnote@{@var{text}@}
-@end example
-
-Footnotes may be of any length, but are usually short.@refill
-
-For example, this clause is followed by a sample
-footnote@footnote{Here is the sample footnote.}; in the Texinfo
-source, it looks like this:@refill
-
-@example
-@dots{}a sample footnote @@footnote@{Here is the sample
-footnote.@}; in the Texinfo source@dots{}
-@end example
-
-In a printed manual or book, the reference mark for a footnote is a
-small, superscripted number; the text of the footnote is written at
-the bottom of the page, below a horizontal line.@refill
-
-In Info, the reference mark for a footnote is a pair of parentheses
-with the footnote number between them, like this: @samp{(1)}.@refill
-
-Info has two footnote styles, which determine where the text of the
-footnote is located:@refill
-
-@itemize @bullet
-@cindex @samp{@r{End}} node footnote style
-@item
-In the `End' node style, all the footnotes for a single node
-are placed at the end of that node. The footnotes are separated from
-the rest of the node by a line of dashes with the word
-@samp{Footnotes} within it. Each footnote begins with an
-@samp{(@var{n})} reference mark.@refill
-
-@need 700
-@noindent
-Here is an example of a single footnote in the end of node style:@refill
-
-@example
-@group
- --------- Footnotes ---------
-
-(1) Here is a sample footnote.
-@end group
-@end example
-
-@cindex @samp{@r{Separate}} footnote style
-@item
-In the `Separate' node style, all the footnotes for a single
-node are placed in an automatically constructed node of
-their own. In this style, a ``footnote reference'' follows
-each @samp{(@var{n})} reference mark in the body of the
-node. The footnote reference is actually a cross reference
-which you use to reach the footnote node.@refill
-
-The name of the node containing the footnotes is constructed
-by appending @w{@samp{-Footnotes}} to the name of the node
-that contains the footnotes. (Consequently, the footnotes'
-node for the @file{Footnotes} node is
-@w{@file{Footnotes-Footnotes}}!) The footnotes' node has an
-`Up' node pointer that leads back to its parent node.@refill
-
-@noindent
-Here is how the first footnote in this manual looks after being
-formatted for Info in the separate node style:@refill
-
-@smallexample
-@group
-File: texinfo.info Node: Overview-Footnotes, Up: Overview
-
-(1) Note that the first syllable of "Texinfo" is
-pronounced like "speck", not "hex". @dots{}
-@end group
-@end smallexample
-@end itemize
-
-A Texinfo file may be formatted into an Info file with either footnote
-style.@refill
-
-@findex footnotestyle
-Use the @code{@@footnotestyle} command to specify an Info file's
-footnote style. Write this command at the beginning of a line followed
-by an argument, either @samp{end} for the end node style or
-@samp{separate} for the separate node style.
-
-@need 700
-For example,
-
-@example
-@@footnotestyle end
-@end example
-@noindent
-or
-@example
-@@footnotestyle separate
-@end example
-
-Write an @code{@@footnotestyle} command before or shortly after the
-end-of-header line at the beginning of a Texinfo file. (If you
-include the @code{@@footnotestyle} command between the start-of-header
-and end-of-header lines, the region formatting commands will format
-footnotes as specified.)@refill
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-If you do not specify a footnote style, the formatting commands use
-their default style. Currently, @code{makeinfo} uses the `end' style,
-while @code{texinfo-format-buffer} and @code{texinfo-format-region}
-use the `separate' style.@refill
-
-@c !!! note: makeinfo's --footnote-style option overrides footnotestyle
-@ignore
-If you use @code{makeinfo} to create the Info file, the
-@samp{--footnote-style} option determines which style is used,
-@samp{end} for the end of node style or @samp{separate} for the
-separate node style. Thus, to format the Texinfo manual in the
-separate node style, you would use the following shell command:@refill
-
-@example
-makeinfo --footnote-style=separate texinfo.texi
-@end example
-
-@noindent
-To format the Texinfo manual in the end of node style, you would
-type:@refill
-
-@example
-makeinfo --footnote-style=end texinfo.texi
-@end example
-@end ignore
-@ignore
-If you use @code{texinfo-format-buffer} or
-@code{texinfo-format-region} to create the Info file, the value of the
-@code{texinfo-footnote-style} variable controls the footnote style.
-It can be either @samp{"separate"} for the separate node style or
-@samp{"end"} for the end of node style. (You can change the value of
-this variable with the @kbd{M-x edit-options} command (@pxref{Edit
-Options, , Editing Variable Values, emacs, The GNU Emacs Manual}), or
-with the @kbd{M-x set-variable} command (@pxref{Examining, , Examining
-and Setting Variables, emacs, The GNU Emacs Manual}).@refill
-
-The @code{texinfo-footnote-style} variable also controls the style if
-you use the @kbd{M-x makeinfo-region} or @kbd{M-x makeinfo-buffer}
-command in Emacs.@refill
-@end ignore
-This chapter contains two footnotes.@refill
-
-@node Conditionals, Format/Print Hardcopy, Footnotes, Top
-@comment node-name, next, previous, up
-@chapter Conditionally Visible Text
-@cindex Conditionally visible text
-@cindex Text, conditionally visible
-@cindex Visibility of conditional text
-@cindex If text conditionally visible
-@findex ifinfo
-@findex iftex
-
-Sometimes it is good to use different text for a printed manual and
-its corresponding Info file. In this case, you can use the
-@dfn{conditional commands} to specify which text is for the printed manual
-and which is for the Info file.@refill
-
-@menu
-* Conditional Commands:: How to specify text for Info or @TeX{}.
-* Using Ordinary TeX Commands:: You can use any and all @TeX{} commands.
-* set clear value:: How to designate which text to format (for
- both Info and @TeX{}); and how to set a
- flag to a string that you can insert.
-@end menu
-
-@node Conditional Commands, Using Ordinary TeX Commands, , Conditionals
-@ifinfo
-@heading Using @code{@@ifinfo} and @code{@@iftex}
-@end ifinfo
-
-@code{@@ifinfo} begins segments of text that should be ignored
-by @TeX{} when it
-typesets the printed manual. The segment of text appears only
-in the Info file.
-The @code{@@ifinfo} command should appear on a line by itself; end
-the Info-only text with a line containing @code{@@end ifinfo} by
-itself. At the beginning of a Texinfo file, the Info permissions are
-contained within a region marked by @code{@@ifinfo} and @code{@@end
-ifinfo}. (@xref{Info Summary and Permissions}.)@refill
-
-The @code{@@iftex} and @code{@@end iftex} commands are similar to the
-@code{@@ifinfo} and @code{@@end ifinfo} commands, except that they
-specify text that will appear in the printed manual but not in the Info
-file.@refill
-
-@need 700
-For example,
-
-@example
-@@iftex
-This text will appear only in the printed manual.
-@@end iftex
-
-@@ifinfo
-However, this text will appear only in Info.
-@@end ifinfo
-@end example
-
-@noindent
-The preceding example produces the following line:
-
-@iftex
-This text will appear only in the printed manual.
-@end iftex
-
-@ifinfo
-However, this text will appear only in Info.
-@end ifinfo
-
-@noindent
-Note how you only see one of the two lines, depending on whether you
-are reading the Info version or the printed version of this
-manual.@refill
-
-The @code{@@titlepage} command is a special variant of @code{@@iftex} that
-is used for making the title and copyright pages of the printed
-manual. (@xref{titlepage, , @code{@@titlepage}}.) @refill
-
-@node Using Ordinary TeX Commands, set clear value, Conditional Commands, Conditionals
-@comment node-name, next, previous, up
-@section Using Ordinary @TeX{} Commands
-@cindex @TeX{} commands, using ordinary
-@cindex Ordinary @TeX{} commands, using
-@cindex Commands using ordinary @TeX{}
-@cindex Plain@TeX{}
-
-Inside a region delineated by @code{@@iftex} and @code{@@end iftex},
-you can embed some Plain@TeX{} commands. Info will ignore these
-commands since they are only in that part of the file which is seen by
-@TeX{}. You can write the @TeX{} commands as you would write them in
-a normal @TeX{} file, except that you must replace the @samp{\} used
-by @TeX{} with an @samp{@@}. For example, in the @code{@@titlepage}
-section of a Texinfo file, you can use the @TeX{} command
-@code{@@vskip} to format the copyright page. (The @code{@@titlepage}
-command causes Info to ignore the region automatically, as it does
-with the @code{@@iftex} command.)@refill
-
-However, many features of Plain@TeX{} will not work, as they are
-overridden by features of Texinfo.
-
-@findex tex
-You can enter Plain@TeX{} completely, and use @samp{\} in the @TeX{}
-commands, by delineating a region with the @code{@@tex} and @code{@@end
-tex} commands. (The @code{@@tex} command also causes Info to ignore the
-region, like the @code{@@iftex}
-command.)@refill
-
-@cindex Mathematical expressions
-For example, here is a mathematical expression written in
-Plain@TeX{}:@refill
-
-@example
-@@tex
-$$ \chi^2 = \sum_@{i=1@}^N
- \left (y_i - (a + b x_i)
- \over \sigma_i\right)^2 $$
-@@end tex
-@end example
-
-@noindent
-The output of this example will appear only in a printed manual. If
-you are reading this in Info, you will not see anything after this
-paragraph.
-@iftex
-In a printed manual, the above expression looks like
-this:
-@end iftex
-
-@tex
-$$ \chi^2 = \sum_{i=1}^N
- \left(y_i - (a + b x_i)
- \over \sigma_i\right)^2 $$
-@end tex
-
-@node set clear value, , Using Ordinary TeX Commands, Conditionals
-@comment node-name, next, previous, up
-@section @code{@@set}, @code{@@clear}, and @code{@@value}
-
-You can direct the Texinfo formatting commands to format or ignore parts
-of a Texinfo file with the @code{@@set}, @code{@@clear}, @code{@@ifset},
-and @code{@@ifclear} commands.@refill
-
-In addition, you can use the @code{@@set @var{flag}} command to set the
-value of @var{flag} to a string of characters; and use
-@code{@@value@{@var{flag}@}} to insert that string. You can use
-@code{@@set}, for example, to set a date and use @code{@@value} to
-insert the date in several places in the Texinfo file.@refill
-
-@menu
-* ifset ifclear:: Format a region if a flag is set.
-* value:: Replace a flag with a string.
-* value Example:: An easy way to update edition information.
-@end menu
-
-@node ifset ifclear, value, , set clear value
-@subsection @code{@@ifset} and @code{@@ifclear}
-
-@findex ifset
-When a @var{flag} is set, the Texinfo formatting commands format text
-between subsequent pairs of @code{@@ifset @var{flag}} and @code{@@end
-ifset} commands. When the @var{flag} is cleared, the Texinfo formatting
-commands do @emph{not} format the text.
-
-Use the @code{@@set @var{flag}} command to turn on, or @dfn{set}, a
-@var{flag}; a @dfn{flag} can be any single word. The format for the
-command looks like this:@refill
-@findex set
-
-@example
-@@set @var{flag}
-@end example
-
-Write the conditionally formatted text between @code{@@ifset @var{flag}}
-and @code{@@end ifset} commands, like this:@refill
-
-@example
-@group
-@@ifset @var{flag}
-@var{conditional-text}
-@@end ifset
-@end group
-@end example
-
-For example, you can create one document that has two variants, such as
-a manual for a `large' and `small' model:@refill
-
-@example
-You can use this machine to dig up shrubs
-without hurting them.
-
-@@set large
-
-@@ifset large
-It can also dig up fully grown trees.
-@@end ifset
-
-Remember to replant promptly @dots{}
-@end example
-
-@noindent
-In the example, the formatting commands will format the text between
-@code{@@ifset large} and @code{@@end ifset} because the @code{large}
-flag is set.@refill
-
-@findex clear
-Use the @code{@@clear @var{flag}} command to turn off, or @dfn{clear},
-a flag. Clearing a flag is the opposite of setting a flag. The
-command looks like this:@refill
-
-@example
-@@clear @var{flag}
-@end example
-
-@noindent
-Write the command on a line of its own.
-
-When @var{flag} is cleared, the Texinfo formatting commands do
-@emph{not} format the text between @code{@@ifset @var{flag}} and
-@code{@@end ifset}; that text is ignored and does not appear in either
-printed or Info output.@refill
-
-For example, if you clear the flag of the preceding example by writing
-an @code{@@clear large} command after the @code{@@set large} command
-(but before the conditional text), then the Texinfo formatting commands
-ignore the text between the @code{@@ifset large} and @code{@@end ifset}
-commands. In the formatted output, that text does not appear; in both
-printed and Info output, you see only the lines that say, ``You can use
-this machine to dig up shrubs without hurting them. Remember to replant
-promptly @dots{}''.
-
-@findex ifclear
-If a flag is cleared with an @code{@@clear @var{flag}} command, then
-the formatting commands format text between subsequent pairs of
-@code{@@ifclear} and @code{@@end ifclear} commands. But if the flag
-is set with @code{@@set @var{flag}}, then the formatting commands do
-@emph{not} format text between an @code{@@ifclear} and an @code{@@end
-ifclear} command; rather, they ignore that text. An @code{@@ifclear}
-command looks like this:@refill
-
-@example
-@@ifclear @var{flag}
-@end example
-
-@need 700
-In brief, the commands are:@refill
-
-@table @code
-@item @@set @var{flag}
-Tell the Texinfo formatting commands that @var{flag} is set.@refill
-
-@item @@clear @var{flag}
-Tell the Texinfo formatting commands that @var{flag} is cleared.@refill
-
-@item @@ifset @var{flag}
-If @var{flag} is set, tell the Texinfo formatting commands to format
-the text up to the following @code{@@end ifset} command.@refill
-
-If @var{flag} is cleared, tell the Texinfo formatting commands to
-ignore text up to the following @code{@@end ifset} command.@refill
-
-@item @@ifclear @var{flag}
-If @var{flag} is set, tell the Texinfo formatting commands to ignore
-the text up to the following @code{@@end ifclear} command.@refill
-
-If @var{flag} is cleared, tell the Texinfo formatting commands to
-format the text up to the following @code{@@end ifclear}
-command.@refill
-@end table
-
-@node value, value Example, ifset ifclear, set clear value
-@subsection @code{@@value}
-@findex value
-
-You can use the @code{@@set} command to specify a value for a flag,
-which is expanded by the @code{@@value} command. The value is a string
-a characters.
-
-Write the @code{@@set} command like this:
-
-@example
-@@set foo This is a string.
-@end example
-
-@noindent
-This sets the value of @code{foo} to ``This is a string.''
-
-The Texinfo formatters replace an @code{@@value@{@var{flag}@}} command with
-the string to which @var{flag} is set.@refill
-
-Thus, when @code{foo} is set as shown above, the Texinfo formatters convert
-
-@example
-@group
-@@value@{foo@}
-@exdent @r{to}
-This is a string.
-@end group
-@end example
-
-You can write an @code{@@value} command within a paragraph; but you
-must write an @code{@@set} command on a line of its own.
-
-If you write the @code{@@set} command like this:
-
-@example
-@@set foo
-@end example
-
-@noindent
-without specifying a string, the value of @code{foo} is an empty string.
-
-If you clear a previously set flag with an @code{@@clear @var{flag}}
-command, a subsequent @code{@@value@{flag@}} command is invalid and the
-string is replaced with an error message that says @samp{@{No value for
-"@var{flag}"@}}.
-
-For example, if you set @code{foo} as follows:@refill
-
-@example
-@@set how-much very, very, very
-@end example
-
-@noindent
-then the formatters transform
-
-@example
-@group
-It is a @@value@{how-much@} wet day.
-@exdent @r{into}
-It is a very, very, very wet day.
-@end group
-@end example
-
-If you write
-
-@example
-@@clear how-much
-@end example
-
-@noindent
-then the formatters transform
-
-@example
-@group
-It is a @@value@{how-much@} wet day.
-@exdent @r{into}
-It is a @{No value for "how-much"@} wet day.
-@end group
-@end example
-
-@node value Example, , value, set clear value
-@subsection @code{@@value} Example
-
-You can use the @code{@@value} command to limit the number of places you
-need to change when you record an update to a manual.
-Here is how it is done in @cite{The GNU Make Manual}:
-
-@need 1000
-@noindent
-Set the flags:
-
-@example
-@group
-@@set EDITION 0.35 Beta
-@@set VERSION 3.63 Beta
-@@set UPDATED 14 August 1992
-@@set UPDATE-MONTH August 1992
-@end group
-@end example
-
-@need 750
-@noindent
-Write text for the first @code{@@ifinfo} section, for people reading the
-Texinfo file:
-
-@example
-@group
-This is Edition @@value@{EDITION@},
-last updated @@value@{UPDATED@},
-of @@cite@{The GNU Make Manual@},
-for @@code@{make@}, Version @@value@{VERSION@}.
-@end group
-@end example
-
-@need 1000
-@noindent
-Write text for the title page, for people reading the printed manual:
-@c List only the month and the year since that looks less fussy on a
-@c printed cover than a date that lists the day as well.
-
-@example
-@group
-@@title GNU Make
-@@subtitle A Program for Directing Recompilation
-@@subtitle Edition @@value@{EDITION@}, @dots{}
-@@subtitle @@value@{UPDATE-MONTH@}
-@end group
-@end example
-
-@noindent
-(On a printed cover, a date listing the month and the year looks less
-fussy than a date listing the day as well as the month and year.)
-
-@need 750
-@noindent
-Write text for the Top node, for people reading the Info file:
-
-@example
-@group
-This is Edition @@value@{EDITION@}
-of the @@cite@{GNU Make Manual@},
-last updated @@value@{UPDATED@}
-for @@code@{make@} Version @@value@{VERSION@}.
-@end group
-@end example
-
-@need 950
-After you format the manual, the text in the first @code{@@ifinfo}
-section looks like this:
-
-@example
-@group
-This is Edition 0.35 Beta, last updated 14 August 1992,
-of `The GNU Make Manual', for `make', Version 3.63 Beta.
-@end group
-@end example
-
-When you update the manual, change only the values of the flags; you do
-not need to rewrite the three sections.
-
-@node Format/Print Hardcopy, Create an Info File, Conditionals, Top
-@comment node-name, next, previous, up
-@chapter Format and Print Hardcopy
-@cindex Format and print hardcopy
-@cindex Hardcopy, printing it
-@cindex Making a printed manual
-@cindex Sorting indices
-@cindex Indices, sorting
-@cindex @TeX{} index sorting
-@findex texindex
-
-There are three major shell commands for making a printed manual from a
-Texinfo file: one for converting the Texinfo file into a file that will be
-printed, a second for sorting indices, and a third for printing the
-formatted document. When you use the shell commands, you can either
-work directly in the operating system shell or work within a shell
-inside GNU Emacs.@refill
-
-If you are using GNU Emacs, you can use commands provided by Texinfo
-mode instead of shell commands. In addition to the three commands to
-format a file, sort the indices, and print the result, Texinfo mode
-offers key bindings for commands to recenter the output buffer, show the
-print queue, and delete a job from the print queue.@refill
-
-@menu
-* Use TeX:: Use @TeX{} to format for hardcopy.
-* Shell Format & Print:: How to format and print a hardcopy manual
- with shell commands.
-* Within Emacs:: How to format and print from an Emacs shell.
-* Texinfo Mode Printing:: How to format and print in Texinfo mode.
-* Compile-Command:: How to print using Emacs's compile command.
-* Requirements Summary:: @TeX{} formatting requirements summary.
-* Preparing for TeX:: What you need to do to use @TeX{}.
-* Overfull hboxes:: What are and what to do with overfull hboxes.
-* smallbook:: How to print small format books and manuals.
-* A4 Paper:: How to print on European A4 paper.
-* Cropmarks and Magnification:: How to print marks to indicate the size
- of pages and how to print scaled up output.
-@end menu
-
-@node Use TeX, Shell Format & Print, , Format/Print Hardcopy
-@ifinfo
-@heading Use @TeX{}
-@end ifinfo
-
-The typesetting program called @TeX{} is used for formatting a Texinfo
-file. @TeX{} is a very powerful typesetting program and, if used right,
-does an exceptionally good job. @xref{Obtaining TeX, , How to Obtain
-@TeX{}}, for information on how to obtain @TeX{}.@refill
-
-The @code{makeinfo}, @code{texinfo-format-region}, and
-@code{texinfo-format-buffer} commands read the very same @@-commands
-in the Texinfo file as does @TeX{}, but process them differently to
-make an Info file; see @ref{Create an Info File}.@refill
-
-@node Shell Format & Print, Within Emacs, Use TeX, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section Format and Print Using Shell Commands
-
-@cindex DVI file
-Format the Texinfo file with the shell command @code{tex} followed by
-the name of the Texinfo file. This produces a formatted @sc{dvi} file
-as well as several auxiliary files containing indices, cross
-references, etc. The @sc{dvi} file (for @dfn{DeVice Independent}
-file) can be printed on a wide variety of printers.@refill
-
-The @code{tex} formatting command itself does not sort the indices; it
-writes an output file of unsorted index data. This is a misfeature of
-@TeX{}. Hence, to generate a printed index, you first need a sorted
-index to work from. The @code{texindex} command sorts indices. (The
-source file @file{texindex.c} comes as part of the standard GNU
-distribution and is usually installed when Emacs is installed.)@refill
-@findex texindex
-@ignore
-Usage: texindex [-k] [-T tempdir] infile [-o outfile] ...
-
-Each infile arg can optionally be followed by a `-o outfile' arg;
-for each infile that is not followed by a -o arg, the infile name with
-`s' (for `sorted') appended is used for the outfile.
-
--T dir is the directory to put temp files in, instead of /tmp.
--k means `keep tempfiles', for debugging.
-@end ignore
-
-The @code{tex} formatting command outputs unsorted index files under
-names that obey a standard convention. These names are the name of
-your main input file to the @code{tex} formatting command, with
-everything after the first period thrown away, and the two letter
-names of indices added at the end. For example, the raw index output
-files for the input file @file{foo.texinfo} would be @file{foo.cp},
-@file{foo.vr}, @file{foo.fn}, @file{foo.tp}, @file{foo.pg} and
-@file{foo.ky}. Those are exactly the arguments to give to
-@code{texindex}.@refill
-
-@need 1000
-Or else, you can use @samp{??} as ``wild-cards'' and give the command in
-this form:@refill
-
-@example
-texindex foo.??
-@end example
-
-@noindent
-This command will run @code{texindex} on all the unsorted index files,
-including any that you have defined yourself using @code{@@defindex}
-or @code{@@defcodeindex}. (You may execute @samp{texindex foo.??}
-even if there are similarly named files with two letter extensions
-that are not index files, such as @samp{foo.el}. The @code{texindex}
-command reports but otherwise ignores such files.)@refill
-
-For each file specified, @code{texindex} generates a sorted index file
-whose name is made by appending @samp{s} to the input file name. The
-@code{@@printindex} command knows to look for a file of that name.
-@code{texindex} does not alter the raw index output file.@refill
-
-After you have sorted the indices, you need to rerun the @code{tex}
-formatting command on the Texinfo file. This regenerates a formatted
-@sc{dvi} file with up-to-date index entries.@footnote{If you use more
-than one index and have cross references to an index other than the
-first, you must run @code{tex} @emph{three times} to get correct output:
-once to generate raw index data; again (after @code{texindex}) to output
-the text of the indices and determine their true page numbers; and a
-third time to output correct page numbers in cross references to them.
-However, cross references to indices are rare.}@refill
-
-To summarize, this is a three step process:
-
-@enumerate
-@item
-Run the @code{tex} formatting command on the Texinfo file. This
-generates the formatted @sc{dvi} file as well as the raw index files
-with two letter extensions.@refill
-
-@item
-Run the shell command @code{texindex} on the raw index files to sort
-them. This creates the corresponding sorted index files.@refill
-
-@item
-Rerun the @code{tex} formatting command on the Texinfo file. This
-regenerates a formatted @sc{dvi} file with the index entries in the
-correct order. This second run also corrects the page numbers for
-the cross references. (The tables of contents are always correct.)@refill
-@end enumerate
-
-You need not run @code{texindex} each time after you run the
-@code{tex} formatting. If you do not, on the next run, the @code{tex}
-formatting command will use whatever sorted index files happen to
-exist from the previous use of @code{texindex}. This is usually
-@sc{ok} while you are debugging.@refill
-
-@findex texi2dvi @r{(shell script)}
-Rather than type the @code{tex} and @code{texindex} commands yourself,
-you can use @code{texi2dvi}. This shell script is designed to
-simplify the @code{tex}---@code{texindex}---@code{tex} sequence by
-figuring out whether index files and @sc{dvi} files are up-to-date.
-It runs @code{texindex} and @code{tex} only when necessary.
-
-@need 1000
-The syntax for @code{texi2dvi} is like this (where @samp{%} is the
-shell prompt):@refill
-
-@example
-% texi2dvi @var{filename}@dots{}
-@end example
-
-@findex lpr @r{(@sc{dvi} print command)}
-Finally, you can print the @sc{dvi} file with the @sc{dvi} print command.
-The precise command to use depends on the system; @samp{lpr -d} is
-common. The @sc{dvi} print command may require a file name without any
-extension or with a @samp{.dvi} extension.@refill
-
-@need 1200
-The following commands, for example, sort the indices, format, and
-print the @cite{Bison Manual} (where @samp{%} is the shell
-prompt):@refill
-
-@example
-@group
-% tex bison.texinfo
-% texindex bison.??
-% tex bison.texinfo
-% lpr -d bison.dvi
-@end group
-@end example
-
-@noindent
-(Remember that the shell commands may be different at your site; but
-these are commonly used versions.)@refill
-
-@node Within Emacs, Texinfo Mode Printing, Shell Format & Print, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section From an Emacs Shell @dots{}
-@cindex Print, format from Emacs shell
-@cindex Format, print from Emacs shell
-@cindex Shell, format, print from
-@cindex Emacs shell, format, print from
-@cindex GNU Emacs shell, format, print from
-
-You can give formatting and printing commands from a shell within GNU
-Emacs. To create a shell within Emacs, type @kbd{M-x shell}. In this
-shell, you can format and print the document. @xref{Shell Format & Print, ,
-How to Format and Print Using Shell Commands}, for details.@refill
-
-You can switch to and from the shell buffer while @code{tex} is
-running and do other editing. If you are formatting a long document
-on a slow machine, this can be very convenient.@refill
-
-You can also use @code{texi2dvi} from an Emacs shell. For example,
-here is how to use @code{texi2dvi} to format and print @cite{Using and
-Porting GNU CC} from a shell within Emacs (where @samp{%} is the shell
-prompt):@refill
-
-@example
-@group
-% texi2dvi gcc.texinfo
-% lpr -d gcc.dvi
-@end group
-@end example
-@ifinfo
-
-@xref{Texinfo Mode Printing}, for more information about formatting
-and printing in Texinfo mode.@refill
-@end ifinfo
-
-@node Texinfo Mode Printing, Compile-Command, Within Emacs, Format/Print Hardcopy
-@section Formatting and Printing in Texinfo Mode
-@cindex Region printing in Texinfo mode
-@cindex Format and print in Texinfo mode
-@cindex Print and format in Texinfo mode
-
-Texinfo mode provides several predefined key commands for @TeX{}
-formatting and printing. These include commands for sorting indices,
-looking at the printer queue, killing the formatting job, and
-recentering the display of the buffer in which the operations
-occur.@refill
-
-@table @kbd
-@item C-c C-t C-r
-@itemx M-x texinfo-tex-region
-Run @TeX{} on the current region.@refill
-
-@item C-c C-t C-b
-@itemx M-x texinfo-tex-buffer
-Run @TeX{} on the current buffer.@refill
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-@item C-c C-t C-i
-@itemx M-x texinfo-texindex
-Sort the indices of a Texinfo file that have been formatted with
-@code{texinfo-tex-region} or @code{texinfo-tex-buffer}.@refill
-
-@item C-c C-t C-p
-@itemx M-x texinfo-tex-print
-Print a @sc{dvi} file that was made with @code{texinfo-tex-region} or
-@code{texinfo-tex-buffer}.@refill
-
-@item C-c C-t C-q
-@itemx M-x texinfo-show-tex-print-queue
-Show the print queue.@refill
-
-@item C-c C-t C-d
-@itemx M-x texinfo-delete-from-tex-print-queue
-Delete a job from the print queue; you will be prompted for the job
-number shown by a preceding @kbd{C-c C-t C-q} command
-(@code{texinfo-show-tex-print-queue}).@refill
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-@item C-c C-t C-k
-@itemx M-x texinfo-kill-tex-job
-Kill either the currently running @TeX{} job that has been started by
-@code{texinfo-tex-region} or @code{texinfo-tex-buffer}, or any other
-process running in the Texinfo shell buffer.@refill
-
-@item C-c C-t C-x
-@itemx M-x texinfo-quit-tex-job
-Quit a @TeX{} formatting job that has stopped because of an error by
-sending an @key{x} to it. When you do this, @TeX{} preserves a record
-of what it did in a @file{.log} file.@refill
-
-@item C-c C-t C-l
-@itemx M-x texinfo-recenter-tex-output-buffer
-Redisplay the shell buffer in which the @TeX{} printing and formatting
-commands are run to show its most recent output.@refill
-@end table
-
-Thus, the usual sequence of commands for formatting a buffer is as
-follows (with comments to the right):@refill
-
-@example
-@group
-C-c C-t C-b @r{Run @TeX{} on the buffer.}
-C-c C-t C-i @r{Sort the indices.}
-C-c C-t C-b @r{Rerun @TeX{} to regenerate indices.}
-C-c C-t C-p @r{Print the @sc{dvi} file.}
-C-c C-t C-q @r{Display the printer queue.}
-@end group
-@end example
-
-The Texinfo mode @TeX{} formatting commands start a subshell in Emacs
-called the @file{*texinfo-tex-shell*}. The @code{texinfo-tex-command},
-@code{texinfo-texindex-command}, and @code{tex-dvi-print-command}
-commands are all run in this shell.
-
-You can watch the commands operate in the @samp{*texinfo-tex-shell*} buffer,
-and you can switch to and from and use the @samp{*texinfo-tex-shell*} buffer
-as you would any other shell buffer.@refill
-
-@need 1500
-The formatting and print commands depend on the values of several variables.
-The default values are:@refill
-
-@sp 1
-@example
-@group
- @r{Variable} @r{Default value}
-
-texinfo-tex-command "tex"
-texinfo-texindex-command "texindex"
-texinfo-tex-shell-cd-command "cd"
-texinfo-tex-dvi-print-command "lpr -d"
-texinfo-show-tex-queue-command "lpq"
-texinfo-delete-from-print-queue-command "lprm"
-texinfo-start-of-header "%**start"
-texinfo-end-of-header "%**end"
-texinfo-tex-trailer "@@bye"
-@end group
-@end example
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-The default values of both the @code{texinfo-tex-command} and the
-@code{texinfo-texindex-command} variables are set in the @file{texnfo-tex.el}
-file.@refill
-
-You can change the values of these variables with the @kbd{M-x
-edit-options} command (@pxref{Edit Options, , Editing Variable Values,
-emacs, The GNU Emacs Manual}), with the @kbd{M-x set-variable} command
-(@pxref{Examining, , Examining and Setting Variables, emacs, The GNU
-Emacs Manual}), or with your @file{.emacs} initialization file
-(@pxref{Init File, , , emacs, The GNU Emacs Manual}).@refill
-
-@node Compile-Command, Requirements Summary, Texinfo Mode Printing, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section Using the Local Variables List
-@cindex Local variables
-@cindex Compile command for formatting
-@cindex Format with the compile command
-
-Yet another way to apply the @TeX{} formatting command to a Texinfo
-file is to put that command in a @dfn{local variables list} at the end
-of the Texinfo file. You can then specify the @TeX{} formatting
-command as a @code{compile-command} and have Emacs run the @TeX{}
-formatting command by typing @kbd{M-x compile}. This creates a
-special shell called the @samp{*compilation buffer*} in which Emacs
-runs the compile command. For example, at the end of the
-@file{gdb.texinfo} file, after the @code{@@bye}, you would put the
-following:@refill
-
-@example
-@@c Local Variables:
-@@c compile-command: "tex gdb.texinfo"
-@@c End:
-@end example
-
-@noindent
-This technique is most often used by programmers who also compile programs
-this way; see @ref{Compilation, , , emacs, The GNU Emacs Manual}.@refill
-
-@node Requirements Summary, Preparing for TeX, Compile-Command, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section @TeX{} Formatting Requirements Summary
-@cindex Requirements for formatting
-@cindex Formatting requirements
-
-Every Texinfo file that is to be input to @TeX{} must begin with a
-@code{\input} command and contain an @code{@@settitle} command:@refill
-
-@example
-\input texinfo
-@@settitle @var{name-of-manual}
-@end example
-
-@noindent
-The first command instructs @TeX{} to load the macros it needs to
-process a Texinfo file and the second command specifies the title of
-printed manual.@refill
-
-@need 1000
-Every Texinfo file must end with a line that terminates @TeX{}
-processing and forces out unfinished pages:@refill
-
-@example
-@@bye
-@end example
-
-Strictly speaking, these three lines are all a Texinfo file needs for
-@TeX{}, besides the body. (The @code{@@setfilename} line is the only
-line that a Texinfo file needs for Info formatting.)@refill
-
-Usually, the file's first line contains an @samp{@@c -*-texinfo-*-}
-comment that causes Emacs to switch to Texinfo mode when you edit the
-file. In addition, the beginning usually includes an
-@code{@@setfilename} for Info formatting, an @code{@@setchapternewpage}
-command, a title page, a copyright page, and permissions. Besides an
-@code{@@bye}, the end of a file usually includes indices and a table of
-contents.@refill
-
-@iftex
-For more information, see
-@ref{setchapternewpage, , @code{@@setchapternewpage}},
-@ref{Headings, ,Page Headings},
-@ref{Titlepage & Copyright Page},
-@ref{Printing Indices & Menus}, and
-@ref{Contents}.
-@end iftex
-@noindent
-@ifinfo
-For more information, see@*
-@ref{setchapternewpage, , @code{@@setchapternewpage}},@*
-@ref{Headings, ,Page Headings},@*
-@ref{Titlepage & Copyright Page},@*
-@ref{Printing Indices & Menus}, and@*
-@ref{Contents}.
-@end ifinfo
-
-@node Preparing for TeX, Overfull hboxes, Requirements Summary, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section Preparing to Use @TeX{}
-@cindex Preparing to use @TeX{}
-@cindex @TeX{} input initialization
-@cindex @code{TEXINPUTS} environment variable
-@vindex TEXINPUTS
-@cindex @b{.profile} initialization file
-@cindex @b{.cshrc} initialization file
-@cindex Initialization file for @TeX{} input
-
-@TeX{} needs to know where to find the @file{texinfo.tex} file
-that you have told it to input with the @samp{\input texinfo} command
-at the beginning of the first line. The @file{texinfo.tex} file tells
-@TeX{} how to handle @@-commands. (@file{texinfo.tex} is
-included in the standard GNU distributions.)@refill
-
-Usually, the @file{texinfo.tex} file is put in the default directory
-that contains @TeX{} macros (the @file{/usr/lib/tex/macros}
-directory) when GNU Emacs or other GNU software is installed.
-In this case, @TeX{} will
-find the file and you do not need to do anything special.
-Alternatively, you can put @file{texinfo.tex} in the directory in
-which the Texinfo source file is located, and @TeX{} will find it
-there.@refill
-
-However, you may want to specify the location of the @code{\input} file
-yourself. One way to do this is to write the complete path for the file
-after the @code{\input} command. Another way is to set the
-@code{TEXINPUTS} environment variable in your @file{.cshrc} or
-@file{.profile} file. The @code{TEXINPUTS} environment variable will tell
-@TeX{} where to find the @file{texinfo.tex} file and any other file that
-you might want @TeX{} to use.@refill
-
-Whether you use a @file{.cshrc} or @file{.profile} file depends on
-whether you use @code{csh}, @code{sh}, or @code{bash} for your shell
-command interpreter. When you use @code{csh}, it looks to the
-@file{.cshrc} file for initialization information, and when you use
-@code{sh} or @code{bash}, it looks to the @file{.profile} file.@refill
-
-@need 1000
-In a @file{.cshrc} file, you could use the following @code{csh} command
-sequence:@refill
-
-@example
-setenv TEXINPUTS .:/usr/me/mylib:/usr/lib/tex/macros
-@end example
-
-@need 1000
-In a @file{.profile} file, you could use the following @code{sh} command
-sequence:
-
-@example
-@group
-TEXINPUTS=.:/usr/me/mylib:/usr/lib/tex/macros
-export TEXINPUTS
-@end group
-@end example
-
-@noindent
-This would cause @TeX{} to look for @file{\input} file first in the current
-directory, indicated by the @samp{.}, then in a hypothetical user's
-@file{me/mylib} directory, and finally in the system library.@refill
-
-@node Overfull hboxes, smallbook, Preparing for TeX, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section Overfull ``hboxes''
-@cindex Overfull @samp{hboxes}
-@cindex @samp{hboxes}, overfull
-@cindex Final output
-
-@TeX{} is sometimes unable to typeset a line without extending it into
-the right margin. This can occur when @TeX{} comes upon what it
-interprets as a long word that it cannot hyphenate, such as an
-electronic mail network address or a very long title. When this
-happens, @TeX{} prints an error message like this:@refill
-
-@example
-Overfull \hbox (20.76302pt too wide)
-@end example
-
-@noindent
-(In @TeX{}, lines are in ``horizontal boxes'', hence the term, ``hbox''.
-The backslash, @samp{\}, is the @TeX{} equivalent of @samp{@@}.)@refill
-
-@TeX{} also provides the line number in the Texinfo source file and
-the text of the offending line, which is marked at all the places that
-@TeX{} knows how to hyphenate words.
-@xref{Debugging with TeX, , Catching Errors with @TeX{} Formatting},
-for more information about typesetting errors.@refill
-
-If the Texinfo file has an overfull hbox, you can rewrite the sentence
-so the overfull hbox does not occur, or you can decide to leave it. A
-small excursion into the right margin often does not matter and may not
-even be noticeable.@refill
-
-@cindex Black rectangle in hardcopy
-@cindex Rectangle, ugly, black in hardcopy
-However, unless told otherwise, @TeX{} will print a large, ugly, black
-rectangle beside the line that contains the overful hbox. This is so
-you will notice the location of the problem if you are correcting a
-draft.@refill
-
-@need 1000
-@findex finalout
-To prevent such a monstrosity from marring your final printout, write
-the following in the beginning of the Texinfo file on a line of its own,
-before the @code{@@titlepage} command:@refill
-
-@example
-@@finalout
-@end example
-
-@node smallbook, A4 Paper, Overfull hboxes, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section Printing ``Small'' Books
-@findex smallbook
-@cindex Small book size
-@cindex Book, printing small
-@cindex Page sizes for books
-@cindex Size of printed book
-
-By default, @TeX{} typesets pages for printing in an 8.5 by 11 inch
-format. However, you can direct @TeX{} to typeset a document in a 7 by
-9.25 inch format that is suitable for bound books by inserting the
-following command on a line by itself at the beginning of the Texinfo
-file, before the title page:@refill
-
-@example
-@@smallbook
-@end example
-
-@noindent
-(Since regular sized books are often about 7 by 9.25 inches, this
-command might better have been called the @code{@@regularbooksize}
-command, but it came to be called the @code{@@smallbook} command by
-comparison to the 8.5 by 11 inch format.)@refill
-
-If you write the @code{@@smallbook} command between the
-start-of-header and end-of-header lines, the Texinfo mode @TeX{}
-region formatting command, @code{texinfo-tex-region}, will format the
-region in ``small'' book size (@pxref{Start of Header}).@refill
-
-The Free Software Foundation distributes printed copies of @cite{The GNU
-Emacs Manual} and other manuals in the ``small'' book size.
-@xref{smallexample & smalllisp, , @code{@@smallexample} and
-@code{@@smalllisp}}, for information about commands that make it easier
-to produce examples for a smaller manual.@refill
-
-@node A4 Paper, Cropmarks and Magnification, smallbook, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section Printing on A4 Paper
-@cindex A4 paper, printing on
-@cindex Paper size, European A4
-@cindex European A4 paper
-@findex afourpaper
-
-You can tell @TeX{} to typeset a document for printing on European size
-A4 paper with the @code{@@afourpaper} command. Write the command on a
-line by itself between @code{@@iftex} and @code{@@end iftex} lines near
-the beginning of the Texinfo file, before the title page:@refill
-
-For example, this is how you would write the header for this manual:@refill
-
-@example
-@group
-\input texinfo @@c -*-texinfo-*-
-@@c %**start of header
-@@setfilename texinfo
-@@settitle Texinfo
-@@syncodeindex vr fn
-@@iftex
-@@afourpaper
-@@end iftex
-@@c %**end of header
-@end group
-@end example
-
-@node Cropmarks and Magnification, , A4 Paper, Format/Print Hardcopy
-@comment node-name, next, previous, up
-@section Cropmarks and Magnification
-
-@findex cropmarks
-@cindex Cropmarks for printing
-@cindex Printing cropmarks
-You can attempt to direct @TeX{} to print cropmarks at the corners of
-pages with the @code{@@cropmarks} command. Write the @code{@@cropmarks}
-command on a line by itself between @code{@@iftex} and @code{@@end
-iftex} lines near the beginning of the Texinfo file, before the title
-page, like this:@refill
-
-@example
-@group
-@@iftex
-@@cropmarks
-@@end iftex
-@end group
-@end example
-
-This command is mainly for printers that typeset several pages on one
-sheet of film; but you can attempt to use it to mark the corners of a
-book set to 7 by 9.25 inches with the @code{@@smallbook} command.
-(Printers will not produce cropmarks for regular sized output that is
-printed on regular sized paper.) Since different printing machines work
-in different ways, you should explore the use of this command with a
-spirit of adventure. You may have to redefine the command in the
-@file{texinfo.tex} definitions file.@refill
-
-@findex mag @r{(@TeX{} command)}
-@cindex Magnified printing
-@cindex Larger or smaller pages
-You can attempt to direct @TeX{} to typeset pages larger or smaller than
-usual with the @code{\mag} @TeX{} command. Everything that is typeset
-is scaled proportionally larger or smaller. (@code{\mag} stands for
-``magnification''.) This is @emph{not} a Texinfo @@-command, but is a
-Plain@TeX{} command that is prefixed with a backslash. You have to
-write this command between @code{@@tex} and @code{@@end tex}
-(@pxref{Using Ordinary TeX Commands, , Using Ordinary @TeX{}
-Commands}).@refill
-
-Follow the @code{\mag} command with an @samp{=} and then a number that
-is 1000 times the magnification you desire. For example, to print pages
-at 1.2 normal size, write the following near the beginning of the
-Texinfo file, before the title page:@refill
-
-@example
-@group
-@@tex
-\mag=1200
-@@end tex
-@end group
-@end example
-
-With some printing technologies, you can print normal-sized copies that
-look better than usual by using a larger-than-normal master.@refill
-
-Depending on your system, @code{\mag} may not work or may work only at
-certain magnifications. Be prepared to experiment.@refill
-
-@node Create an Info File, Install an Info File, Format/Print Hardcopy, Top
-@comment node-name, next, previous, up
-@chapter Creating an Info File
-@cindex Creating an Info file
-@cindex Info, creating an on-line file
-@cindex Formatting a file for Info
-
-@code{makeinfo} is a utility that converts a Texinfo file into an Info
-file; @code{texinfo-format-region} and @code{texinfo-format-buffer} are
-GNU Emacs functions that do the same.@refill
-
-A Texinfo file must possess an @code{@@setfilename} line near its
-beginning, otherwise the Info formatting commands will fail.@refill
-
-For information on installing the Info file in the Info system, see
-@ref{Install an Info File}.@refill
-
-@menu
-* makeinfo advantages:: @code{makeinfo} provides better error checking.
-* Invoking makeinfo:: How to run @code{makeinfo} from a shell.
-* makeinfo options:: Specify fill-column and other options.
-* Pointer Validation:: How to check that pointers point somewhere.
-* makeinfo in Emacs:: How to run @code{makeinfo} from Emacs.
-* texinfo-format commands:: Two Info formatting commands written
- in Emacs Lisp are an alternative
- to @code{makeinfo}.
-* Batch Formatting:: How to format for Info in Emacs Batch mode.
-* Tag and Split Files:: How tagged and split files help Info
- to run better.
-@end menu
-
-@node makeinfo advantages, Invoking makeinfo, , Create an Info File
-@ifinfo
-@heading @code{makeinfo} Preferred
-@end ifinfo
-
-The @code{makeinfo} utility creates an Info file from a Texinfo source
-file more quickly than either of the Emacs formatting commands and
-provides better error messages. We recommend it. @code{makeinfo} is a
-C program that is independent of Emacs. You do not need to run Emacs to
-use @code{makeinfo}, which means you can use @code{makeinfo} on machines
-that are too small to run Emacs. You can run @code{makeinfo} in
-any one of three ways: from an operating system shell, from a shell
-inside Emacs, or by typing a key command in Texinfo mode in Emacs.
-@refill
-
-The @code{texinfo-format-region} and the @code{texinfo-format-buffer}
-commands are useful if you cannot run @code{makeinfo}. Also, in some
-circumstances, they format short regions or buffers more quickly than
-@code{makeinfo}.@refill
-
-@node Invoking makeinfo, makeinfo options, makeinfo advantages, Create an Info File
-@section Invoking @code{makeinfo} from a Shell
-
-To create an Info file from a Texinfo file, type @code{makeinfo}
-followed by the name of the Texinfo file. Thus, to create the Info
-file for Bison, type the following at the shell prompt (where @samp{%}
-is the prompt):@refill
-
-@example
-% makeinfo bison.texinfo
-@end example
-
-(You can run a shell inside Emacs by typing @kbd{M-x
-shell}.)@refill
-
-@ifinfo
-Sometimes you will want to specify options. For example, if you wish
-to discover which version of @code{makeinfo} you are using,
-type:@refill
-
-@example
-% makeinfo --version
-@end example
-
-@xref{makeinfo options}, for more information.
-@end ifinfo
-
-@node makeinfo options, Pointer Validation, Invoking makeinfo, Create an Info File
-@comment node-name, next, previous, up
-@section Options for @code{makeinfo}
-@cindex @code{makeinfo} options
-@cindex Options for @code{makeinfo}
-
-The @code{makeinfo} command takes a number of options. Most often,
-options are used to set the value of the fill column and specify the
-footnote style. Each command line option is a word preceded by
-@samp{--}@footnote{@samp{--} has replaced @samp{+}, the old introductory
-character, to maintain POSIX.2 compatibility without losing long-named
-options.} or a letter preceded by @samp{-}. You can use abbreviations
-for the option names as long as they are unique.@refill
-
-For example, you could use the following command to create an Info
-file for @file{bison.texinfo} in which each line is filled to only 68
-columns (where @samp{%} is the prompt):@refill
-
-@example
-% makeinfo --fill-column=68 bison.texinfo
-@end example
-
-You can write two or more options in sequence, like this:@refill
-
-@example
-% makeinfo --no-split --fill-column=70 @dots{}
-@end example
-
-@noindent
-This would keep the Info file together as one possibly very long
-file and would also set the fill column to 70.@refill
-
-@iftex
-If you wish to discover which version of @code{makeinfo}
-you are using, type:@refill
-
-@example
-% makeinfo --version
-@end example
-@end iftex
-
-The options are:@refill
-
-@need 100
-@table @code
-@item -D @var{var}
-Cause @var{var} to be defined. This is equivalent to
-@code{@@set @var{var}} in the Texinfo file.
-
-@need 150
-@item --error-limit @var{limit}
-Set the maximum number of errors that @code{makeinfo} will report
-before exiting (on the assumption that continuing would be useless).
-The default number of errors that can be reported before
-@code{makeinfo} gives up is 100.@refill
-
-@need 150
-@item --fill-column @var{width}
-Specify the maximum number of columns in a line; this is the right-hand
-edge of a line. Paragraphs that are filled will be filled to this
-width. (Filling is the process of breaking up and connecting lines so
-that lines are the same length as or shorter than the number specified
-as the fill column. Lines are broken between words.) The default value
-for @code{fill-column} is 72.
-@refill
-
-@item --footnote-style @var{style}
-Set the footnote style to @var{style}, either @samp{end} for the end
-node style or @samp{separate} for the separate node style. The value
-set by this option overrides the value set in a Texinfo file by an
-@code{@@footnotestyle} command. When the footnote style is
-@samp{separate}, @code{makeinfo} makes a new node containing the
-footnotes found in the current node. When the footnote style is
-@samp{end}, @code{makeinfo} places the footnote references at the end
-of the current node.@refill
-
-@need 150
-@item -I @var{dir}
-Add @code{dir} to the directory search list for finding files that are
-included using the @code{@@include} command. By default,
-@code{makeinfo} searches only the current directory.
-
-@need 150
-@item --no-headers
-Do not include menus or node lines in the output. This results in an
-@sc{ascii} file that you cannot read in Info since it does not contain
-the requisite nodes or menus; but you can print such a file in a
-single, typewriter-like font and produce acceptable output.
-
-@need 150
-@item --no-split
-Suppress the splitting stage of @code{makeinfo}. Normally, large
-output files (where the size is greater than 70k bytes) are split into
-smaller subfiles, each one approximately 50k bytes. If you specify
-@samp{--no-split}, @code{makeinfo} will not split up the output
-file.@refill
-
-@need 100
-@item --no-pointer-validate
-@item --no-validate
-Suppress the pointer-validation phase of @code{makeinfo}. Normally,
-after a Texinfo file is processed, some consistency checks are made to
-ensure that cross references can be resolved, etc.
-@xref{Pointer Validation}.@refill
-
-@need 150
-@item --no-warn
-Suppress the output of warning messages. This does @emph{not}
-suppress the output of error messages, only warnings. You might
-want this if the file you are creating has examples of Texinfo cross
-references within it, and the nodes that are referenced do not actually
-exist.@refill
-
-@item --no-number-footnotes
-Supress automatic footnote numbering. By default, @code{makeinfo}
-numbers each footnote sequentially in a single node, resetting the
-current footnote number to 1 at the start of each node.
-
-@need 150
-@item --output @var{file}
-@itemx -o @var{file}
-Specify that the output should be directed to @var{file} and not to the
-file name specified in the @code{@@setfilename} command found in the Texinfo
-source. @var{file} can be the special token @samp{-}, which specifies
-standard output.
-
-@need 150
-@item --paragraph-indent @var{indent}
-Set the paragraph indentation style to @var{indent}. The value set by
-this option overrides the value set in a Texinfo file by an
-@code{@@paragraphindent} command. The value of @var{indent} is
-interpreted as follows:@refill
-
-@itemize @bullet
-@item
-If the value of @var{indent} is @samp{asis}, do not change the
-existing indentation at the starts of paragraphs.@refill
-
-@item
-If the value of @var{indent} is zero, delete any existing
-indentation.@refill
-
-@item
-If the value of @var{indent} is greater than zero, indent each
-paragraph by that number of spaces.@refill
-@end itemize
-
-@need 100
-@item --reference-limit @var{limit}
-Set the value of the number of references to a node that
-@code{makeinfo} will make without reporting a warning. If a node has more
-than this number of references in it, @code{makeinfo} will make the
-references but also report a warning.@refill
-
-@need 150
-@item -U @var{var}
-Cause @var{var} to be undefined. This is equivalent to
-@code{@@clear @var{var}} in the Texinfo file.
-
-@need 100
-@item --verbose
-Cause @code{makeinfo} to display messages saying what it is doing.
-Normally, @code{makeinfo} only outputs messages if there are errors or
-warnings.@refill
-
-@need 100
-@item --version
-Report the version number of this copy of @code{makeinfo}.@refill
-@end table
-
-@node Pointer Validation, makeinfo in Emacs, makeinfo options, Create an Info File
-@section Pointer Validation
-@cindex Pointer validation with @code{makeinfo}
-@cindex Validation of pointers
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-@code{makeinfo} will check the validity of the final Info file unless
-you suppress pointer-validation by using the
-@samp{--no-pointer-validation} option. Mostly, this means ensuring
-that nodes you have referenced really exist. Here is a complete list
-of what is checked:@refill
-
-@enumerate
-@item
-If a `Next', `Previous', or `Up' node reference is a reference to a
-node in the current file and is not an external reference such as to
-@file{(dir)}, then the referenced node must exist.@refill
-
-@item
-In every node, if the `Previous' node is different from the `Up' node,
-then the `Previous' node must also be pointed to by a `Next' node.@refill
-
-@item
-Every node except the `Top' node must have an `Up' pointer.@refill
-
-@item
-The node referenced by an `Up' pointer must contain a reference to the
-current node in some manner other than through a `Next' reference.
-This includes menu entries and cross references.@refill
-
-@item
-If the `Next' reference of a node is not the same as the `Next' reference
-of the `Up' reference, then the node referenced by the `Next' pointer
-must have a `Previous' pointer that points back to the current node.
-This rule allows the last node in a section to point to the first node
-of the next chapter.@refill
-@end enumerate
-
-@node makeinfo in Emacs, texinfo-format commands, Pointer Validation, Create an Info File
-@section Running @code{makeinfo} inside Emacs
-@cindex Running @code{makeinfo} in Emacs
-@cindex @code{makeinfo} inside Emacs
-@cindex Shell, running @code{makeinfo} in
-
-You can run @code{makeinfo} in GNU Emacs Texinfo mode by using either the
-@code{makeinfo-region} or the @code{makeinfo-buffer} commands. In
-Texinfo mode, the commands are bound to @kbd{C-c C-m C-r} and @kbd{C-c
-C-m C-b} by default.@refill
-
-@table @kbd
-@item C-c C-m C-r
-@itemx M-x makeinfo-region
-Format the current region for Info.@refill
-@findex makeinfo-region
-
-@item C-c C-m C-b
-@itemx M-x makeinfo-buffer
-Format the current buffer for Info.@refill
-@findex makeinfo-buffer
-@end table
-
-When you invoke either @code{makeinfo-region} or
-@code{makeinfo-buffer}, Emacs prompts for a file name, offering the
-name of the visited file as the default. You can edit the default
-file name in the minibuffer if you wish, before typing @key{RET} to
-start the @code{makeinfo} process.@refill
-
-The Emacs @code{makeinfo-region} and @code{makeinfo-buffer} commands
-run the @code{makeinfo} program in a temporary shell buffer. If
-@code{makeinfo} finds any errors, Emacs displays the error messages in
-the temporary buffer.@refill
-
-@cindex Errors, parsing
-@cindex Parsing errors
-@findex next-error
-You can parse the error messages by typing @kbd{C-x `}
-(@code{next-error}). This causes Emacs to go to and position the
-cursor on the line in the Texinfo source that @code{makeinfo} thinks
-caused the error. @xref{Compilation, , Running @code{make} or
-Compilers Generally, emacs, The GNU Emacs Manual}, for more
-information about using the @code{next-error} command.@refill
-
-In addition, you can kill the shell in which the @code{makeinfo}
-command is running or make the shell buffer display its most recent
-output.@refill
-
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-@table @kbd
-@item C-c C-m C-k
-@itemx M-x makeinfo-kill-job
-@findex makeinfo-kill-job
-Kill the currently running job created by
-@code{makeinfo-region} or @code{makeinfo-buffer}.@refill
-
-@item C-c C-m C-l
-@itemx M-x makeinfo-recenter-output-buffer
-@findex makeinfo-recenter-output-buffer
-Redisplay the @code{makeinfo} shell buffer to display its most recent
-output.@refill
-@end table
-
-@noindent
-(Note that the parallel commands for killing and recentering a @TeX{}
-job are @kbd{C-c C-t C-k} and @kbd{C-c C-t C-l}. @xref{Texinfo Mode
-Printing}.)@refill
-
-You can specify options for @code{makeinfo} by setting the
-@code{makeinfo-options} variable with either the @kbd{M-x
-edit-options} or the @kbd{M-x set-variable} command, or by setting the
-variable in your @file{.emacs} initialization file.@refill
-
-For example, you could write the following in your @file{.emacs} file:@refill
-
-@example
-@group
-(setq makeinfo-options
- "--paragraph-indent=0 --no-split
- --fill-column=70 --verbose")
-@end group
-@end example
-
-@c If you write these three cross references using xref, you see
-@c three references to the same named manual, which looks strange.
-@iftex
-For more information, see @ref{makeinfo options, , Options for
-@code{makeinfo}}, as well as ``Editing Variable Values,''``Examining and
-Setting Variables,'' and ``Init File'' in the @cite{The GNU Emacs
-Manual}.
-@end iftex
-@noindent
-@ifinfo
-For more information, see@*
-@ref{Edit Options, , Editing Variable Values, emacs, The GNU Emacs Manual},@*
-@ref{Examining, , Examining and Setting Variables, emacs, The GNU Emacs Manual},@*
-@ref{Init File, , , emacs, The GNU Emacs Manual}, and@*
-@ref{makeinfo options, , Options for @code{makeinfo}}.
-@end ifinfo
-
-@node texinfo-format commands, Batch Formatting, makeinfo in Emacs, Create an Info File
-@comment node-name, next, previous, up
-@section The @code{texinfo-format@dots{}} Commands
-@findex texinfo-format-region
-@findex texinfo-format-buffer
-
-In GNU Emacs in Texinfo mode, you can format part or all of a Texinfo
-file with the @code{texinfo-format-region} command. This formats the
-current region and displays the formatted text in a temporary buffer
-called @samp{*Info Region*}.@refill
-
-Similarly, you can format a buffer with the
-@code{texinfo-format-buffer} command. This command creates a new
-buffer and generates the Info file in it. Typing @kbd{C-x C-s} will
-save the Info file under the name specified by the
-@code{@@setfilename} line which must be near the beginning of the
-Texinfo file.@refill
-
-@table @kbd
-@item C-c C-e C-r
-@itemx @code{texinfo-format-region}
-Format the current region for Info.
-@findex texinfo-format-region
-
-@item C-c C-e C-b
-@itemx @code{texinfo-format-buffer}
-Format the current buffer for Info.
-@findex texinfo-format-buffer
-@end table
-
-The @code{texinfo-format-region} and @code{texinfo-format-buffer}
-commands provide you with some error checking, and other functions can
-provide you with further help in finding formatting errors. These
-procedures are described in an appendix; see @ref{Catching Mistakes}.
-However, the @code{makeinfo} program is often faster and
-provides better error checking (@pxref{makeinfo in Emacs}).@refill
-
-@node Batch Formatting, Tag and Split Files, texinfo-format commands, Create an Info File
-@comment node-name, next, previous, up
-@section Batch Formatting
-@cindex Batch formatting for Info
-@cindex Info batch formatting
-
-You can format Texinfo files for Info using @code{batch-texinfo-format}
-and Emacs Batch mode. You can run Emacs in Batch mode from any shell,
-including a shell inside of Emacs. (@xref{Command Switches, , Command
-Line Switches and Arguments, emacs, The GNU Emacs Manual}.)@refill
-
-Here is the command to format all the files that end in @file{.texinfo}
-in the current directory (where @samp{%} is the shell prompt):@refill
-
-@example
-% emacs -batch -funcall batch-texinfo-format *.texinfo
-@end example
-
-@noindent
-Emacs processes all the files listed on the command line, even if an
-error occurs while attempting to format some of them.@refill
-
-Run @code{batch-texinfo-format} only with Emacs in Batch mode as shown;
-it is not interactive. It kills the Batch mode Emacs on completion.@refill
-
-@code{batch-texinfo-format} is convenient if you lack @code{makeinfo}
-and want to format several Texinfo files at once. When you use Batch
-mode, you create a new Emacs process. This frees your current Emacs, so
-you can continue working in it. (When you run
-@code{texinfo-format-region} or @code{texinfo-format-buffer}, you cannot
-use that Emacs for anything else until the command finishes.)@refill
-
-@node Tag and Split Files, , Batch Formatting, Create an Info File
-@comment node-name, next, previous, up
-@section Tag Files and Split Files
-@cindex Making a tag table automatically
-@cindex Tag table, making automatically
-
-If a Texinfo file has more than 30,000 bytes,
-@code{texinfo-format-buffer} automatically creates a tag table
-for its Info file; @code{makeinfo} always creates a tag table. With
-a @dfn{tag table}, Info can jump to new nodes more quickly than it can
-otherwise.@refill
-
-@cindex Indirect subfiles
-In addition, if the Texinfo file contains more than about 70,000
-bytes, @code{texinfo-format-buffer} and @code{makeinfo} split the
-large Info file into shorter @dfn{indirect} subfiles of about 50,000
-bytes each. Big files are split into smaller files so that Emacs does
-not need to make a large buffer to hold the whole of a large Info
-file; instead, Emacs allocates just enough memory for the small, split
-off file that is needed at the time. This way, Emacs avoids wasting
-memory when you run Info. (Before splitting was implemented, Info
-files were always kept short and @dfn{include files} were designed as
-a way to create a single, large printed manual out of the smaller Info
-files. @xref{Include Files}, for more information. Include files are
-still used for very large documents, such as @cite{The Emacs Lisp
-Reference Manual}, in which each chapter is a separate file.)@refill
-
-When a file is split, Info itself makes use of a shortened version of
-the original file that contains just the tag table and references to
-the files that were split off. The split off files are called
-@dfn{indirect} files.@refill
-
-The split off files have names that are created by appending @w{@samp{-1}},
-@w{@samp{-2}}, @w{@samp{-3}} and so on to the file name specified by the
-@code{@@setfilename} command. The shortened version of the original file
-continues to have the name specified by @code{@@setfilename}.@refill
-
-At one stage in writing this document, for example, the Info file was saved
-as @file{test-texinfo} and that file looked like this:@refill
-
-@example
-@group
-Info file: test-texinfo, -*-Text-*-
-produced by texinfo-format-buffer
-from file: new-texinfo-manual.texinfo
-
-^_
-Indirect:
-test-texinfo-1: 102
-test-texinfo-2: 50422
-test-texinfo-3: 101300
-^_^L
-Tag table:
-(Indirect)
-Node: overview^?104
-Node: info file^?1271
-Node: printed manual^?4853
-Node: conventions^?6855
-@dots{}
-@end group
-@end example
-
-@noindent
-(But @file{test-texinfo} had far more nodes than are shown here.) Each of
-the split off, indirect files, @file{test-texinfo-1},
-@file{test-texinfo-2}, and @file{test-texinfo-3}, is listed in this file
-after the line that says @samp{Indirect:}. The tag table is listed after
-the line that says @samp{Tag table:}. @refill
-
-In the list of indirect files, the number following the file name
-records the cumulative number of bytes in the preceding indirect files,
-not counting the file list itself, the tag table, or the permissions
-text in each file. In the tag table, the number following the node name
-records the location of the beginning of the node, in bytes from the
-beginning.@refill
-
-If you are using @code{texinfo-format-buffer} to create Info files,
-you may want to run the @code{Info-validate} command. (The
-@code{makeinfo} command does such a good job on its own, you do not
-need @code{Info-validate}.) However, you cannot run the @kbd{M-x
-Info-validate} node-checking command on indirect files. For
-information on how to prevent files from being split and how to
-validate the structure of the nodes, see @ref{Using
-Info-validate}.@refill
-
-@node Install an Info File, Command List, Create an Info File, Top
-@comment node-name, next, previous, up
-@chapter Installing an Info File
-@cindex Installing an Info file
-@cindex Info file installation
-@cindex @file{dir} directory for Info installation
-
-Info files are usually kept in the @file{info}
-directory. (You can find the location of this directory within Emacs
-by typing @kbd{C-h i} to enter Info and then typing @kbd{C-x C-f} to
-see the full pathname to the @file{info} directory.)
-
-@menu
-* Directory file:: The top level menu for all Info files.
-* New Info File:: Listing a new info file.
-* Other Info Directories:: How to specify Info files that are
- located in other directories.
-@end menu
-
-@node Directory file, New Info File, , Install an Info File
-@ifinfo
-@heading The @file{dir} File
-@end ifinfo
-
-For Info to work, the @file{info} directory must contain a file that
-serves as a top level directory for the Info system. By convention,
-this file is called @file{dir}. The @file{dir} file is itself an Info
-file. It contains the top level menu for all the Info files in the
-system. The menu looks like this:@refill
-
-@example
-* Menu:
-
-* Info: (info). Documentation browsing system.
-* Emacs: (emacs). The extensible, self-documenting
- text editor.
-* Texinfo: (texinfo). With one source file, make
- either a printed manual using
- TeX or an Info file.
-@dots{}
-@end example
-
-Each of these menu entries points to the `Top' node of the Info file
-that is named in parentheses. (The menu entry does not need to
-specify the `Top' node, since Info goes to the `Top' node if no node
-name is mentioned. @xref{Other Info Files, , Nodes in Other Info
-Files}.)@refill
-
-Thus, the @samp{Info} entry points to the `Top' node of the
-@file{info} file and the @samp{Emacs} entry points to the `Top' node
-of the @file{emacs} file.@refill
-
-In each of the Info files, the `Up' pointer of the `Top' node refers
-back to the @code{dir} file. For example, the line for the `Top'
-node of the Emacs manual looks like this in Info:@refill
-
-@example
-File: emacs Node: Top, Up: (DIR), Next: Distrib
-@end example
-
-@noindent
-(Note that in this case, the @file{dir} file name is written in upper
-case letters---it can be written in either upper or lower case. Info
-has a feature that it will change the case of the file name to lower
-case if it cannot find the name as written.)@refill
-
-@c !!! Can any file name be written in upper or lower case,
-@c or is dir a special case?
-@c Yes, apparently so, at least with Gillespie's Info. --rjc 24mar92
-@c
-@node New Info File, Other Info Directories, Directory file, Install an Info File
-@section Listing a New Info File
-@cindex Adding a new info file
-@cindex Listing a new info file
-@cindex New info file, listing it in @file{dir} file
-@cindex Info file, listing new one
-@cindex @file{dir} file listing
-
-To add a new Info file to your system, write a menu entry for it in the
-menu in the @file{dir} file in the @file{info} directory. Also, move
-the new Info file itself to the @file{info} directory. For example, if
-you were adding documentation for GDB, you would write the following new
-entry:@refill
-
-@example
-* GDB: (gdb). The source-level C debugger.
-@end example
-
-@noindent
-The first part of the menu entry is the menu entry name, followed by a
-colon. The second part is the name of the Info file, in parentheses,
-followed by a period. The third part is the description.@refill
-
-Conventionally, the name of an Info file has a @file{.info} extension.
-Thus, you might list the name of the file like this:
-
-@example
-* GDB: (gdb.info). The source-level C debugger.
-@end example
-
-@noindent
-However, Info will look for a file with a @file{.info} extension if it
-does not find the file under the name given in the menu. This means
-that you can refer to the file @file{gdb.info} as @file{gdb}, as shown
-in the first example. This looks better.
-
-@node Other Info Directories, , New Info File, Install an Info File
-@comment node-name, next, previous, up
-@section Info Files in Other Directories
-@cindex Installing Info in another directory
-@cindex Info installed in another directory
-@cindex Another Info directory
-
-If an Info file is not in the @file{info} directory, there are two
-ways to specify its location:@refill
-
-@itemize @bullet
-@item
-Write the pathname as the menu's second part, or;@refill
-
-@item
-Specify the @file{info} directory name in an environment variable in
-your @file{.profile} or @file{.cshrc} initialization file. (Only you
-and others with the same environment variable will be able to find Info
-files whose location is specified this way.)@refill
-@end itemize
-
-For example, to reach a test file in the @file{~bob/manuals}
-directory, you could add an entry like this to the menu in the
-@file{dir} file:@refill
-
-@example
-* Test: (~bob/manuals/info-test). Bob's own test file.
-@end example
-
-@noindent
-In this case, the absolute file name of the @file{info-test} file is
-written as the second part of the menu entry.@refill
-
-@vindex INFOPATH
-Alternatively, you can tell Info where to look by setting the
-@code{INFOPATH} environment variable in your @file{.cshrc} or
-@file{.profile} file.@refill
-
-If you use @code{sh} or @code{bash} for your shell command interpreter,
-you must set the @code{INFOPATH} environment variable in the
-@file{.profile} initialization file; but if you use @code{csh}, you must
-set the variable in the @file{.cshrc} initialization file. The two
-files require slightly different command formats.@refill
-
-@itemize @bullet
-@item
-In a @file{.cshrc} file, you could set the @code{INFOPATH}
-variable as follows:@refill
-
-@smallexample
-setenv INFOPATH .:~bob/manuals:/usr/local/emacs/info
-@end smallexample
-
-@item
-In a @file{.profile} file, you would achieve the same effect by
-writing:@refill
-
-@smallexample
-INFOPATH=.:~bob/manuals:/usr/local/emacs/info
-export INFOPATH
-@end smallexample
-@end itemize
-
-@noindent
-Either form would cause Info to look first in the current directory,
-indicated by the @samp{.}, then in the @file{~bob/manuals} directory,
-and finally in the @file{/usr/local/emacs/info} directory (which is
-a common location for the standard Info directory).@refill
-
-@c ================ Appendix starts here ================
-
-@node Command List, Tips, Install an Info File, Top
-@appendix @@-Command List
-@cindex Alphabetical @@-command list
-@cindex List of @@-commands
-@cindex @@-command list
-
-Here is an alphabetical list of the @@-commands in Texinfo. Square
-brackets, @t{[}@w{ }@t{]}, indicate optional arguments; an ellipsis,
-@samp{@dots{}}, indicates repeated text.@refill
-
-@sp 1
-@table @code
-@item @@*
-Force a line break. Do not end a paragraph that uses @code{@@*} with
-an @code{@@refill} command. @xref{Line Breaks}.@refill
-
-@item @@.
-Stands for a period that really does end a sentence (usually after an
-end-of-sentence capital letter). @xref{Controlling Spacing}.@refill
-
-@item @@:
-Indicate to @TeX{} that an immediately preceding period, question
-mark, exclamation mark, or colon does not end a sentence. Prevent
-@TeX{} from inserting extra whitespace as it does at the end of a
-sentence. The command has no effect on the Info file output.
-@xref{Controlling Spacing}.@refill
-
-@item @@@@
-Stands for @samp{@@}. @xref{Braces Atsigns Periods, , Inserting
-@samp{@@}}.@refill
-
-@item @@@{
-Stands for a left-hand brace, @samp{@{}.
-@xref{Braces Atsigns Periods, , Inserting @@ braces and periods}.@refill
-
-@item @@@}
-Stands for a right-hand brace, @samp{@}}.
-@xref{Braces Atsigns Periods, , Inserting @@ braces and periods}.@refill
-
-@item @@appendix @var{title}
-Begin an appendix. The title appears in the table
-of contents of a printed manual. In Info, the title is
-underlined with asterisks. @xref{unnumbered & appendix, , The
-@code{@@unnumbered} and @code{@@appendix} Commands}.@refill
-
-@item @@appendixsec @var{title}
-@itemx @@appendixsection @var{title}
-Begin an appendix section within an appendix. The section title appears
-in the table of contents of a printed manual. In Info, the title is
-underlined with equal signs. @code{@@appendixsection} is a longer
-spelling of the @code{@@appendixsec} command. @xref{unnumberedsec
-appendixsec heading, , Section Commands}.@refill
-
-@item @@appendixsubsec @var{title}
-Begin an appendix subsection within an appendix. The title appears
-in the table of contents of a printed manual. In Info, the title is
-underlined with hyphens. @xref{unnumberedsubsec appendixsubsec
-subheading, , Subsection Commands}.@refill
-
-@item @@appendixsubsubsec @var{title}
-Begin an appendix subsubsection within a subappendix. The title
-appears in the table of contents of a printed manual. In Info, the
-title is underlined with periods. @xref{subsubsection,, The `subsub'
-Commands}.@refill
-
-@item @@asis
-Used following @code{@@table}, @code{@@ftable}, and @code{@@vtable} to
-print the table's first column without highlighting (``as is'').
-@xref{Two-column Tables, , Making a Two-column Table}.@refill
-
-@item @@author @var{author}
-Typeset @var{author} flushleft and underline it. @xref{title
-subtitle author, , The @code{@@title} and @code{@@author}
-Commands}.@refill
-
-@item @@b@{@var{text}@}
-Print @var{text} in @b{bold} font. No effect in Info. @xref{Fonts}.@refill
-
-@ignore
-@item @@br
-Force a paragraph break. If used within a line, follow @code{@@br}
-with braces. @xref{br, , @code{@@br}}.@refill
-@end ignore
-
-@item @@bullet@{@}
-Generate a large round dot, or the closest possible
-thing to one. @xref{bullet, , @code{@@bullet}}.@refill
-
-@item @@bye
-Stop formatting a file. The formatters do not see the contents of a
-file following an @code{@@bye} command. @xref{Ending a File}.@refill
-
-@item @@c @var{comment}
-Begin a comment in Texinfo. The rest of the line does not appear in
-either the Info file or the printed manual. A synonym for
-@code{@@comment}. @xref{Conventions, , General Syntactic
-Conventions}.@refill
-
-@item @@cartouche
-Highlight an example or quotation by drawing a box with rounded
-corners around it. Pair with @code{@@end cartouche}. No effect in
-Info. @xref{cartouche, , Drawing Cartouches Around Examples}.)@refill
-
-@item @@center @var{line-of-text}
-Center the line of text following the command.
-@xref{titlefont center sp, , @code{@@center}}.@refill
-
-@item @@chapheading @var{title}
-Print a chapter-like heading in the text, but not in the table of
-contents of a printed manual. In Info, the title is underlined with
-asterisks. @xref{majorheading & chapheading, , @code{@@majorheading}
-and @code{@@chapheading}}.@refill
-
-@item @@chapter @var{title}
-Begin a chapter. The chapter title appears in the table of
-contents of a printed manual. In Info, the title is underlined with
-asterisks. @xref{chapter, , @code{@@chapter}}.@refill
-
-@item @@cindex @var{entry}
-Add @var{entry} to the index of concepts. @xref{Index Entries, ,
-Defining the Entries of an Index}.@refill
-
-@item @@cite@{@var{reference}@}
-Highlight the name of a book or other reference that lacks a
-companion Info file. @xref{cite, , @code{@@cite}}.@refill
-
-@item @@clear @var{flag}
-Unset @var{flag}, preventing the Texinfo formatting commands from
-formatting text between subsequent pairs of @code{@@ifset @var{flag}}
-and @code{@@end ifset} commands, and preventing
-@code{@@value@{@var{flag}@}} from expanding to the value to which
-@var{flag} is set.
-@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
-
-@item @@code@{@var{sample-code}@}
-Highlight text that is an expression, a syntactically complete token
-of a program, or a program name. @xref{code, , @code{@@code}}.@refill
-
-@item @@comment @var{comment}
-Begin a comment in Texinfo. The rest of the line does not appear in
-either the Info file or the printed manual. A synonym for @code{@@c}.
-@xref{Conventions, , General Syntactic Conventions}.@refill
-
-@item @@contents
-Print a complete table of contents. Has no effect in Info, which uses
-menus instead. @xref{Contents, , Generating a Table of
-Contents}.@refill
-
-@item @@copyright@{@}
-Generate a copyright symbol. @xref{copyright symbol, ,
-@code{@@copyright}}.@refill
-
-@ignore
-@item @@ctrl@{@var{ctrl-char}@}
-Describe an @sc{ascii} control character. Insert actual control character
-into Info file. @xref{ctrl, , @code{@@ctrl}}.@refill
-@end ignore
-
-@item @@defcodeindex @var{index-name}
-Define a new index and its indexing command. Print entries in an
-@code{@@code} font. @xref{New Indices, , Defining New
-Indices}.@refill
-
-@item @@defcv @var{category} @var{class} @var{name}
-Format a description for a variable associated with a class in
-object-oriented programming. Takes three arguments: the category of
-thing being defined, the class to which it belongs, and its name.
-@xref{Definition Commands}.@refill
-
-@item @@deffn @var{category} @var{name} @var{arguments}@dots{}
-Format a description for a function, interactive command, or similar
-entity that may take arguments. @code{@@deffn} takes as arguments the
-category of entity being described, the name of this particular
-entity, and its arguments, if any. @xref{Definition Commands}.@refill
-
-@item @@defindex @var{index-name}
-Define a new index and its indexing command. Print entries in a roman
-font. @xref{New Indices, , Defining New Indices}.@refill
-
-@item @@defivar @var{class} @var{instance-variable-name}
-Format a description for an instance variable in object-oriented
-programming. The command is equivalent to @samp{@@defcv @{Instance
-Variable@} @dots{}}. @xref{Definition Commands}.@refill
-
-@item @@defmac @var{macro-name} @var{arguments}@dots{}
-Format a description for a macro. The command is equivalent to
-@samp{@@deffn Macro @dots{}}. @xref{Definition Commands}.@refill
-
-@item @@defmethod @var{class} @var{method-name} @var{arguments}@dots{}
-Format a description for a method in object-oriented programming. The
-command is equivalent to @samp{@@defop Method @dots{}}. Takes as
-arguments the name of the class of the method, the name of the
-method, and its arguments, if any. @xref{Definition Commands}.@refill
-
-@item @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
-Format a description for an operation in object-oriented programming.
-@code{@@defop} takes as arguments the overall name of the category of
-operation, the name of the class of the operation, the name of the
-operation, and its arguments, if any. @xref{Definition
-Commands}.@refill
-
-@need 100
-@item @@defopt @var{option-name}
-Format a description for a user option. The command is equivalent to
-@samp{@@defvr @{User Option@} @dots{}}. @xref{Definition Commands}.@refill
-
-@need 100
-@item @@defspec @var{special-form-name} @var{arguments}@dots{}
-Format a description for a special form. The command is equivalent to
-@samp{@@deffn @{Special Form@} @dots{}}. @xref{Definition Commands}.@refill
-
-@need 200
-@item @@deftp @var{category} @var{name-of-type} @var{attributes}@dots{}
-Format a description for a data type. @code{@@deftp} takes as
-arguments the category, the name of the type (which is a word like
-@samp{int} or @samp{float}), and then the names of attributes of
-objects of that
-type. @xref{Definition Commands}.@refill
-
-@item @@deftypefn @var{classification} @var{data-type} @var{name} @var{arguments}@dots{}
-Format a description for a function or similar entity that may take
-arguments and that is typed. @code{@@deftypefn} takes as arguments
-the classification of entity being described, the type, the name of
-the entity, and its arguments, if any. @xref{Definition
-Commands}.@refill
-
-@item @@deftypefun @var{data-type} @var{function-name} @var{arguments}@dots{}
-Format a description for a function in a typed language.
-The command is equivalent to @samp{@@deftypefn Function @dots{}}.
-@xref{Definition Commands}.@refill
-
-@item @@deftypevr @var{classification} @var{data-type} @var{name}
-Format a description for something like a variable in a typed
-language---an entity that records a value. Takes as arguments the
-classification of entity being described, the type, and the name of
-the entity. @xref{Definition Commands}.@refill
-
-@item @@deftypevar @var{data-type} @var{variable-name}
-Format a description for a variable in a typed language. The command is
-equivalent to @samp{@@deftypevr Variable @dots{}}. @xref{Definition
-Commands}.@refill
-
-@item @@defun @var{function-name} @var{arguments}@dots{}
-Format a description for functions. The command is equivalent to
-@samp{@@deffn Function @dots{}}. @xref{Definition Commands}.@refill
-
-@item @@defvar @var{variable-name}
-Format a description for variables. The command is equivalent to
-@samp{@@defvr Variable @dots{}}. @xref{Definition Commands}.@refill
-
-@item @@defvr @var{category} @var{name}
-Format a description for any kind of variable. @code{@@defvr} takes
-as arguments the category of the entity and the name of the entity.
-@xref{Definition Commands}.@refill
-
-@item @@dfn@{@var{term}@}
-Highlight the introductory or defining use of a term.
-@xref{dfn, , @code{@@dfn}}.@refill
-
-@need 100
-@item @@display
-Begin a kind of example. Indent text, do not fill, do not select a
-new font. Pair with @code{@@end display}. @xref{display, ,
-@code{@@display}}.@refill
-
-@need 100
-@item @@dmn@{@var{dimension}@}
-Format a dimension. Cause @TeX{} to insert a narrow space before
-@var{dimension}. No effect in Info. Use for writing a number
-followed by an abbreviation of a dimension name, such as
-@samp{12@dmn{pt}}, written as @samp{12@@dmn@{pt@}}, with no space
-between the number and the @code{@@dmn} command. @xref{dmn, ,
-@code{@@dmn}}.@refill
-
-@need 100
-@item @@dots@{@}
-Insert an ellipsis: @samp{@dots{}}.
-@xref{dots, , @code{@@dots}}.@refill
-
-@need 100
-@item @@emph@{@var{text}@}
-Highlight @var{text}; text is displayed in @emph{italics} in printed
-output, and surrounded by asterisks in Info. @xref{Emphasis, , Emphasizing Text}.@refill
-
-@need 100
-@item @@enumerate [@var{number-or-letter}]
-Begin a numbered list, using @code{@@item} for each entry.
-Optionally, start list with @var{number-or-letter}. Pair with
-@code{@@end enumerate}. @xref{enumerate, ,
-@code{@@enumerate}}.@refill
-
-@need 100
-@item @@equiv@{@}
-Indicate to the reader the exact equivalence of two forms with a
-glyph: @samp{@equiv{}}. @xref{Equivalence}.@refill
-
-@item @@error@{@}
-Indicate to the reader with a glyph that the following text is
-an error message: @samp{@error{}}. @xref{Error Glyph}.@refill
-
-@item @@evenfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
-Specify page footings for even-numbered (left-hand) pages. Not relevant to
-Info. @xref{Custom Headings, , How to Make Your Own Headings}.@refill
-
-@item @@evenheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
-Specify page headings for even-numbered (left-hand) pages. Not relevant to
-Info. @xref{Custom Headings, , How to Make Your Own Headings}.@refill
-
-@item @@everyfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
-Specify page footings for every page. Not relevant to Info. @xref{Custom
-Headings, , How to Make Your Own Headings}.@refill
-
-@item @@everyheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
-Specify page headings for every page. Not relevant to Info. @xref{Custom
-Headings, , How to Make Your Own Headings}.@refill
-
-@item @@example
-Begin an example. Indent text, do not fill, and select fixed-width font.
-Pair with @code{@@end example}. @xref{example, ,
-@code{@@example}}.@refill
-
-@item @@exdent @var{line-of-text}
-Remove any indentation a line might have. @xref{exdent, ,
-Undoing the Indentation of a Line}.@refill
-
-@item @@expansion@{@}
-Indicate the result of a macro expansion to the reader with a special
-glyph: @samp{@expansion{}}.
-@xref{expansion, , @expansion{} Indicating an Expansion}.@refill
-
-@item @@file@{@var{filename}@}
-Highlight the name of a file, buffer, node, or directory. @xref{file, ,
-@code{@@file}}.@refill
-
-@item @@finalout
-Prevent @TeX{} from printing large black warning rectangles beside
-over-wide lines. @xref{Overfull hboxes}.@refill
-
-@need 100
-@item @@findex @var{entry}
-Add @var{entry} to the index of functions. @xref{Index Entries, ,
-Defining the Entries of an Index}.@refill
-
-@need 200
-@item @@flushleft
-Left justify every line but leave the right end ragged.
-Leave font as is. Pair with @code{@@end flushleft}.
-@xref{flushleft & flushright, , @code{@@flushleft} and
-@code{@@flushright}}.@refill
-
-@need 200
-@item @@flushright
-Right justify every line but leave the left end ragged.
-Leave font as is. Pair with @code{@@end flushright}.
-@xref{flushleft & flushright, , @code{@@flushleft} and
-@code{@@flushright}}.@refill
-
-@need 200
-@item @@footnote@{@var{text-of-footnote}@}
-Enter a footnote. Footnote text is printed at the bottom of the page
-by @TeX{}; Info may format in either `End' node or `Separate' node style.
-@xref{Footnotes}.@refill
-
-@item @@footnotestyle @var{style}
-Specify an Info file's footnote style, either @samp{end} for the end
-node style or @samp{separate} for the separate node style.
-@xref{Footnotes}.@refill
-
-@item @@format
-Begin a kind of example. Like @code{@@example} or @code{@@display},
-but do not narrow the margins and do not select the fixed-width font.
-Pair with @code{@@end format}. @xref{example, ,
-@code{@@example}}.@refill
-
-@item @@ftable @var{formatting-command}
-Begin a two-column table, using @code{@@item} for each entry.
-Automatically enter each of the items in the first column into the
-index of functions. Pair with @code{@@end ftable}. The same as
-@code{@@table}, except for indexing. @xref{ftable vtable, ,
-@code{@@ftable} and @code{@@vtable}}.@refill
-
-@item @@group
-Hold text together that must appear on one printed page. Pair with
-@code{@@end group}. Not relevant to Info. @xref{group, ,
-@code{@@group}}.@refill
-
-@item @@heading @var{title}
-Print an unnumbered section-like heading in the text, but not in the
-table of contents of a printed manual. In Info, the title is
-underlined with equal signs. @xref{unnumberedsec appendixsec heading,
-, Section Commands}.@refill
-
-@item @@headings @var{on-off-single-double}
-Turn page headings on or off, or specify single-sided or double-sided
-page headings for printing. @code{@@headings on} is synonymous with
-@code{@@headings double}. @xref{headings on off, , The
-@code{@@headings} Command}.@refill
-
-@item @@i@{@var{text}@}
-Print @var{text} in @i{italic} font. No effect in Info.
-@xref{Fonts}.@refill
-
-@item @@ifclear @var{flag}
-If @var{flag} is cleared, the Texinfo formatting commands format text
-between @code{@@ifclear @var{flag}} and the following @code{@@end
-ifclear} command.
-@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
-
-@item @@ifinfo
-Begin a stretch of text that will be ignored by @TeX{} when it
-typesets the printed manual. The text appears only in the Info file.
-Pair with @code{@@end ifinfo}. @xref{Conditionals, , Conditionally
-Visible Text}.@refill
-
-@item @@ifset @var{flag}
-If @var{flag} is set, the Texinfo formatting commands format text
-between @code{@@ifset @var{flag}} and the following @code{@@end ifset}
-command.
-@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
-
-@item @@iftex
-Begin a stretch of text that will not appear in the Info file, but
-will be processed only by @TeX{}. Pair with @code{@@end iftex}.
-@xref{Conditionals, , Conditionally Visible Text}.@refill
-
-@item @@ignore
-Begin a stretch of text that will not appear in either the Info file
-or the printed output. Pair with @code{@@end ignore}.
-@xref{Comments, , Comments and Ignored Text}.@refill
-
-@item @@include @var{filename}
-Incorporate the contents of the file @var{filename} into the Info file
-or printed document. @xref{Include Files}.@refill
-
-@item @@inforef@{@var{node-name}, [@var{entry-name}], @var{info-file-name}@}
-Make a cross reference to an Info file for which there is no printed
-manual. @xref{inforef, , Cross references using
-@code{@@inforef}}.@refill
-
-@item \input @var{macro-definitions-file}
-Use the specified macro definitions file. This command is used only
-in the first line of a Texinfo file to cause @TeX{} to make use of the
-@file{texinfo} macro definitions file. The backslash in @code{\input}
-is used instead of an @code{@@} because @TeX{} does not properly
-recognize @code{@@} until after it has read the definitions file.
-@xref{Header, , The Texinfo File Header}.@refill
-
-@item @@item
-Indicate the beginning of a marked paragraph for @code{@@itemize} and
-@code{@@enumerate}; indicate the beginning of the text of a first column
-entry for @code{@@table}, @code{@@ftable}, and @code{@@vtable}.
-@xref{Lists and Tables}.@refill
-
-@item @@itemize @var{mark-generating-character-or-command}
-Produce a sequence of indented paragraphs, with a mark inside the left
-margin at the beginning of each paragraph. Pair with @code{@@end
-itemize}. @xref{itemize, , @code{@@itemize}}.@refill
-
-@item @@itemx
-Like @code{@@item} but do not generate extra vertical space above the
-item text. @xref{itemx, , @code{@@itemx}}.@refill
-
-@item @@kbd@{@var{keyboard-characters}@}
-Indicate text that consists of characters of input to be typed by
-users. @xref{kbd, , @code{@@kbd}}.@refill
-
-@item @@key@{@var{key-name}@}
-Highlight @var{key-name}, a conventional name for a key on a keyboard.
-@xref{key, , @code{@@key}}.@refill
-
-@item @@kindex @var{entry}
-Add @var{entry} to the index of keys. @xref{Index Entries, , Defining the
-Entries of an Index}.@refill
-
-@item @@lisp
-Begin an example of Lisp code. Indent text, do not fill, and select
-fixed-width font. Pair with @code{@@end lisp}. @xref{Lisp Example, ,
-@code{@@lisp}}.@refill
-
-@item @@majorheading @var{title}
-Print a chapter-like heading in the text, but not in the table of
-contents of a printed manual. Generate more vertical whitespace before
-the heading than the @code{@@chapheading} command. In Info, the chapter
-heading line is underlined with asterisks. @xref{majorheading &
-chapheading, , @code{@@majorheading} and @code{@@chapheading}}.@refill
-
-@item @@menu
-Mark the beginning of a menu of nodes in Info. No effect in a printed
-manual. Pair with @code{@@end menu}. @xref{Menus}.@refill
-
-@item @@minus@{@}
-Generate a minus sign. @xref{minus, , @code{@@minus}}.@refill
-
-@item @@need @var{n}
-Start a new page in a printed manual if fewer than @var{n} mils
-(thousandths of an inch) remain on the current page. @xref{need, ,
-@code{@@need}}.@refill
-
-@item @@node @var{name, next, previous, up}
-Define the beginning of a new node in Info, and serve as a locator for
-references for @TeX{}. @xref{node, , @code{@@node}}.@refill
-
-@need 200
-@item @@noindent
-Prevent text from being indented as if it were a new paragraph.
-@xref{noindent, , @code{@@noindent}}.@refill
-
-@item @@oddfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
-Specify page footings for odd-numbered (right-hand) pages. Not relevant to
-Info. @xref{Custom Headings, , How to Make Your Own Headings}.@refill
-
-@item @@oddheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
-Specify page headings for odd-numbered (right-hand) pages. Not relevant to
-Info. @xref{Custom Headings, , How to Make Your Own Headings}.@refill
-
-@item @@page
-Start a new page in a printed manual. No effect in Info.
-@xref{page, , @code{@@page}}.@refill
-
-@item @@paragraphindent @var{indent}
-Indent paragraphs by @var{indent} number of spaces; delete indentation
-if the value of @var{indent} is 0; and do not change indentation if
-@var{indent} is @code{asis}. @xref{paragraphindent, , Paragraph
-Indenting}.@refill
-
-@item @@pindex @var{entry}
-Add @var{entry} to the index of programs. @xref{Index Entries, , Defining
-the Entries of an Index}.@refill
-
-@item @@point@{@}
-Indicate the position of point in a buffer to the reader with a
-glyph: @samp{@point{}}. @xref{Point Glyph, , Indicating
-Point in a Buffer}.@refill
-
-@item @@print@{@}
-Indicate printed output to the reader with a glyph:
-@samp{@print{}}. @xref{Print Glyph}.@refill
-
-@item @@printindex @var{index-name}
-Print an alphabetized two-column index in a printed manual or generate
-an alphabetized menu of index entries for Info. @xref{Printing
-Indices & Menus}.@refill
-
-@item @@pxref@{@var{node-name}, [@var{entry}], [@var{topic-or-title}], [@var{info-file}], [@var{manual}]@}
-Make a reference that starts with a lower case `see' in a printed
-manual. Use within parentheses only. Do not follow command with a
-punctuation mark. The Info formatting commands automatically insert
-terminating punctuation as needed, which is why you do not need to
-insert punctuation. Only the first argument is mandatory.
-@xref{pxref, , @code{@@pxref}}.@refill
-
-@item @@quotation
-Narrow the margins to indicate text that is quoted from another real
-or imaginary work. Write command on a line of its own. Pair with
-@code{@@end quotation}. @xref{quotation, ,
-@code{@@quotation}}.@refill
-
-@need 100
-@item @@r@{@var{text}@}
-Print @var{text} in @r{roman} font. No effect in Info.
-@xref{Fonts}.@refill
-
-@need 300
-@item @@ref@{@var{node-name}, [@var{entry}], [@var{topic-or-title}], [@var{info-file}], [@var{manual}]@}
-Make a reference. In a printed manual, the reference does not start
-with a `See'. Follow command with a punctuation mark. Only the first
-argument is mandatory. @xref{ref, , @code{@@ref}}.@refill
-
-@need 300
-@item @@refill
-In Info, refill and indent the paragraph after all the other processing
-has been done. No effect on @TeX{}, which always refills. This command
-is no longer needed, since all formatters now automatically refill.
-@xref{Refilling Paragraphs}.@refill
-
-@need 300
-@item @@result@{@}
-Indicate the result of an expression to the reader with a special
-glyph: @samp{@result{}}. @xref{result, , @code{@@result}}.@refill
-
-@item @@samp@{@var{text}@}
-Highlight @var{text} that is a literal example of a sequence of
-characters. Used for single characters, for statements, and often for
-entire shell commands. @xref{samp, , @code{@@samp}}.@refill
-
-@item @@sc@{@var{text}@}
-Set @var{text} in a printed output in @sc{the small caps font} and
-set text in the Info file in uppercase letters.
-@xref{Smallcaps}.@refill
-
-@item @@section @var{title}
-Begin a section within a chapter. In a printed manual, the section
-title is numbered and appears in the table of contents. In Info, the
-title is underlined with equal signs. @xref{section, ,
-@code{@@section}}.@refill
-
-@item @@set @var{flag} [@var{string}]
-Make @var{flag} active, causing the Texinfo formatting commands to
-format text between subsequent pairs of @code{@@ifset @var{flag}} and
-@code{@@end ifset} commands. Optionally, set value of @var{flag} to
-@var{string}.
-@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
-
-@item @@setchapternewpage @var{on-off-odd}
-Specify whether chapters start on new pages, and if so, whether on
-odd-numbered (right-hand) new pages. @xref{setchapternewpage, ,
-@code{@@setchapternewpage}}.@refill
-
-@item @@setfilename @var{info-file-name}
-Provide a name for the Info file. @xref{Conventions, , General
-Syntactic Conventions}.@refill
-
-@item @@settitle @var{title}
-Provide a title for page headers in a printed manual.
-@xref{Conventions, , General Syntactic Conventions}.@refill
-
-@item @@shortcontents
-Print a short table of contents. Not relevant to Info, which uses
-menus rather than tables of contents. A synonym for
-@code{@@summarycontents}. @xref{Contents, , Generating a Table of
-Contents}.@refill
-
-@need 400
-@item @@smallbook
-Cause @TeX{} to produce a printed manual in a 7 by 9.25 inch format
-rather than the regular 8.5 by 11 inch format. @xref{smallbook, ,
-Printing Small Books}. Also, see @ref{smallexample & smalllisp, ,
-@code{@@smallexample} and @code{@@smalllisp}}.@refill
-
-@need 400
-@item @@smallexample
-Indent text to indicate an example. Do not fill, select fixed-width
-font. In @code{@@smallbook} format, print text in a smaller font than
-with @code{@@example}. Pair with @code{@@end smallexample}.
-@xref{smallexample & smalllisp, , @code{@@smallexample} and
-@code{@@smalllisp}}.@refill
-
-@need 400
-@item @@smalllisp
-Begin an example of Lisp code. Indent text, do not fill, select
-fixed-width font. In @code{@@smallbook} format, print text in a
-smaller font. Pair with @code{@@end smalllisp}. @xref{smallexample &
-smalllisp, , @code{@@smallexample} and @code{@@smalllisp}}.@refill
-
-@need 700
-@item @@sp @var{n}
-Skip @var{n} blank lines. @xref{sp, , @code{@@sp}}.@refill
-
-@need 700
-@item @@strong @var{text}
-Emphasize @var{text} by typesetting it in a @strong{bold} font for the
-printed manual and by surrounding it with asterisks for Info.
-@xref{emph & strong, , Emphasizing Text}.@refill
-
-@item @@subheading @var{title}
-Print an unnumbered subsection-like heading in the text, but not in
-the table of contents of a printed manual. In Info, the title is
-underlined with hyphens. @xref{unnumberedsubsec appendixsubsec
-subheading, , @code{@@unnumberedsubsec} @code{@@appendixsubsec}
-@code{@@subheading}}.@refill
-
-@item @@subsection @var{title}
-Begin a subsection within a section. In a printed manual, the
-subsection title is numbered and appears in the table of contents. In
-Info, the title is underlined with hyphens. @xref{subsection, ,
-@code{@@subsection}}.@refill
-
-@item @@subsubheading @var{title}
-Print an unnumbered subsubsection-like heading in the text, but not in
-the table of contents of a printed manual. In Info, the title is
-underlined with periods. @xref{subsubsection, , The `subsub'
-Commands}.@refill
-
-@item @@subsubsection @var{title}
-Begin a subsubsection within a subsection. In a printed manual,
-the subsubsection title is numbered and appears in the table of
-contents. In Info, the title is underlined with periods.
-@xref{subsubsection, , The `subsub' Commands}.@refill
-
-@item @@subtitle @var{title}
-In a printed manual, set a subtitle in a normal sized font flush to
-the right-hand side of the page. Not relevant to Info, which does not
-have title pages. @xref{title subtitle author, , @code{@@title}
-@code{@@subtitle} and @code{@@author} Commands}.@refill
-
-@item @@summarycontents
-Print a short table of contents. Not relevant to Info, which uses
-menus rather than tables of contents. A synonym for
-@code{@@shortcontents}. @xref{Contents, , Generating a Table of
-Contents}.@refill
-
-@need 300
-@item @@syncodeindex @var{from-index} @var{into-index}
-Merge the index named in the first argument into the index named in
-the second argument, printing the entries from the first index in
-@code{@@code} font. @xref{Combining Indices}.@refill
-
-@need 300
-@item @@synindex @var{from-index} @var{into-index}
-Merge the index named in the first argument into the index named in
-the second argument. Do not change the font of @var{from-index}
-entries. @xref{Combining Indices}.@refill
-
-@need 100
-@item @@t@{@var{text}@}
-Print @var{text} in a @t{fixed-width}, typewriter-like font.
-No effect in Info. @xref{Fonts}.@refill
-
-@need 400
-@item @@table @var{formatting-command}
-Begin a two-column table, using @code{@@item} for each entry. Write
-each first column entry on the same line as @code{@@item}. First
-column entries are printed in the font resulting from
-@var{formatting-command}. Pair with @code{@@end table}.
-@xref{Two-column Tables, , Making a Two-column Table}.
-Also see @ref{ftable vtable, , @code{@@ftable} and @code{@@vtable}},
-and @ref{itemx, , @code{@@itemx}}.@refill
-
-@item @@TeX@{@}
-Insert the logo @TeX{}. @xref{TeX and copyright, , Inserting @TeX{}
-and @copyright{}}.@refill
-
-@item @@tex
-Enter @TeX{} completely. Pair with @code{@@end tex}. @xref{Using
-Ordinary TeX Commands, , Using Ordinary @TeX{} Commands}.@refill
-
-@item @@thischapter
-In a heading or footing, stands for the number and name of the current
-chapter, in the format `Chapter 1: Title'. @xref{Custom
-Headings, , How to Make Your Own Headings}.@refill
-
-@item @@thischaptername
-In a heading or footing, stands for the name of the current chapter.
-@xref{Custom Headings, , How to Make Your Own Headings}.@refill
-
-@item @@thisfile
-In a heading or footing, stands for the name of the current
-@code{@@include} file. Does not insert anything if not within an
-@code{@@include} file. @xref{Custom Headings, , How to Make Your Own
-Headings}.@refill
-
-@item @@thispage
-In a heading or footing, stands for the current page number.
-@xref{Custom Headings, , How to Make Your Own Headings}.@refill
-
-@ignore
-@item @@thissection
-In a heading or footing, stands for the title of the current section.
-@xref{Custom Headings, , How to Make Your Own Headings}.@refill
-@end ignore
-
-@item @@thistitle
-In a heading or footing, stands for the name of the document, as specified
-by the @code{@@settitle} command. @xref{Custom Headings, , How to
-Make Your Own Headings}.@refill
-
-@item @@tindex @var{entry}
-Add @var{entry} to the index of data types. @xref{Index Entries, ,
-Defining the Entries of an Index}.@refill
-
-@item @@title @var{title}
-In a printed manual, set a title flush to the left-hand side of the
-page in a larger than normal font and underline it with a black rule.
-Not relevant to Info, which does not have title pages. @xref{title
-subtitle author, , The @code{@@title} @code{@@subtitle} and
-@code{@@author} Commands}.@refill
-
-@need 400
-@item @@titlefont@{@var{text}@}
-In a printed manual, print @var{text} in a larger than normal font.
-Not relevant to Info, which does not have title pages.
-@xref{titlefont center sp, , The @code{@@titlefont} @code{@@center}
-and @code{@@sp} Commands}.@refill
-
-@need 300
-@item @@titlepage
-Indicate to Texinfo the beginning of the title page. Write command on
-a line of its own. Pair with @code{@@end titlepage}. Nothing between
-@code{@@titlepage} and @code{@@end titlepage} appears in Info.
-@xref{titlepage, , @code{@@titlepage}}.@refill
-
-@need 150
-@item @@today@{@}
-Insert the current date, in `1 Jan 1900' style. @xref{Custom
-Headings, , How to Make Your Own Headings}.@refill
-
-@item @@top @var{title}
-In a Texinfo file to be formatted with @code{makeinfo}, identify the
-topmost @code{@@node} line in the file, which must be written on the line
-immediately preceding the @code{@@top} command. Used for
-@code{makeinfo}'s node pointer insertion feature. The title is
-underlined with asterisks. Both the @code{@@node} line and the @code{@@top}
-line normally should be enclosed by @code{@@ifinfo} and @code{@@end
-ifinfo}. In @TeX{} and @code{texinfo-format-buffer}, the @code{@@top}
-command is merely a synonym for @code{@@unnumbered}. @xref{makeinfo
-Pointer Creation, , Creating Pointers with @code{makeinfo}}.
-
-@item @@unnumbered @var{title}
-In a printed manual, begin a chapter that appears without chapter
-numbers of any kind. The title appears in the table of contents of a
-printed manual. In Info, the title is underlined with asterisks.
-@xref{unnumbered & appendix, , @code{@@unnumbered} and
-@code{@@appendix}}.@refill
-
-@item @@unnumberedsec @var{title}
-In a printed manual, begin a section that appears without section
-numbers of any kind. The title appears in the table of contents of a
-printed manual. In Info, the title is underlined with equal signs.
-@xref{unnumberedsec appendixsec heading, , Section Commands}.@refill
-
-@item @@unnumberedsubsec @var{title}
-In a printed manual, begin an unnumbered subsection within a
-chapter. The title appears in the table of contents of a printed
-manual. In Info, the title is underlined with hyphens.
-@xref{unnumberedsubsec appendixsubsec subheading, ,
-@code{@@unnumberedsubsec} @code{@@appendixsubsec}
-@code{@@subheading}}.@refill
-
-@item @@unnumberedsubsubsec @var{title}
-In a printed manual, begin an unnumbered subsubsection within a
-chapter. The title appears in the table of contents of a printed
-manual. In Info, the title is underlined with periods.
-@xref{subsubsection, , The `subsub' Commands}.@refill
-
-@item @@value@{@var{flag}@}
-Replace @var{flag} with the value to which it is set by @code{@@set
-@var{flag}}.
-@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
-
-@item @@var@{@var{metasyntactic-variable}@}
-Highlight a metasyntactic variable, which is something that stands for
-another piece of text. @xref{var, , Indicating Metasyntactic
-Variables}.@refill
-
-@need 400
-@item @@vindex @var{entry}
-Add @var{entry} to the index of variables. @xref{Index Entries, ,
-Defining the Entries of an Index}.@refill
-
-@need 400
-@item @@vskip @var{amount}
-In a printed manual, insert whitespace so as to push text on the
-remainder of the page towards the bottom of the page. Used in
-formatting the copyright page with the argument @samp{0pt plus
-1filll}. (Note spelling of @samp{filll}.) @code{@@vskip} may be used
-only in contexts ignored for Info. @xref{Copyright & Permissions, ,
-The Copyright Page and Printed Permissions}.@refill
-
-@need 400
-@item @@vtable @var{formatting-command}
-Begin a two-column table, using @code{@@item} for each entry.
-Automatically enter each of the items in the first column into the
-index of variables. Pair with @code{@@end vtable}. The same as
-@code{@@table}, except for indexing. @xref{ftable vtable, ,
-@code{@@ftable} and @code{@@vtable}}.@refill
-
-@need 400
-@item @@w@{@var{text}@}
-Prevent @var{text} from being split across two lines. Do not end a
-paragraph that uses @code{@@w} with an @code{@@refill} command.
-In the Texinfo file, keep @var{text} on one line.
-@xref{w, , @code{@@w}}.@refill
-
-@need 400
-@item @@xref@{@var{node-name}, [@var{entry}], [@var{topic-or-title}], [@var{info-file}], [@var{manual}]@}
-Make a reference that starts with `See' in a printed manual. Follow
-command with a punctuation mark. Only the first argument is
-mandatory. @xref{xref, , @code{@@xref}}.@refill
-@end table
-
-@node Tips, Sample Texinfo File, Command List, Top
-@comment node-name, next, previous, up
-@appendix Tips and Hints
-
-Here are some tips for writing Texinfo documentation:@refill
-
-@cindex Tips
-@cindex Usage tips
-@cindex Hints
-@itemize @bullet
-@item
-Write in the present tense, not in the past or the future.
-
-@item
-Write actively! For example, write ``We recommend that @dots{}'' rather
-than ``It is recommended that @dots{}''.
-
-@item
-Use 70 or 72 as your fill column. Longer lines are hard to read.
-
-@item
-Include a copyright notice and copying permissions.
-@end itemize
-
-@subsubheading Index, index, index!
-
-Write many index entries, in different ways.
-Readers like indices; they are helpful and convenient.
-
-Although it is easiest to write index entries as you write the body of
-the text, some people prefer to write entries afterwards. In either
-case, write an entry before the paragraph to which it applies. This
-way, an index entry points to the first page of a paragraph that is
-split across pages.
-
-Here are more hints we have found valuable:
-
-@itemize @bullet
-@item
-Write each index entry differently, so each entry refers to a different
-place in the document. The index of an Info file lists only one
-location for each entry.
-
-@item
-Write index entries only where a topic is discussed significantly. For
-example, it is not useful to index ``debugging information'' in a
-chapter on reporting bugs. Someone who wants to know about debugging
-information will certainly not find it in that chapter.
-
-@item
-Consistently capitalize the first word of every index entry, or else use
-lower case. According to convention, you should capitalize the first
-word of an index entry. However, this practice may make an index look
-crowded. Some writers prefer lower case. Regardless of which you
-prefer, choose one style and stick to it. Mixing the two styles looks
-bad.
-
-@item
-Always capitalize or use upper case for those words in an index for
-which this is proper, such as names of countries or acronyms.
-
-@item
-Write the indexing commands that refer to a whole section immediately
-after the section command, and write the indexing commands that refer to
-the paragraph before the paragraph.
-
-@need 1000
-In the example that follows, a blank line comes after the index
-entry for ``Leaping'':
-
-@example
-@group
-@@section The Dog and the Fox
-@@cindex Jumping, in general
-@@cindex Leaping
-
-@@cindex Dog, lazy, jumped over
-@@cindex Lazy dog jumped over
-@@cindex Fox, jumps over dog
-@@cindex Quick fox jumps over dog
-The quick brown fox jumps over the lazy dog.
-@end group
-@end example
-
-@noindent
-(Note that the example shows entries for the same concept that are
-written in different ways---@samp{Lazy dog}, and @samp{Dog, lazy}---so
-readers can look up the concept in different ways.)
-@end itemize
-
-@subsubheading Blank lines
-
-@itemize @bullet
-@item
-Insert a blank line between a sectioning command and the first following
-sentence or paragraph, or between the indexing commands associated with
-the sectioning command and the first following sentence or paragraph, as
-shown in the tip on indexing. Otherwise, a formatter may fold title and
-paragraph together.
-
-@item
-Always insert a blank line before an @code{@@table} command and after an
-@code{@@end table} command; but never insert a blank line after an
-@code{@@table} command or before an @code{@@end table} command.
-
-@need 1000
-For example,
-
-@example
-@group
-Types of fox:
-
-@@table @@samp
-@@item Quick
-Jump over lazy dogs.
-@end group
-
-@group
-@@item Brown
-Also jump over lazy dogs.
-@@end table
-
-@end group
-@group
-@@noindent
-On the other hand, @dots{}
-@end group
-@end example
-
-Insert blank lines before and after @code{@@itemize} @dots{} @code{@@end
-itemize} and @code{@@enumerate} @dots{} @code{@@end enumerate} in the
-same way.
-@end itemize
-
-@subsubheading Complete phrases
-
-Complete phrases are easier to read than @dots{}
-
-@itemize @bullet
-@item
-Write entries in an itemized list as complete sentences; or at least, as
-complete phrases. Incomplete expressions @dots{} awkward @dots{} like
-this.
-
-@item
-Write the prefatory sentence or phrase for a multi-item list or table as
-a complete expression. Do not write ``You can set:''; instead, write
-``You can set these variables:''. The former expression sounds cut off.
-@end itemize
-
-@subsubheading Editions, dates and versions
-
-Write the edition and version numbers and date in three places in every
-manual:
-
-@enumerate
-@item
-In the first @code{@@ifinfo} section, for people reading the Texinfo file.
-
-@item
-In the @code{@@titlepage} section, for people reading the printed manual.
-
-@item
-In the `Top' node, for people reading the Info file.
-@end enumerate
-
-@noindent
-Also, it helps to write a note before the first @code{@@ifinfo}
-section to explain what you are doing.
-
-@need 800
-@noindent
-For example:
-
-@example
-@group
-@@c ===> NOTE! <==
-@@c Specify the edition and version numbers and date
-@@c in *three* places:
-@@c 1. First ifinfo section 2. title page 3. top node
-@@c To find the locations, search for !!set
-@end group
-
-@group
-@@ifinfo
-@@c !!set edition, date, version
-This is Edition 4.03, January 1992,
-of the @@cite@{GDB Manual@} for GDB Version 4.3.
-@dots{}
-@end group
-@end example
-
-@noindent
----or use @code{@@set} and @code{@@value}
-(@pxref{value Example, , @code{@@value} Example}).
-
-@subsubheading Definition Commands
-
-Definition commands are @code{@@deffn}, @code{@@defun},
-@code{@@defmac}, and the like, and enable you to write descriptions in
-a uniform format.@refill
-
-@itemize @bullet
-@item
-Write just one definition command for each entity you define with a
-definition command. The automatic indexing feature creates an index
-entry that leads the reader to the definition.
-
-@item
-Use @code{@@table} @dots{} @code{@@end table} in an appendix that
-contains a summary of functions, not @code{@@deffn} or other definition
-commands.
-@end itemize
-
-@subsubheading Capitalization
-
-@itemize @bullet
-@item
-Capitalize @samp{Texinfo}; it is a name. Do not write the @samp{x} or
-@samp{i} in upper case.
-
-@item
-Capitalize @samp{Info}; it is a name.
-
-@item
-Write @TeX{} using the @code{@@TeX@{@}} command. Note the uppercase
-@samp{T} and @samp{X}. This command causes the formatters to
-typeset the name according to the wishes of Donald Knuth, who wrote
-@TeX{}.
-@end itemize
-
-@subsubheading Spaces
-
-Do not use spaces to format a Texinfo file, except inside of
-@code{@@example} @dots{} @code{@@end example} and similar commands.
-
-@need 700
-For example, @TeX{} fills the following:
-
-@example
-@group
- @@kbd@{C-x v@}
- @@kbd@{M-x vc-next-action@}
- Perform the next logical operation
- on the version-controlled file
- corresponding to the current buffer.
-@end group
-@end example
-
-@need 950
-@noindent
-so it looks like this:
-
-@iftex
-@quotation
- @kbd{C-x v}
- @kbd{M-x vc-next-action}
- Perform the next logical operation on the version-controlled file
- corresponding to the current buffer.
-@end quotation
-@end iftex
-@ifinfo
-@quotation
-`C-x v' `M-x vc-next-action' Perform the next logical operation on the
-version-controlled file corresponding to the current buffer.
-@end quotation
-@end ifinfo
-
-@noindent
-In this case, the text should be formatted with
-@code{@@table}, @code{@@item}, and @code{@@itemx}, to create a table.
-
-@subsubheading @@code, @@samp, @@var, and @samp{---}
-
-@itemize @bullet
-@item
-Use @code{@@code} around Lisp symbols, including command names.
-For example,
-
-@example
-The main function is @@code@{vc-next-action@}, @dots{}
-@end example
-
-@item
-Avoid putting letters such as @samp{s} immediately after an
-@samp{@@code}. Such letters look bad.
-
-@item
-Use @code{@@var} around meta-variables. Do not write angle brackets
-around them.
-
-@item
-Use three hyphens in a row, @samp{---}, to indicate a long dash. @TeX{}
-typesets these as a long dash and the Info formatters reduce three
-hyphens to two.
-@end itemize
-
-@subsubheading Periods Outside of Quotes
-
-Place periods and other punctuation marks @emph{outside} of quotations,
-unless the punctuation is part of the quotation. This practice goes against
-convention, but enables the reader to distinguish between the contents
-of the quotation and the whole passage.
-
-For example, you should write the following sentence with the period
-outside the end quotation marks:
-
-@example
-Evidently, @samp{au} is an abbreviation for ``author''.
-@end example
-
-@noindent
-since @samp{au} does @emph{not} serve as an abbreviation for
-@samp{author.} (with a period following the word).
-
-@subsubheading Introducing New Terms
-
-@itemize @bullet
-@item
-Introduce new terms so that a user who does not know them can understand
-them from context; or write a definition for the term.
-
-For example, in the following, the terms ``check in'', ``register'' and
-``delta'' are all appearing for the first time; the example sentence should be
-rewritten so they are understandable.
-
-@quotation
-The major function assists you in checking in a file to your
-version control system and registering successive sets of changes to
-it as deltas.
-@end quotation
-
-@item
-Use the @code{@@dfn} command around a word being introduced, to indicate
-that the user should not expect to know the meaning already, and should
-expect to learn the meaning from this passage.
-@end itemize
-
-@subsubheading @@pxref
-
-@c !!! maybe include this in the tips on pxref
-@ignore
-By the way, it is okay to use pxref with something else in front of
-it within the parens, as long as the pxref is followed by the close
-paren, and the material inside the parents is not part of a larger
-sentence. Also, you can use xref inside parens as part of a complete
-sentence so long as you terminate the cross reference with punctuation.
-@end ignore
-Absolutely never use @code{@@pxref} except in the special context for
-which it is designed: inside parentheses, with the closing parenthesis
-following immediately after the closing brace. One formatter
-automatically inserts closing punctuation and the other does not. This
-means that the output looks right both in printed output and in an Info
-file, but only when the command is used inside parentheses.
-
-@subsubheading Invoking from a Shell
-
-You can invoke programs such as Emacs, GCC, and GAWK from a shell.
-The documentation for each program should contain a section that
-describes this. Unfortunately, if the node names and titles for these
-sections are all different, readers find it hard to search for the
-section.@refill
-
-Name such sections with a phrase beginning with the word
-@w{`Invoking @dots{}'}, as in `Invoking Emacs'; this way
-users can find the section easily.
-
-@subsubheading @sc{ansi c} Syntax
-
-When you use @code{@@example} to describe a C function's calling
-conventions, use the @sc{ansi c} syntax, like this:@refill
-
-@example
-void dld_init (char *@@var@{path@});
-@end example
-
-@noindent
-And in the subsequent discussion, refer to the argument values by
-writing the same argument names, again highlighted with
-@code{@@var}.@refill
-
-@need 800
-Avoid the obsolete style that looks like this:@refill
-
-@example
-#include <dld.h>
-
-dld_init (path)
-char *path;
-@end example
-
-Also, it is best to avoid writing @code{#include} above the
-declaration just to indicate that the function is declared in a
-header file. The practice may give the misimpression that the
-@code{#include} belongs near the declaration of the function. Either
-state explicitly which header file holds the declaration or, better
-yet, name the header file used for a group of functions at the
-beginning of the section that describes the functions.@refill
-
-@subsubheading Bad Examples
-
-Here are several examples of bad writing to avoid:
-
-In this example, say, `` @dots{} you must @code{@@dfn}@{check
-in@} the new version.'' That flows better.
-
-@quotation
-When you are done editing the file, you must perform a
-@code{@@dfn}@{check in@}.
-@end quotation
-
-In the following example, say, ``@dots{} makes a unified interface such as VC
-mode possible.''
-
-@quotation
-SCCS, RCS and other version-control systems all perform similar
-functions in broadly similar ways (it is this resemblance which makes
-a unified control mode like this possible).
-@end quotation
-
-And in this example, you should specify what `it' refers to:
-
-@quotation
-If you are working with other people, it assists in coordinating
-everyone's changes so they do not step on each other.
-@end quotation
-
-@subsubheading And Finally @dots{}
-
-@itemize @bullet
-@item
-Pronounce @TeX{} as if the @samp{X} were a Greek `chi', as the last
-sound in the name `Bach'. But pronounce Texinfo as in `speck':
-@samp{teckinfo}.
-
-@item
-Write notes for yourself at the very end of a Texinfo file after the
-@code{@@bye}. None of the formatters process text after the
-@code{@@bye}; it is as if the text were within @code{@@ignore} @dots{}
-@code{@@end ignore}.
-@end itemize
-
-@node Sample Texinfo File, Sample Permissions, Tips, Top
-@comment node-name, next, previous, up
-@appendix A Sample Texinfo File
-@cindex Sample Texinfo file, no comments
-
-Here is a complete, short sample Texinfo file, without any commentary.
-You can see this file, with comments, in the first chapter.
-@xref{Short Sample, , A Short Sample Texinfo File}.
-
-@sp 1
-@example
-\input texinfo @@c -*-texinfo-*-
-@@c %**start of header
-@@setfilename sample.info
-@@settitle Sample Document
-@@c %**end of header
-
-@@setchapternewpage odd
-
-@@ifinfo
-This is a short example of a complete Texinfo file.
-
-Copyright 1990 Free Software Foundation, Inc.
-@@end ifinfo
-
-@@titlepage
-@@sp 10
-@@comment The title is printed in a large font.
-@@center @@titlefont@{Sample Title@}
-
-@@c The following two commands start the copyright page.
-@@page
-@@vskip 0pt plus 1filll
-Copyright @@copyright@{@} 1990 Free Software Foundation, Inc.
-@@end titlepage
-
-@@node Top, First Chapter, (dir), (dir)
-@@comment node-name, next, previous, up
-
-@@menu
-* First Chapter:: The first chapter is the
- only chapter in this sample.
-* Concept Index:: This index has two entries.
-@@end menu
-
-@@node First Chapter, Concept Index, Top, Top
-@@comment node-name, next, previous, up
-@@chapter First Chapter
-@@cindex Sample index entry
-
-This is the contents of the first chapter.
-@@cindex Another sample index entry
-
-Here is a numbered list.
-
-@@enumerate
-@@item
-This is the first item.
-
-@@item
-This is the second item.
-@@end enumerate
-
-The @@code@{makeinfo@} and @@code@{texinfo-format-buffer@}
-commands transform a Texinfo file such as this into
-an Info file; and @@TeX@{@} typesets it for a printed
-manual.
-
-@@node Concept Index, , First Chapter, Top
-@@comment node-name, next, previous, up
-@@unnumbered Concept Index
-
-@@printindex cp
-
-@@contents
-@@bye
-@end example
-
-@node Sample Permissions, Include Files, Sample Texinfo File, Top
-@appendix Sample Permissions
-@cindex Permissions
-@cindex Copying permissions
-
-Texinfo files should contain sections that tell the readers that they
-have the right to copy and distribute the Texinfo file, the Info file,
-and the printed manual.@refill
-
-Also, if you are writing a manual about software, you should explain
-that the software is free and either include the GNU General Public
-License (GPL) or provide a reference to it. @xref{Distrib, ,
-Distribution, emacs, The GNU Emacs Manual}, for an example of the text
-that could be used in the software ``Distribution'', ``General Public
-License'', and ``NO WARRANTY'' sections of a document. @xref{Copying,
-, Texinfo Copying Conditions}, for an example of a brief explanation
-of how the copying conditions provide you with rights. @refill
-
-@menu
-* Inserting Permissions:: How to put permissions in your document.
-* ifinfo Permissions:: Sample @samp{ifinfo} copying permissions.
-* Titlepage Permissions:: Sample Titlepage copying permissions.
-@end menu
-
-@node Inserting Permissions, ifinfo Permissions, , Sample Permissions
-@ifinfo
-@appendixsec Inserting Permissions
-@end ifinfo
-
-In a Texinfo file, the first @code{@@ifinfo} section usually begins
-with a line that says what the file documents. This is what a person
-reading the unprocessed Texinfo file or using the advanced Info
-command @kbd{g *} sees first. @inforef{Expert, Advanced Info
-commands, info}, for more information. (A reader using the regular
-Info commands usually starts reading at the first node and skips
-this first section, which is not in a node.)@refill
-
-In the @code{@@ifinfo} section, the summary sentence is followed by a
-copyright notice and then by the copying permission notice. One of
-the copying permission paragraphs is enclosed in @code{@@ignore} and
-@code{@@end ignore} commands. This paragraph states that the Texinfo
-file can be processed through @TeX{} and printed, provided the printed
-manual carries the proper copying permission notice. This paragraph
-is not made part of the Info file since it is not relevant to the Info
-file; but it is a mandatory part of the Texinfo file since it permits
-people to process the Texinfo file in @TeX{} and print the
-results.@refill
-
-In the printed manual, the Free Software Foundation copying permission
-notice follows the copyright notice and publishing information and is
-located within the region delineated by the @code{@@titlepage} and
-@code{@@end titlepage} commands. The copying permission notice is exactly
-the same as the notice in the @code{@@ifinfo} section except that the
-paragraph enclosed in @code{@@ignore} and @code{@@end ignore} commands is
-not part of the notice.@refill
-
-To make it simple to insert a permission notice into each section of
-the Texinfo file, sample permission notices for each section are
-reproduced in full below.@refill
-
-Note that you may need to specify the correct name of a section
-mentioned in the permission notice. For example, in @cite{The GDB
-Manual}, the name of the section referring to the General Public
-License is called the ``GDB General Public License'', but in the
-sample shown below, that section is referred to generically as the
-``GNU General Public License''. If the Texinfo file does not carry a
-copy of the General Public License, leave out the reference to it, but
-be sure to include the rest of the sentence.@refill
-
-@node ifinfo Permissions, Titlepage Permissions, Inserting Permissions, Sample Permissions
-@comment node-name, next, previous, up
-@appendixsec @samp{ifinfo} Copying Permissions
-@cindex @samp{ifinfo} permissions
-
-In the @code{@@ifinfo} section of a Texinfo file, the standard Free
-Software Foundation permission notice reads as follows:@refill
-
-@example
-This file documents @dots{}
-
-Copyright 1992 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.
-
-@@ignore
-Permission is granted to process this file through TeX
-and print the results, provided the printed document
-carries a 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 also that the sections
-entitled ``Copying'' and ``GNU General Public License''
-are included exactly as in the original, 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,
-except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-@end example
-
-@node Titlepage Permissions, , ifinfo Permissions, Sample Permissions
-@comment node-name, next, previous, up
-@appendixsec Titlepage Copying Permissions
-@cindex Titlepage permissions
-
-In the @code{@@titlepage} section of a Texinfo file, the standard Free
-Software Foundation copying permission notice follows the copyright
-notice and publishing information. The standard phrasing is as
-follows:@refill
-
-@example
-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 sections
-entitled ``Copying'' and ``GNU General Public License''
-are included exactly as in the original, 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,
-except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-@end example
-
-@node Include Files, Headings, Sample Permissions, Top
-@comment node-name, next, previous, up
-@appendix Include Files
-@cindex Include files
-
-When @TeX{} or an Info formatting command sees an @code{@@include}
-command in a Texinfo file, it processes the contents of the file named
-by the command and incorporates them into the @sc{dvi} or Info file being
-created. Index entries from the included file are incorporated into
-the indices of the output file.@refill
-
-Include files let you keep a single large document as a collection of
-conveniently small parts.@refill
-
-@menu
-* Using Include Files:: How to use the @code{@@include} command.
-* texinfo-multiple-files-update:: How to create and update nodes and
- menus when using included files.
-* Include File Requirements:: What @code{texinfo-multiple-files-update} expects.
-* Sample Include File:: A sample outer file with included files
- within it; and a sample included file.
-* Include Files Evolution:: How use of the @code{@@include} command
- has changed over time.
-@end menu
-
-@node Using Include Files, texinfo-multiple-files-update, , Include Files
-@appendixsec How to Use Include Files
-@findex include
-
-To include another file within a Texinfo file, write the
-@code{@@include} command at the beginning of a line and follow it on
-the same line by the name of a file to be included. For
-example:@refill
-
-@example
-@@include buffers.texi
-@end example
-
-An included file should simply be a segment of text that you expect to
-be included as is into the overall or @dfn{outer} Texinfo file; it
-should not contain the standard beginning and end parts of a Texinfo
-file. In particular, you should not start an included file with a
-line saying @samp{\input texinfo}; if you do, that phrase is inserted
-into the output file as is. Likewise, you should not end an included
-file with an @code{@@bye} command; nothing after @code{@@bye} is
-formatted.@refill
-
-In the past, you were required to write an @code{@@setfilename} line at the
-beginning of an included file, but no longer. Now, it does not matter
-whether you write such a line. If an @code{@@setfilename} line exists
-in an included file, it is ignored.@refill
-
-Conventionally, an included file begins with an @code{@@node} line that
-is followed by an @code{@@chapter} line. Each included file is one
-chapter. This makes it easy to use the regular node and menu creating
-and updating commands to create the node pointers and menus within the
-included file. However, the simple Emacs node and menu creating and
-updating commands do not work with multiple Texinfo files. Thus you
-cannot use these commands to fill in the `Next', `Previous', and `Up'
-pointers of the @code{@@node} line that begins the included file. Also,
-you cannot use the regular commands to create a master menu for the
-whole file. Either you must insert the menus and the `Next',
-`Previous', and `Up' pointers by hand, or you must use the GNU Emacs
-Texinfo mode command, @code{texinfo-multiple-files-update}, that is
-designed for @code{@@include} files.@refill
-
-@node texinfo-multiple-files-update, Include File Requirements, Using Include Files, Include Files
-@appendixsec @code{texinfo-multiple-files-update}
-@findex texinfo-multiple-files-update
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-GNU Emacs Texinfo mode provides a command to handle included files
-called @code{texinfo-multiple-files-update}. This command creates or
-updates `Next', `Previous', and `Up' pointers of included files as
-well as those in the outer or overall Texinfo file, and it creates or
-updates a main menu in the outer file. Depending whether you call it
-with optional arguments, the command updates only the pointers in the
-first @code{@@node} line of the included files or all of them:@refill
-
-@table @kbd
-@item M-x texinfo-multiple-files-update
-Called without any arguments:@refill
-
-@itemize @minus
-@item
-Create or update the `Next', `Previous', and `Up' pointers of the
-first @code{@@node} line in each file included in an outer or overall
-Texinfo file.@refill
-
-@item
-Create or update the `Top' level node pointers of the outer or
-overall file.@refill
-
-@item
-Create or update a main menu in the outer file.@refill
-@end itemize
-
-@item C-u M-x texinfo-multiple-files-update
-Called with @kbd{C-u} as a prefix argument:
-
-@itemize @minus{}
-@item
-Create or update pointers in the first @code{@@node} line in each
-included file.
-
-@item
-Create or update the `Top' level node pointers of the outer file.
-
-@item
-Create and insert a master menu in the outer file. The master menu
-is made from all the menus in all the included files.@refill
-@end itemize
-
-@item C-u 8 M-x texinfo-multiple-files-update
-Called with a numeric prefix argument, such as @kbd{C-u 8}:
-
-@itemize @minus
-@item
-Create or update @strong{all} the `Next', `Previous', and `Up' pointers
-of all the included files.@refill
-
-@item
-Create or update @strong{all} the menus of all the included
-files.@refill
-
-@item
-Create or update the `Top' level node pointers of the outer or
-overall file.@refill
-
-@item
-And then create a master menu in the outer file. This is similar to
-invoking @code{texinfo-master-menu} with an argument when you are
-working with just one file.@refill
-@end itemize
-@end table
-
-Note the use of the prefix argument in interactive use: with a regular
-prefix argument, just @w{@kbd{C-u}}, the
-@code{texinfo-multiple-files-update} command inserts a master menu;
-with a numeric prefix argument, such as @kbd{C-u 8}, the command
-updates @strong{every} pointer and menu in @strong{all} the files and then inserts a
-master menu.@refill
-
-@node Include File Requirements, Sample Include File, texinfo-multiple-files-update, Include Files
-@appendixsec Include File Requirements
-@cindex Include file requirements
-@cindex Requirements for include files
-
-If you plan to use the @code{texinfo-multiple-files-update} command,
-the outer Texinfo file that lists included files within it should
-contain nothing but the beginning and end parts of a Texinfo file, and
-a number of @code{@@include} commands listing the included files. It
-should not even include indices, which should be listed in an included
-file of their own.@refill
-
-Moreover, each of the included files must contain exactly one highest
-level node (conventionally, @code{@@chapter} or equivalent),
-and this node must be the first node in the included file.
-Furthermore, each of these highest level nodes in each included file
-must be at the same hierarchical level in the file structure.
-Usually, each is an @code{@@chapter}, an @code{@@appendix}, or an
-@code{@@unnumbered} node. Thus, normally, each included file contains
-one, and only one, chapter or equivalent-level node.@refill
-
-The outer file should contain only @emph{one} node, the `Top' node. It
-should @emph{not} contain any nodes besides the single `Top' node. The
-@code{texinfo-multiple-files-update} command will not process
-them.@refill
-
-@node Sample Include File, Include Files Evolution, Include File Requirements, Include Files
-@appendixsec Sample File with @code{@@include}
-@cindex Sample @code{@@include} file
-@cindex Include file sample
-@cindex @code{@@include} file sample
-
-Here is an example of a complete outer Texinfo file with @code{@@include} files
-within it before running @code{texinfo-multiple-files-update}, which
-would insert a main or master menu:@refill
-
-@example
-@group
-\input texinfo @@c -*-texinfo-*-
-@c %**start of header
-@@setfilename include-example.info
-@@settitle Include Example
-@c %**end of header
-@end group
-
-@group
-@@setchapternewpage odd
-@@titlepage
-@@sp 12
-@@center @@titlefont@{Include Example@}
-@@sp 2
-@@center by Whom Ever
-@end group
-
-@group
-@@page
-@@vskip 0pt plus 1filll
-Copyright @@copyright@{@} 1990 Free Software Foundation, Inc.
-@@end titlepage
-@end group
-
-@group
-@@ifinfo
-@@node Top, First, (dir), (dir)
-@@top Master Menu
-@@end ifinfo
-@end group
-
-@group
-@@include foo.texinfo
-@@include bar.texinfo
-@@include concept-index.texinfo
-@end group
-
-@group
-@@summarycontents
-@@contents
-
-@@bye
-@end group
-@end example
-
-An included file, such as @file{foo.texinfo}, might look like
-this:@refill
-
-@example
-@group
-@@node First, Second, , Top
-@@chapter First Chapter
-
-Contents of first chapter @dots{}
-@end group
-@end example
-
-The full contents of @file{concept-index.texinfo} might be as simple as this:
-
-@example
-@group
-@@node Concept Index, , Second, Top
-@@unnumbered Concept Index
-
-@@printindex cp
-@end group
-@end example
-
-The outer Texinfo source file for @cite{The GNU Emacs Lisp Reference
-Manual} is named @file{elisp.texi}. This outer file contains a master
-menu with 417 entries and a list of 41 @code{@@include}
-files.@refill
-
-@node Include Files Evolution, , Sample Include File, Include Files
-@comment node-name, next, previous, up
-@appendixsec Evolution of Include Files
-
-When Info was first created, it was customary to create many small
-Info files on one subject. Each Info file was formatted from its own
-Texinfo source file. This custom meant that Emacs did not need to
-make a large buffer to hold the whole of a large Info file when
-someone wanted information; instead, Emacs allocated just enough
-memory for the small Info file that contained the particular
-information sought. This way, Emacs could avoid wasting memory.@refill
-
-References from one file to another were made by referring to the file
-name as well as the node name. (@xref{Other Info Files, , Referring to
-Other Info Files}. Also, see @ref{Four and Five Arguments, ,
-@code{@@xref} with Four and Five Arguments}.)@refill
-
-Include files were designed primarily as a way to create a single,
-large printed manual out of several smaller Info files. In a printed
-manual, all the references were within the same document, so @TeX{}
-could automatically determine the references' page numbers. The Info
-formatting commands used include files only for creating joint
-indices; each of the individual Texinfo files had to be formatted for
-Info individually. (Each, therefore, required its own
-@code{@@setfilename} line.)@refill
-
-However, because large Info files are now split automatically, it is
-no longer necessary to keep them small.@refill
-
-Nowadays, multiple Texinfo files are used mostly for large documents,
-such as @cite{The GNU Emacs Lisp Reference Manual}, and for projects
-in which several different people write different sections of a
-document simultaneously.@refill
-
-In addition, the Info formatting commands have been extended to work
-with the @code{@@include} command so as to create a single large Info
-file that is split into smaller files if necessary. This means that
-you can write menus and cross references without naming the different
-Texinfo files.@refill
-
-@node Headings, Catching Mistakes, Include Files, Top
-@comment node-name, next, previous, up
-@appendix Page Headings
-@cindex Headings
-@cindex Footings
-@cindex Page numbering
-@cindex Page headings
-@cindex Formatting headings and footings
-
-Most printed manuals contain headings along the top of every page
-except the title and copyright pages. Some manuals also contain
-footings. (Headings and footings have no meaning to Info, which is
-not paginated.)@refill
-
-@menu
-* Headings Introduced:: Conventions for using page headings.
-* Heading Format:: Standard page heading formats.
-* Heading Choice:: How to specify the type of page heading.
-* Custom Headings:: How to create your own headings and footings.
-@end menu
-
-@node Headings Introduced, Heading Format, , Headings
-@ifinfo
-@heading Headings Introduced
-@end ifinfo
-
-Texinfo provides standard page heading formats for manuals that are printed
-on one side of each sheet of paper and for manuals that are printed on
-both sides of the paper. Usually, you will use one or other of these
-formats, but you can specify your own format, if you wish.@refill
-
-In addition, you can specify whether chapters should begin on a new
-page, or merely continue the same page as the previous chapter; and if
-chapters begin on new pages, you can specify whether they must be
-odd-numbered pages.@refill
-
-By convention, a book is printed on both sides of each sheet of paper.
-When you open a book, the right-hand page is odd-numbered, and
-chapters begin on right-hand pages---a preceding left-hand page is
-left blank if necessary. Reports, however, are often printed on just
-one side of paper, and chapters begin on a fresh page immediately
-following the end of the preceding chapter. In short or informal
-reports, chapters often do not begin on a new page at all, but are
-separated from the preceding text by a small amount of whitespace.@refill
-
-The @code{@@setchapternewpage} command controls whether chapters begin
-on new pages, and whether one of the standard heading formats is used.
-In addition, Texinfo has several heading and footing commands that you
-can use to generate your own heading and footing formats.@refill
-
-In Texinfo, headings and footings are single lines at the tops and
-bottoms of pages; you cannot create multiline headings or footings.
-Each header or footer line is divided into three parts: a left part, a
-middle part, and a right part. Any part, or a whole line, may be left
-blank. Text for the left part of a header or footer line is set
-flushleft; text for the middle part is centered; and, text for the
-right part is set flushright.@refill
-
-@node Heading Format, Heading Choice, Headings Introduced, Headings
-@comment node-name, next, previous, up
-@appendixsec Standard Heading Formats
-
-Texinfo provides two standard heading formats, one for manuals printed
-on one side of each sheet of paper, and the other for manuals printed
-on both sides of the paper.
-
-By default, nothing is specified for the footing of a Texinfo file,
-so the footing remains blank.@refill
-
-The standard format for single-sided printing consists of a header
-line in which the left-hand part contains the name of the chapter, the
-central part is blank, and the right-hand part contains the page
-number.@refill
-
-@need 950
-A single-sided page looks like this:
-
-@example
-@group
- _______________________
- | |
- | chapter page number |
- | |
- | Start of text ... |
- | ... |
- | |
-
-@end group
-@end example
-
-The standard format for two-sided printing depends on whether the page
-number is even or odd. By convention, even-numbered pages are on the
-left- and odd-numbered pages are on the right. (@TeX{} will adjust the
-widths of the left- and right-hand margins. Usually, widths are
-correct, but during double-sided printing, it is wise to check that
-pages will bind properly---sometimes a printer will produce output in
-which the even-numbered pages have a larger right-hand margin than the
-odd-numbered pages.)@refill
-
-In the standard double-sided format, the left part of the left-hand
-(even-numbered) page contains the page number, the central part is
-blank, and the right part contains the title (specified by the
-@code{@@settitle} command). The left part of the right-hand
-(odd-numbered) page contains the name of the chapter, the central part
-is blank, and the right part contains the page number.@refill
-
-@need 750
-Two pages, side by side as in an open book, look like this:@refill
-
-@example
-@group
- _______________________ _______________________
- | | | |
- | page number title | | chapter page number |
- | | | |
- | Start of text ... | | More text ... |
- | ... | | ... |
- | | | |
-
-@end group
-@end example
-
-@noindent
-The chapter name is preceded by the word @samp{Chapter}, the chapter
-number and a colon. This makes it easier to keep track of where you
-are in the manual.@refill
-
-@node Heading Choice, Custom Headings, Heading Format, Headings
-@comment node-name, next, previous, up
-@appendixsec Specifying the Type of Heading
-
-@TeX{} does not begin to generate page headings for a standard Texinfo
-file until it reaches the @code{@@end titlepage} command. Thus, the
-title and copyright pages are not numbered. The @code{@@end
-titlepage} command causes @TeX{} to begin to generate page headings
-according to a standard format specified by the
-@code{@@setchapternewpage} command that precedes the
-@code{@@titlepage} section.@refill
-
-@need 1000
-There are four possibilities:@refill
-
-@table @asis
-@item No @code{@@setchapternewpage} command
-Cause @TeX{} to specify the single-sided heading format, with chapters
-on new pages. This is the same as @code{@@setchapternewpage on}.@refill
-
-@item @code{@@setchapternewpage on}
-Specify the single-sided heading format, with chapters on new pages.@refill
-
-@item @code{@@setchapternewpage off}
-Cause @TeX{} to start a new chapter on the same page as the last page of
-the preceding chapter, after skipping some vertical whitespace. Also
-cause @TeX{} to typeset for single-sided printing. (You can override
-the headers format with the @code{@@headings double} command; see
-@ref{headings on off, , The @code{@@headings} Command}.)@refill
-
-@item @code{@@setchapternewpage odd}
-Specify the double-sided heading format, with chapters on new pages.@refill
-@end table
-
-@noindent
-Texinfo lacks an @code{@@setchapternewpage even} command.@refill
-
-@node Custom Headings, , Heading Choice, Headings
-@comment node-name, next, previous, up
-@appendixsec How to Make Your Own Headings
-
-You can use the standard headings provided with Texinfo or specify
-your own.@refill
-
-@c Following paragraph is verbose to prevent overfull hboxes.
-Texinfo provides six commands for specifying headings and
-footings. The @code{@@everyheading} command and
-@code{@@everyfooting} command generate page headers and footers
-that are the same for both even- and odd-numbered pages.
-The @code{@@evenheading} command and @code{@@evenfooting}
-command generate headers and footers for even-numbered
-(left-hand) pages; and the @code{@@oddheading} command and
-@code{@@oddfooting} command generate headers and footers for
-odd-numbered (right-hand) pages.@refill
-
-Write custom heading specifications in the Texinfo file immediately
-after the @code{@@end titlepage} command. Enclose your specifications
-between @code{@@iftex} and @code{@@end iftex} commands since the
-@code{texinfo-format-buffer} command may not recognize them. Also,
-you must cancel the predefined heading commands with the
-@code{@@headings off} command before defining your own
-specifications.@refill
-
-@need 1000
-Here is how to tell @TeX{} to place the chapter name at the left, the
-page number in the center, and the date at the right of every header
-for both even- and odd-numbered pages:@refill
-
-@example
-@group
-@@iftex
-@@headings off
-@@everyheading @@thischapter @@| @@thispage @@| @@today@{@}
-@@end iftex
-@end group
-@end example
-
-@noindent
-You need to divide the left part from the central part and the central
-part from the right had part by inserting @samp{@@|} between parts.
-Otherwise, the specification command will not be able to tell where
-the text for one part ends and the next part begins.@refill
-
-Each part can contain text or @@-commands. The text
-is printed as if the part were within an ordinary paragraph in the
-body of the page. The @@-commands replace
-themselves with the page number, date, chapter name, or
-whatever.@refill
-
-@need 950
-Here are the six heading and footing commands:@refill
-
-@findex everyheading
-@findex everyfooting
-@table @code
-@item @@everyheading @var{left} @@| @var{center} @@| @var{right}
-@itemx @@everyfooting @var{left} @@| @var{center} @@| @var{right}
-
-The `every' commands specify the format for both even- and odd-numbered
-pages. These commands are for documents that are printed on one side
-of each sheet of paper, or for documents in which you want symmetrical
-headers or footers.@refill
-
-@findex evenheading
-@findex evenfooting
-@findex oddheading
-@findex oddfooting
-@item @@evenheading @var{left} @@| @var{center} @@| @var{right}
-@itemx @@oddheading @var{left} @@| @var{center} @@| @var{right}
-
-@itemx @@evenfooting @var{left} @@| @var{center} @@| @var{right}
-@itemx @@oddfooting @var{left} @@| @var{center} @@| @var{right}
-
-The `even' and `odd' commands specify the format for even-numbered
-pages and odd-numbered pages. These commands are for books and
-manuals that are printed on both sides of each sheet of paper.@refill
-@end table
-
-Use the @samp{@@this@dots{}} series of @@-commands to
-provide the names of chapters
-and sections and the page number. You can use the
-@samp{@@this@dots{}} commands in the left, center, or right portions
-of headers and footers, or anywhere else in a Texinfo file so long as
-they are between @code{@@iftex} and @code{@@end iftex} commands.@refill
-
-@need 1000
-Here are the @samp{@@this@dots{}} commands:@refill
-
-@table @code
-@findex thispage
-@item @@thispage
-Expands to the current page number.@refill
-@c !!! Karl Berry says that `thissection' fails on page breaks.
-@ignore
-@item @@thissection
-Expands to the name of the current section.@refill
-@end ignore
-
-@findex thischaptername
-@item @@thischaptername
-Expands to the name of the current chapter.@refill
-
-@findex thischapter
-@item @@thischapter
-Expands to the number and name of the current
-chapter, in the format `Chapter 1: Title'.@refill
-
-@findex thistitle
-@item @@thistitle
-Expands to the name of the document, as specified by the
-@code{@@settitle} command.@refill
-
-@findex thisfile
-@item @@thisfile
-For @code{@@include} files only: expands to the name of the current
-@code{@@include} file. If the current Texinfo source file is not an
-@code{@@include} file, this command has no effect. This command does
-@emph{not} provide the name of the current Texinfo source file unless
-it is an @code{@@include} file. (@xref{Include Files}, for more
-information about @code{@@include} files.)@refill
-@end table
-
-@noindent
-You can also use the @code{@@today@{@}} command, which expands to the
-current date, in `1 Jan 1900' format.@refill
-@findex today
-
-Other @@-commands and text are printed in a header or footer just as
-if they were in the body of a page. It is useful to incorporate text,
-particularly when you are writing drafts:@refill
-
-@example
-@group
-@@iftex
-@@headings off
-@@everyheading @@emph@{Draft!@} @@| @@thispage @@| @@thischapter
-@@everyfooting @@| @@| Version: 0.27: @@today@{@}
-@@end iftex
-@end group
-@end example
-
-Beware of overlong titles: they may overlap another part of the
-header or footer and blot it out.@refill
-
-@node Catching Mistakes, Refilling Paragraphs, Headings, Top
-@comment node-name, next, previous, up
-@appendix Formatting Mistakes
-@cindex Structure, catching mistakes in
-@cindex Nodes, catching mistakes
-@cindex Catching mistakes
-@cindex Correcting mistakes
-@cindex Mistakes, catching
-@cindex Problems, catching
-@cindex Debugging the Texinfo structure
-
-Besides mistakes in the content of your documentation, there
-are two kinds of mistake you can make with Texinfo: you can make mistakes
-with @@-commands, and you can make mistakes with the structure of the
-nodes and chapters.@refill
-
-Emacs has two tools for catching the @@-command mistakes and two for
-catching structuring mistakes.@refill
-
-For finding problems with @@-commands, you can run @TeX{} or a region
-formatting command on the region that has a problem; indeed, you can
-run these commands on each region as you write it.@refill
-
-For finding problems with the structure of nodes and chapters, you can use
-@kbd{C-c C-s} (@code{texinfo-show-structure}) and the related @code{occur}
-command and you can use the @kbd{M-x Info-validate} command.@refill
-
-@menu
-* makeinfo preferred:: @code{makeinfo} finds errors.
-* Debugging with Info:: How to catch errors with Info formatting.
-* Debugging with TeX:: How to catch errors with @TeX{} formatting.
-* Using texinfo-show-structure:: How to use @code{texinfo-show-structure}.
-* Using occur:: How to list all lines containing a pattern.
-* Running Info-Validate:: How to find badly referenced nodes.
-@end menu
-
-@node makeinfo preferred, Debugging with Info, , Catching Mistakes
-@ifinfo
-@heading @code{makeinfo} Find Errors
-@end ifinfo
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-The @code{makeinfo} program does an excellent job of catching errors
-and reporting them---far better than either the
-@code{texinfo-format-region} or the @code{texinfo-format-buffer}
-command. In addition, the various functions for automatically
-creating and updating node pointers and menus remove many
-opportunities for human error.@refill
-
-If you can, use the updating commands to create and insert pointers
-and menus. These prevent many errors. Then use @code{makeinfo} (or
-its Texinfo mode manifestations, @code{makeinfo-region} and
-@code{makeinfo-buffer}) to format your file and check for other
-errors. This is the best way to work with Texinfo. But if you
-cannot use @code{makeinfo}, or your problem is very puzzling, then you
-may want to use the tools described in this appendix.@refill
-
-@node Debugging with Info, Debugging with TeX, makeinfo preferred, Catching Mistakes
-@comment node-name, next, previous, up
-@appendixsec Catching Errors with Info Formatting
-@cindex Catching errors with Info formatting
-@cindex Debugging with Info formatting
-
-After you have written part of a Texinfo file, you can use the
-@code{texinfo-format-region} or the @code{makeinfo-region} command to
-see whether the region formats properly.@refill
-
-Most likely, however, you are reading this section because for some
-reason you cannot use the @code{makeinfo-region} command; therefore, the
-rest of this section presumes that you are using
-@code{texinfo-format-region}.@refill
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-If you make a mistake with an @@-command,
-@code{texinfo-format-region} will stop processing at or after the
-error and display an error message. To see where in the buffer the
-error occurred, switch to the @samp{*Info Region*} buffer; the cursor
-will be in a position that is after the location of the error. Also,
-the text will not be formatted after the place where the error
-occurred (or more precisely, where it was detected).@refill
-
-For example, if you accidentally end a menu with the command @code{@@end
-menus} with an `s' on the end, instead of with @code{@@end menu}, you
-will see an error message that says:@refill
-
-@example
-@@end menus is not handled by texinfo
-@end example
-
-@noindent
-The cursor will stop at the point in the buffer where the error
-occurs, or not long after it. The buffer will look like this:@refill
-
-@example
-@group
----------- Buffer: *Info Region* ----------
-* Menu:
-
-* Using texinfo-show-structure:: How to use
- `texinfo-show-structure'
- to catch mistakes.
-* Running Info-Validate:: How to check for
- unreferenced nodes.
-@@end menus
-@point{}
----------- Buffer: *Info Region* ----------
-@end group
-@end example
-
-The @code{texinfo-format-region} command sometimes provides slightly
-odd error messages. For example, the following cross reference fails to format:@refill
-
-@example
-(@@xref@{Catching Mistakes, for more info.)
-@end example
-
-@noindent
-In this case, @code{texinfo-format-region} detects the missing closing
-brace but displays a message that says @samp{Unbalanced parentheses}
-rather than @samp{Unbalanced braces}. This is because the formatting
-command looks for mismatches between braces as if they were
-parentheses.@refill
-
-Sometimes @code{texinfo-format-region} fails to detect mistakes. For
-example, in the following, the closing brace is swapped with the
-closing parenthesis:@refill
-
-@example
-(@@xref@{Catching Mistakes), for more info.@}
-@end example
-
-@noindent
-Formatting produces:
-@example
-(*Note for more info.: Catching Mistakes)
-@end example
-
-The only way for you to detect this error is to realize that the
-reference should have looked like this:@refill
-
-@example
-(*Note Catching Mistakes::, for more info.)
-@end example
-
-Incidentally, if you are reading this node in Info and type @kbd{f
-@key{RET}} (@code{Info-follow-reference}), you will generate an error
-message that says:
-
-@example
-No such node: "Catching Mistakes) The only way @dots{}
-@end example
-
-@noindent
-This is because Info perceives the example of the error as the first
-cross reference in this node and if you type a @key{RET} immediately
-after typing the Info @kbd{f} command, Info will attempt to go to the
-referenced node. If you type @kbd{f catch @key{TAB} @key{RET}}, Info
-will complete the node name of the correctly written example and take
-you to the `Catching Mistakes' node. (If you try this, you can return
-from the `Catching Mistakes' node by typing @kbd{l}
-(@code{Info-last}).)
-
-@c !!! section on using Elisp debugger ignored.
-@ignore
-Sometimes @code{texinfo-format-region} will stop long after the
-original error; this is because it does not discover the problem until
-then. In this case, you will need to backtrack.@refill
-
-@c menu
-@c * Using the Emacs Lisp Debugger:: How to use the Emacs Lisp debugger.
-@c end menu
-
-@c node Using the Emacs Lisp Debugger
-@c appendixsubsec Using the Emacs Lisp Debugger
-@c index Using the Emacs Lisp debugger
-@c index Emacs Lisp debugger
-@c index Debugger, using the Emacs Lisp
-
-If an error is especially elusive, you can turn on the Emacs Lisp
-debugger and look at the backtrace; this tells you where in the
-@code{texinfo-format-region} function the problem occurred. You can
-turn on the debugger with the command:@refill
-
-@example
-M-x set-variable @key{RET} debug-on-error @key{RET} t @key{RET}
-@end example
-
-@noindent
-and turn it off with
-
-@example
-M-x set-variable @key{RET} debug-on-error @key{RET} nil @key{RET}
-@end example
-
-Often, when you are using the debugger, it is easier to follow what is
-going on if you use the Emacs Lisp files that are not byte-compiled.
-The byte-compiled sources send octal numbers to the debugger that may
-look mysterious. To use the uncompiled source files, load
-@file{texinfmt.el} and @file{texinfo.el} with the @kbd{M-x load-file}
-command.@refill
-
-The debugger will not catch an error if @code{texinfo-format-region}
-does not detect one. In the example shown above,
-@code{texinfo-format-region} did not find the error when the whole
-list was formatted, but only when part of the list was formatted.
-When @code{texinfo-format-region} did not find an error, the debugger
-did not find one either. @refill
-
-However, when @code{texinfo-format-region} did report an error, it
-invoked the debugger. This is the backtrace it produced:@refill
-
-@example
----------- Buffer: *Backtrace* ----------
-Signalling: (search-failed "[@},]")
- re-search-forward("[@},]")
- (while ...)
- (let ...)
- texinfo-format-parse-args()
- (let ...)
- texinfo-format-xref()
- funcall(texinfo-format-xref)
- (if ...)
- (let ...)
- (if ...)
- (while ...)
- texinfo-format-scan()
- (save-excursion ...)
- (let ...)
- texinfo-format-region(103370 103631)
-* call-interactively(texinfo-format-region)
----------- Buffer: *Backtrace* ----------
-@end example
-
-The backtrace is read from the bottom up.
-@code{texinfo-format-region} was called interactively; and it, in
-turn, called various functions, including @code{texinfo-format-scan},
-@code{texinfo-format-xref} and @code{texinfo-format-parse-args}.
-Inside the function @code{texinfo-format-parse-args}, the function
-@code{re-search-forward} was called; it was this function that could
-not find the missing right-hand brace.@refill
-
-@xref{Lisp Debug, , Debugging Emacs Lisp, emacs, The GNU Emacs
-Manual}, for more information.@refill
-@end ignore
-
-@node Debugging with TeX, Using texinfo-show-structure, Debugging with Info, Catching Mistakes
-@comment node-name, next, previous, up
-@appendixsec Catching Errors with @TeX{} Formatting
-@cindex Catching errors with @TeX{} formatting
-@cindex Debugging with @TeX{} formatting
-
-You can also catch mistakes when you format a file with @TeX{}.@refill
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-Usually, you do this after you have run
-@code{texinfo-format-buffer} (or, better, @code{makeinfo-buffer}) on
-the same file, because @code{texinfo-format-buffer} sometimes displays
-error messages that make more sense than @TeX{}. (@xref{Debugging
-with Info}, for more information.)@refill
-
-For example, @TeX{} was run on a Texinfo file, part of which is shown
-here:@refill
-
-@example
----------- Buffer: texinfo.texi ----------
-name of the texinfo file as an extension. The
-@@samp@{??@} are `wildcards' that cause the shell to
-substitute all the raw index files. (@@xref@{sorting
-indices, for more information about sorting
-indices.)@@refill
----------- Buffer: texinfo.texi ----------
-@end example
-
-@noindent
-(The cross reference lacks a closing brace.)
-@TeX{} produced the following output, after which it stopped:@refill
-
-@example
----------- Buffer: *texinfo-tex-shell* ----------
-Runaway argument?
-@{sorting indices, for more information about sorting
-indices.) @@refill @@ETC.
-! Paragraph ended before @@xref was complete.
-<to be read again>
- @@par
-l.27
-
-?
----------- Buffer: *texinfo-tex-shell* ----------
-@end example
-
-In this case, @TeX{} produced an accurate and
-understandable error message:
-
-@example
-Paragraph ended before @@xref was complete.
-@end example
-
-@noindent
-@samp{@@par} is an internal @TeX{} command of no relevance to Texinfo.
-@samp{l.27} means that @TeX{} detected the problem on line 27 of the
-Texinfo file. The @samp{?} is the prompt @TeX{} uses in this
-circumstance.@refill
-
-Unfortunately, @TeX{} is not always so helpful, and sometimes you must
-truly be a Sherlock Holmes to discover what went wrong.@refill
-
-In any case, if you run into a problem like this, you can do one of three
-things.@refill
-
-@enumerate
-@item
-You can tell @TeX{} to continue running and ignore just this error by
-typing @key{RET} at the @samp{?} prompt.@refill
-
-@item
-You can tell @TeX{} to continue running and to ignore all errors as best
-it can by typing @kbd{r @key{RET}} at the @samp{?} prompt.@refill
-
-This is often the best thing to do. However, beware: the one error
-may produce a cascade of additional error messages as its consequences
-are felt through the rest of the file. (To stop @TeX{} when it is
-producing such an avalanche of error messages, type @kbd{C-d} (or
-@kbd{C-c C-d}, if you are running a shell inside Emacs Version 18.))@refill
-
-@item
-You can tell @TeX{} to stop this run by typing @kbd{x @key{RET}}
-at the @samp{?} prompt.@refill
-@end enumerate
-
-Please note that if you are running @TeX{} inside Emacs, you need to
-switch to the shell buffer and line at which @TeX{} offers the @samp{?}
-prompt.@refill
-
-Sometimes @TeX{} will format a file without producing error messages even
-though there is a problem. This usually occurs if a command is not ended
-but @TeX{} is able to continue processing anyhow. For example, if you fail
-to end an itemized list with the @code{@@end itemize} command, @TeX{} will
-write a @sc{dvi} file that you can print out. The only error message that
-@TeX{} will give you is the somewhat mysterious comment that@refill
-
-@example
-(@@end occurred inside a group at level 1)
-@end example
-
-@noindent
-However, if you print the @sc{dvi} file, you will find that the text
-of the file that follows the itemized list is entirely indented as if
-it were part of the last item in the itemized list. The error message
-is the way @TeX{} says that it expected to find an @code{@@end}
-command somewhere in the file; but that it could not determine where
-it was needed.@refill
-
-Another source of notoriously hard-to-find errors is a missing
-@code{@@end group} command. If you ever are stumped by
-incomprehensible errors, look for a missing @code{@@end group} command
-first.@refill
-
-If the Texinfo file lacks header lines,
-@TeX{} may stop in the
-beginning of its run and display output that looks like the following.
-The @samp{*} indicates that @TeX{} is waiting for input.@refill
-
-@example
-This is TeX, Version 2.0 for Berkeley UNIX
-(preloaded format=plain-cm 87.10.25)
-(test.texinfo [1])
-*
-@end example
-
-@noindent
-In this case, simply type @kbd{\end @key{RET}} after the asterisk. Then
-write the header lines in the Texinfo file and run the @TeX{} command
-again. (Note the use of the backslash, @samp{\}. @TeX{} uses @samp{\}
-instead of @samp{@@}; and in this circumstance, you are working
-directly with @TeX{}, not with Texinfo.)@refill
-
-@node Using texinfo-show-structure, Using occur, Debugging with TeX, Catching Mistakes
-@comment node-name, next, previous, up
-@appendixsec Using @code{texinfo-show-structure}
-@cindex Showing the structure of a file
-@findex texinfo-show-structure
-
-It is not always easy to keep track of the nodes, chapters, sections, and
-subsections of a Texinfo file. This is especially true if you are revising
-or adding to a Texinfo file that someone else has written.@refill
-
-In GNU Emacs, in Texinfo mode, the @code{texinfo-show-structure}
-command lists all the lines that begin with the @@-commands that
-specify the structure: @code{@@chapter}, @code{@@section},
-@code{@@appendix}, and so on. With an argument (@w{@kbd{C-u}}
-as prefix argument, if interactive),
-the command also shows the @code{@@node} lines. The
-@code{texinfo-show-structure} command is bound to @kbd{C-c C-s} in
-Texinfo mode, by default.@refill
-
-The lines are displayed in a buffer called the @samp{*Occur*} buffer.
-For example, when @code{texinfo-show-structure} was run on an earlier
-version of this appendix, it produced the following:@refill
-
-@smallexample
-Lines matching "^@@\\(chapter \\|sect\\|sub\\|unnum\\|major\\|
-heading \\|appendix\\)" in buffer texinfo.texi.
- 4:@@appendix Formatting Mistakes
- 52:@@appendixsec Catching Errors with Info Formatting
-222:@@appendixsec Catching Errors with @@TeX@{@} Formatting
-338:@@appendixsec Using @@code@{texinfo-show-structure@}
-407:@@appendixsubsec Using @@code@{occur@}
-444:@@appendixsec Finding Badly Referenced Nodes
-513:@@appendixsubsec Running @@code@{Info-validate@}
-573:@@appendixsubsec Splitting a File Manually
-@end smallexample
-
-This says that lines 4, 52, and 222 of @file{texinfo.texi} begin with
-the @code{@@appendix}, @code{@@appendixsec}, and @code{@@appendixsec}
-commands respectively. If you move your cursor into the @samp{*Occur*}
-window, you can position the cursor over one of the lines and use the
-@kbd{C-c C-c} command (@code{occur-mode-goto-occurrence}), to jump to
-the corresponding spot in the Texinfo file. @xref{Other Repeating
-Search, , Using Occur, emacs, The GNU Emacs Manual}, for more
-information about @code{occur-mode-goto-occurrence}.@refill
-
-The first line in the @samp{*Occur*} window describes the @dfn{regular
-expression} specified by @var{texinfo-heading-pattern}. This regular
-expression is the pattern that @code{texinfo-show-structure} looks for.
-@xref{Regexps, , Using Regular Expressions, emacs, The GNU Emacs Manual},
-for more information.@refill
-
-When you invoke the @code{texinfo-show-structure} command, Emacs will
-display the structure of the whole buffer. If you want to see the
-structure of just a part of the buffer, of one chapter, for example,
-use the @kbd{C-x n} (@code{narrow-to-region}) command to mark the
-region. (@xref{Narrowing, , , emacs, The GNU Emacs Manual}.) This is
-how the example used above was generated. (To see the whole buffer
-again, use @kbd{C-x w} (@code{widen}).)@refill
-
-If you call @code{texinfo-show-structure} with a prefix argument by
-typing @w{@kbd{C-u C-c C-s}}, it will list lines beginning with
-@code{@@node} as well as the lines beginning with the @@-sign commands
-for @code{@@chapter}, @code{@@section}, and the like.@refill
-
-You can remind yourself of the structure of a Texinfo file by looking at
-the list in the @samp{*Occur*} window; and if you have mis-named a node
-or left out a section, you can correct the mistake.@refill
-
-@node Using occur, Running Info-Validate, Using texinfo-show-structure, Catching Mistakes
-@comment node-name, next, previous, up
-@appendixsec Using @code{occur}
-@cindex Occurrences, listing with @code{@@occur}
-@findex occur
-
-Sometimes the @code{texinfo-show-structure} command produces too much
-information. Perhaps you want to remind yourself of the overall structure
-of a Texinfo file, and are overwhelmed by the detailed list produced by
-@code{texinfo-show-structure}. In this case, you can use the @code{occur}
-command directly. To do this, type@refill
-
-@example
-@kbd{M-x occur}
-@end example
-
-@noindent
-and then, when prompted, type a @dfn{regexp}, a regular expression for
-the pattern you want to match. (@xref{Regexps, , Regular Expressions,
-emacs, The GNU Emacs Manual}.) The @code{occur} command works from
-the current location of the cursor in the buffer to the end of the
-buffer. If you want to run @code{occur} on the whole buffer, place
-the cursor at the beginning of the buffer.@refill
-
-For example, to see all the lines that contain the word
-@samp{@@chapter} in them, just type @samp{@@chapter}. This will
-produce a list of the chapters. It will also list all the sentences
-with @samp{@@chapter} in the middle of the line.@refill
-
-If you want to see only those lines that start with the word
-@samp{@@chapter}, type @samp{^@@chapter} when prompted by
-@code{occur}. If you want to see all the lines that end with a word
-or phrase, end the last word with a @samp{$}; for example,
-@samp{catching mistakes$}. This can be helpful when you want to see
-all the nodes that are part of the same chapter or section and
-therefore have the same `Up' pointer.@refill
-
-@xref{Other Repeating Search, , Using Occur, emacs , The GNU Emacs Manual},
-for more information.@refill
-
-@node Running Info-Validate, , Using occur, Catching Mistakes
-@comment node-name, next, previous, up
-@appendixsec Finding Badly Referenced Nodes
-@findex Info-validate
-@cindex Nodes, checking for badly referenced
-@cindex Checking for badly referenced nodes
-@cindex Looking for badly referenced nodes
-@cindex Finding badly referenced nodes
-@cindex Badly referenced nodes
-
-You can use the @code{Info-validate} command to check whether any of
-the `Next', `Previous', `Up' or other node pointers fail to point to a
-node. This command checks that every node pointer points to an
-existing node. The @code{Info-validate} command works only on Info
-files, not on Texinfo files.@refill
-
-The @code{makeinfo} program validates pointers automatically, so you
-do not need to use the @code{Info-validate} command if you are using
-@code{makeinfo}. You only may need to use @code{Info-validate} if you
-are unable to run @code{makeinfo} and instead must create an Info file
-using @code{texinfo-format-region} or @code{texinfo-format-buffer}, or
-if you write an Info file from scratch.@refill
-
-@menu
-* Using Info-validate:: How to run @code{Info-validate}.
-* Unsplit:: How to create an unsplit file.
-* Tagifying:: How to tagify a file.
-* Splitting:: How to split a file manually.
-@end menu
-
-@node Using Info-validate, Unsplit, , Running Info-Validate
-@appendixsubsec Running @code{Info-validate}
-@cindex Running @code{Info-validate}
-@cindex Info validating a large file
-@cindex Validating a large file
-
-To use @code{Info-validate}, visit the Info file you wish to check and
-type:@refill
-
-@example
-M-x Info-validate
-@end example
-
-@noindent
-(Note that the @code{Info-validate} command requires an upper case
-`I'. You may also need to create a tag table before running
-@code{Info-validate}. @xref{Tagifying}.)@refill
-
-If your file is valid, you will receive a message that says ``File appears
-valid''. However, if you have a pointer that does not point to a node,
-error messages will be displayed in a buffer called @samp{*problems in
-info file*}.@refill
-
-For example, @code{Info-validate} was run on a test file that contained
-only the first node of this manual. One of the messages said:@refill
-
-@example
-In node "Overview", invalid Next: Texinfo Mode
-@end example
-
-@noindent
-This meant that the node called @samp{Overview} had a `Next' pointer that
-did not point to anything (which was true in this case, since the test file
-had only one node in it).@refill
-
-Now suppose we add a node named @samp{Texinfo Mode} to our test case
-but we do not specify a `Previous' for this node. Then we will get
-the following error message:@refill
-
-@example
-In node "Texinfo Mode", should have Previous: Overview
-@end example
-
-@noindent
-This is because every `Next' pointer should be matched by a
-`Previous' (in the node where the `Next' points) which points back.@refill
-
-@code{Info-validate} also checks that all menu entries and cross references
-point to actual nodes.@refill
-
-Note that @code{Info-validate} requires a tag table and does not work
-with files that have been split. (The @code{texinfo-format-buffer}
-command automatically splits large files.) In order to use
-@code{Info-validate} on a large file, you must run
-@code{texinfo-format-buffer} with an argument so that it does not split
-the Info file; and you must create a tag table for the unsplit
-file.@refill
-
-@node Unsplit, Tagifying, Using Info-validate, Running Info-Validate
-@comment node-name, next, previous, up
-@appendixsubsec Creating an Unsplit File
-@cindex Creating an unsplit file
-@cindex Unsplit file creation
-
-You can run @code{Info-validate} only on a single Info file that has a
-tag table. The command will not work on the indirect subfiles that
-are generated when a master file is split. If you have a large file
-(longer than 70,000 bytes or so), you need to run the
-@code{texinfo-format-buffer} or @code{makeinfo-buffer} command in such
-a way that it does not create indirect subfiles. You will also need
-to create a tag table for the Info file. After you have done this,
-you can run @code{Info-validate} and look for badly referenced
-nodes.@refill
-
-@c !!! broke into two paragraphs to prevent overfull hbox --bob 26 Mar 93
-The first step is to create an unsplit Info file.
-
-To prevent @code{texinfo-format-buffer} from splitting a Texinfo file
-into smaller Info files, give a prefix to the @kbd{M-x
-texinfo-format-buffer} command:@refill
-
-@example
-C-u M-x texinfo-format-buffer
-@end example
-
-@noindent
-or else
-
-@example
-C-u C-c C-e C-b
-@end example
-
-@noindent
-When you do this, Texinfo will not split the file and will not create
-a tag table for it. @refill
-@cindex Making a tag table manually
-@cindex Tag table, making manually
-
-@node Tagifying, Splitting, Unsplit, Running Info-Validate
-@appendixsubsec Tagifying a File
-
-After creating an unsplit Info file, you must create a tag table for
-it. Visit the Info file you wish to tagify and type:@refill
-
-@example
-M-x Info-tagify
-@end example
-
-@noindent
-(Note the upper case @key{I} in @code{Info-tagify}.) This creates an
-Info file with a tag table that you can validate.@refill
-
-The third step is to validate the Info file:@refill
-
-@example
-M-x Info-validate
-@end example
-
-@noindent
-(Note the upper case @key{I} in @code{Info-validate}.)
-In brief, the steps are:@refill
-
-@example
-@group
-C-u M-x texinfo-format-buffer
-M-x Info-tagify
-M-x Info-validate
-@end group
-@end example
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-After you have validated the node structure, you will be able to rerun
-@code{texinfo-format-buffer} in the normal way so it will construct a
-tag table and split the file automatically, or you can make the tag
-table and split the file manually.@refill
-
-@node Splitting, , Tagifying, Running Info-Validate
-@comment node-name, next, previous, up
-@appendixsubsec Splitting a File Manually
-@cindex Splitting an Info file manually
-@cindex Info file, splitting manually
-
-You should split a large file or else let the
-@code{texinfo-format-buffer} or @code{makeinfo-buffer} command do it
-for you automatically. (Generally you will let one of the formatting
-commands do this job for you. @xref{Create an Info File}.)@refill
-
-The split-off files are called the indirect subfiles.@refill
-
-Info files are split to save memory. With smaller files, Emacs does not
-have make such a large buffer to hold the information.@refill
-
-If an Info file has more than 30 nodes, you should also make a tag
-table for it. @xref{Using Info-validate}, for information
-about creating a tag table. (Again, tag tables are usually created
-automatically by the formatting command; you only need to create a tag
-table yourself if you are doing the job manually. Most likely, you
-will do this for a large, unsplit file on which you have run
-@code{Info-validate}.)@refill
-
-@c Info-split is autoloaded in `loaddefs.el' in Emacs 18.51
-@ignore
-Before running @code{Info-split}, you need to load the @code{info} library
-into Emacs by giving the command @kbd{M-x load-library @key{RET} info
-@key{RET}}.
-@end ignore
-
-Visit the Info file you wish to tagify and split and type the two
-commands:@refill
-
-@example
-M-x Info-tagify
-M-x Info-split
-@end example
-
-@noindent
-(Note that the @samp{I} in @samp{Info} is upper case.)@refill
-
-When you use the @code{Info-split} command, the buffer is modified into a
-(small) Info file which lists the indirect subfiles. This file should be
-saved in place of the original visited file. The indirect subfiles are
-written in the same directory the original file is in, with names generated
-by appending @samp{-} and a number to the original file name.@refill
-
-The primary file still functions as an Info file, but it contains just
-the tag table and a directory of subfiles.@refill
-
-@node Refilling Paragraphs, Command Syntax, Catching Mistakes, Top
-@comment node-name, next, previous, up
-@appendix Refilling Paragraphs
-@cindex Refilling paragraphs
-@cindex Filling paragraphs
-@findex refill
-
-The @code{@@refill} command refills and, optionally, indents the first
-line of a paragraph.@footnote{Perhaps the command should have been
-called the @code{@@refillandindent} command, but @code{@@refill} is
-shorter and the name was chosen before indenting was possible.} The
-@code{@@refill} command is no longer important, but we describe it here
-because you once needed it. You will see it in many old Texinfo
-files.@refill
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-Without refilling, paragraphs containing long @@-constructs may look
-bad after formatting because the formatter removes @@-commands and
-shortens some lines more than others. In the past, neither
-@code{texinfo-format-region} nor
-@code{texinfo-format-buffer} refilled paragraphs
-automatically. The @code{@@refill} command had to be written at the
-end of every paragraph to cause these formatters to fill them. (Both
-@TeX{} and @code{makeinfo} have always refilled paragraphs
-automatically.) Now, all the Info formatters automatically fill and
-indent those paragraphs that need to be filled and indented.@refill
-
-@c !!! changed wording to prevent overfull hbox --bob 26 Mar 93
-The @code{@@refill} command causes both the @code{texinfo-format-region}
-command and the
-@code{texinfo-format-buffer} command to refill a paragraph in the Info file
-@emph{after} all the other processing has been done. For this reason,
-you can not use @code{@@refill} with a paragraph containing either
-@code{@@*} or @code{@@w@{ @dots{} @}} since the refilling action will
-override those two commands.@refill
-
-The @code{texinfo-format-region} and @code{texinfo-format-buffer}
-commands now automatically append @code{@@refill} to the end of each
-paragraph that should be filled. They do not append @code{@@refill} to
-the ends of paragraphs that contain @code{@@*} or @w{@code{@@w@{ @dots{}@}}}
-and therefore do not refill or indent them.@refill
-
-@node Command Syntax, Obtaining TeX, Refilling Paragraphs, Top
-@comment node-name, next, previous, up
-@appendix @@-Command Syntax
-@cindex @@-command syntax
-
-The character @samp{@@} is used to start special Texinfo commands.
-(It has the same meaning that @samp{\} has in Plain@TeX{}.) Texinfo
-has four types of @@-command:@refill
-
-@table @asis
-@item 1. Non-alphabetic commands.
-These commands consist of an @@ followed by a punctuation mark or other
-character that is not part of the alphabet. Non-alphabetic commands
-are almost always part of the text within a paragraph, and never take
-any argument. The two characters (@@ and the other one) are complete
-in themselves; none is followed by braces. The non-alphabetic
-commands are: @code{@@.}, @code{@@:}, @code{@@*}, @code{@@@@},
-@code{@@@{}, and @code{@@@}}.@refill
-
-@item 2. Alphabetic commands that do not require arguments.
-These commands start with @@ followed by a word followed by left- and
-right-hand braces. These commands insert special symbols in the
-document; they do not require arguments. For example,
-@code{@@dots@{@}} @result{} @samp{@dots{}}, @code{@@equiv@{@}}
-@result{} @samp{@equiv{}}, @code{@@TeX@{@}} @result{} `@TeX{}',
-and @code{@@bullet@{@}} @result{} @samp{@bullet{}}.@refill
-
-@item 3. Alphabetic commands that require arguments within braces.
-These commands start with @@ followed by a letter or a word, followed by an
-argument within braces. For example, the command @code{@@dfn} indicates
-the introductory or defining use of a term; it is used as follows: @samp{In
-Texinfo, @@@@-commands are @@dfn@{mark-up@} commands.}@refill
-
-@item 4. Alphabetic commands that occupy an entire line.
-These commands occupy an entire line. The line starts with @@,
-followed by the name of the command (a word); for example, @code{@@center}
-or @code{@@cindex}. If no argument is needed, the word is followed by
-the end of the line. If there is an argument, it is separated from
-the command name by a space. Braces are not used.@refill
-@end table
-
-@cindex Braces and argument syntax
-Thus, the alphabetic commands fall into classes that have
-different argument syntaxes. You cannot tell to which class a command
-belongs by the appearance of its name, but you can tell by the
-command's meaning: if the command stands for a glyph, it is in
-class 2 and does not require an argument; if it makes sense to use the
-command together with other text as part of a paragraph, the command
-is in class 3 and must be followed by an argument in braces;
-otherwise, it is in class 4 and uses the rest of the line as its
-argument.@refill
-
-The purpose of having a different syntax for commands of classes 3 and
-4 is to make Texinfo files easier to read, and also to help the GNU
-Emacs paragraph and filling commands work properly. There is only one
-exception to this rule: the command @code{@@refill}, which is always
-used at the end of a paragraph immediately following the final period
-or other punctuation character. @code{@@refill} takes no argument and
-does @emph{not} require braces. @code{@@refill} never confuses the
-Emacs paragraph commands because it cannot appear at the beginning of
-a line.@refill
-
-@node Obtaining TeX, New Features, Command Syntax, Top
-@appendix How to Obtain @TeX{}
-@cindex Obtaining @TeX{}
-@cindex @TeX{}, how to obtain
-
-@c !!! Here is information about obtaining TeX. Update it whenever.
-@c Last updated by RJC on 6 October 1992
-@c based on message from elisabet@@.u.washington.edu
-@TeX{} is freely redistributable. You can obtain @TeX{} for Unix
-systems from the University of Washington for a distribution
-fee.@refill
-
-To order a full distribution, send $200.00 for a 1/2-inch 9-track 1600
-bpi (@code{tar} or @code{cpio}) tape reel, or $210.00 for a 1/4-inch
-4-track QIC-24 (@code{tar} or @code{cpio}) cartridge, to:@refill
-
-@display
-Northwest Computing Support Center
-DR-10, Thomson Hall 35
-University of Washington
-Seattle, Washington 98195
-@end display
-
-@noindent
-Please make checks payable to the University of Washington.@refill
-
-Prepaid orders are preferred but purchase orders are acceptable;
-however, purchase orders carry an extra charge of $10.00, to pay for
-processing.@refill
-
-Overseas sites: please add to the base cost $20.00 for shipment via
-air parcel post, or $30.00 for shipment via courier.@refill
-
-Please check with the Northwest Computing Support Center at the
-University of Washington for current prices and formats:@refill
-
-@example
-@group
-@r{telephone:} (206) 543-6259
-@r{email:} elisabet@@u.washington.edu
-@end group
-@end example
-
-@node New Features, Command and Variable Index, Obtaining TeX, Top
-@appendix Second Edition Features
-
-@tex
-% Widen the space for the first column so three control-character
-% strings fit in the first column. Switched back to default .8in
-% value at end of chapter.
-\global\tableindent=1.0in
-@end tex
-
-The second edition of the Texinfo manual describes more than 20 new
-Texinfo mode commands and more than 50 previously undocumented Texinfo
-@@-commands. This edition is more than twice the length of the first
-edition.@refill
-
-Here is a brief description of the new commands.@refill
-
-@menu
-* New Texinfo Mode Commands:: The updating commands are especially useful.
-* New Commands:: Many newly described @@-commands.
-@end menu
-
-@node New Texinfo Mode Commands, New Commands, , New Features
-@appendixsec New Texinfo Mode Commands
-
-Texinfo mode provides commands and features especially designed for
-working with Texinfo files. More than 20 new commands have been
-added, including commands for automatically creating and updating
-both nodes and menus. This is a tedious task when done by hand.@refill
-
-The keybindings are intended to be somewhat mnemonic.@refill
-
-@subheading Update all nodes and menus
-
-The @code{texinfo-master-menu} command is the primary command:
-
-@table @kbd
-@item C-c C-u m
-@itemx M-x texinfo-master-menu
-Create or update a master menu.
-With @kbd{C-u} as a prefix argument,
-first create or update all nodes
-and regular menus.
-@end table
-
-@subheading Update Pointers
-
-@noindent
-Create or update `Next', `Previous', and `Up' node pointers.@refill
-
-@noindent
-@xref{Updating Nodes and Menus}.
-
-@table @kbd
-@item C-c C-u C-n
-@itemx M-x texinfo-update-node
-Update a node.
-
-@item C-c C-u C-e
-@itemx M-x texinfo-every-node-update
-Update every node in the buffer.
-@end table
-
-@subheading Update Menus
-
-@noindent
-Create or update menus.@refill
-
-@noindent
-@xref{Updating Nodes and Menus}.
-
-@table @kbd
-@item C-c C-u C-m
-@itemx M-x texinfo-make-menu
-Make or update a menu.
-
-@item C-c C-u C-a
-@itemx M-x texinfo-all-menus-update
-Make or update all the menus in a buffer.
-With @kbd{C-u} as a prefix argument,
-first update all the nodes.
-@end table
-
-@subheading Insert Title as Description
-
-@noindent
-Insert a node's chapter or section title in the space for the
-description in a menu entry line; position point so you can edit the
-insert. (This command works somewhat differently than the other
-insertion commands, which insert only a predefined string.)@refill
-
-@noindent
-@xref{Inserting, Inserting Frequently Used Commands}.
-
-@table @kbd
-@item C-c C-c C-d
-Insert title.
-@end table
-
-@subheading Format for Info
-
-@noindent
-Provide keybindings both for the Info formatting commands that are
-written in Emacs Lisp and for @code{makeinfo} that is written in
-C.@refill
-
-@noindent
-@xref{Info Formatting}.
-
-@noindent
-Use the Emacs lisp @code{texinfo-format@dots{}} commands:
-
-@table @kbd
-@item C-c C-e C-r
-Format the region.
-
-@item C-c C-e C-b
-Format the buffer.
-@end table
-
-@noindent
-Use @code{makeinfo}:
-
-@table @kbd
-@item C-c C-m C-r
-Format the region.
-
-@item C-c C-m C-b
-Format the buffer.
-
-@item C-c C-m C-l
-Recenter the @code{makeinfo} output buffer.
-
-@item C-c C-m C-k
-Kill the @code{makeinfo} formatting job.
-@end table
-
-@subheading Typeset and Print
-
-@noindent
-Typeset and print Texinfo documents from within Emacs.@refill
-
-@ifinfo
-@noindent
-@xref{Printing}.
-@end ifinfo
-@iftex
-@noindent
-@xref{Printing, , Formatting and Printing}.
-@end iftex
-
-@table @kbd
-@item C-c C-t C-r
-Run @TeX{} on the region.
-
-@item C-c C-t C-b
-Run @TeX{} on the buffer.
-
-@item C-c C-t C-i
-Run @code{texindex}.
-
-@item C-c C-t C-p
-Print the @sc{dvi} file.
-
-@item C-c C-t C-q
-Show the print queue.
-
-@item C-c C-t C-d
-Delete a job from the print queue.
-
-@item C-c C-t C-k
-Kill the current @TeX{} formatting job.
-
-@item C-c C-t C-x
-Quit a currently stopped @TeX{} formatting job.
-
-@item C-c C-t C-l
-Recenter the output buffer.
-@end table
-
-@subheading Other Updating Commands
-
-@noindent
-The ``other updating commands'' do not have standard keybindings because
-they are used less frequently.@refill
-
-@noindent
-@xref{Other Updating Commands}.
-
-@table @kbd
-@item M-x texinfo-insert-node-lines
-Insert missing @code{@@node} lines using
-section titles as node names.
-
-@item M-x texinfo-multiple-files-update
-Update a multi-file document.
-With a numeric prefix, such as @kbd{C-u 8},
-update @strong{every} pointer and
-menu in @strong{all} the files and
-then insert a master menu.
-
-@item M-x texinfo-indent-menu-description
-Indent descriptions in menus.
-
-@item M-x texinfo-sequential-node-update
-Insert node pointers in strict sequence.
-@end table
-
-@node New Commands, , New Texinfo Mode Commands, New Features
-@appendixsec New Texinfo @@-Commands
-
-The second edition of the Texinfo manual describes more than 50
-commands that were not described in the first edition. A third or so
-of these commands existed in Texinfo but were not documented in the
-manual; the others are new. Here is a listing, with brief
-descriptions of them:@refill
-
-@subheading Indexing
-
-@noindent
-Create your own index, and merge indices.@refill
-
-@noindent
-@xref{Indices}.
-
-@table @kbd
-@item @@defindex @var{index-name}
-Define a new index and its indexing command.
-See also the @code{@@defcodeindex} command.
-
-@c written verbosely to avoid overful hbox
-@item @@synindex @var{from-index} @var{into-index}
-Merge the @var{from-index} index into the @var{into-index} index.
-See also the @code{@@syncodeindex} command.
-@end table
-
-@subheading Definitions
-
-@noindent
-Describe functions, variables, macros,
-commands, user options, special forms, and other such artifacts in a
-uniform format.@refill
-
-@noindent
-@xref{Definition Commands}.
-
-@table @kbd
-@item @@deffn @var{category} @var{name} @var{arguments}@dots{}
-Format a description for functions, interactive
-commands, and similar entities.
-
-@item @@defvr, @@defop, @dots{}
-15 other related commands.
-@end table
-
-@subheading Glyphs
-
-@noindent
-Indicate the results of evaluation, expansion,
-printed output, an error message, equivalence of expressions, and the
-location of point.@refill
-
-@noindent
-@xref{Glyphs}.
-
-@table @kbd
-@item @@equiv@{@}
-@itemx @equiv{}
-Equivalence:
-
-@item @@error@{@}
-@itemx @error{}
-Error message
-
-@item @@expansion@{@}
-@itemx @expansion{}
-Macro expansion
-
-@item @@point@{@}
-@itemx @point{}
-Position of point
-
-@item @@print@{@}
-@itemx @print{}
-Printed output
-
-@item @@result@{@}
-@itemx @result{}
-Result of an expression
-@end table
-
-@subheading Page Headings
-
-@noindent
-Customize page headings.
-
-@noindent
-@xref{Headings}.
-
-@table @kbd
-@item @@headings @var{on-off-single-double}
-Headings on or off, single, or double-sided.
-
-@item @@evenfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
-Footings for even-numbered (left-hand) pages.
-
-@item @@evenheading, @@everyheading, @@oddheading, @dots{}
-Five other related commands.
-
-@item @@thischapter
-Insert name of chapter and chapter number.
-
-@item @@thischaptername, @@thisfile, @@thistitle, @@thispage
-Related commands.
-@end table
-
-@subheading Formatting
-
-@noindent
-Format blocks of text.
-
-@noindent
-@xref{Quotations and Examples}, and@*
-@ref{Lists and Tables, , Making Lists and Tables}.
-
-@table @kbd
-@item @@cartouche
-Draw rounded box surrounding text (not in Info).
-
-@item @@enumerate @var{optional-arg}
-Enumerate a list with letters or numbers.
-
-@item @@exdent @var{line-of-text}
-Remove indentation.
-
-@item @@flushleft
-Left justify.
-
-@item @@flushright
-Right justify.
-
-@item @@format
-Do not narrow nor change font.
-
-@item @@ftable @var{formatting-command}
-@itemx @@vtable @var{formatting-command}
-Two-column table with indexing.
-
-@item @@lisp
-For an example of Lisp code.
-
-@item @@smallexample
-@itemx @@smalllisp
-Like @@table and @@lisp @r{but for} @@smallbook.
-@end table
-
-@subheading Conditionals
-
-@noindent
-Conditionally format text.
-
-@noindent
-@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
-
-@table @kbd
-@item @@set @var{flag} [@var{string}]
-Set a flag. Optionally, set value
-of @var{flag} to @var{string}.
-
-@item @@clear @var{flag}
-Clear a flag.
-
-@item @@value@{@var{flag}@}
-Replace with value to which @var{flag} is set.
-
-@item @@ifset @var{flag}
-Format, if @var{flag} is set.
-
-@item @@ifclear @var{flag}
-Ignore, if @var{flag} is set.
-@end table
-
-@subheading @@heading series for Titles
-
-@noindent
-Produce unnumbered headings that do not appear in a table of contents.
-
-@noindent
-@xref{Structuring}.
-
-@table @kbd
-@item @@heading @var{title}
-Unnumbered section-like heading not listed
-in the table of contents of a printed manual.
-
-@item @@chapheading, @@majorheading, @@subheading, @@subsubheading
-Related commands.
-@end table
-
-@need 1000
-@subheading Font commands
-
-@need 1000
-@noindent
-@xref{Smallcaps}, and @*
-@ref{Fonts}.
-
-@table @kbd
-@item @@r@{@var{text}@}
-Print in roman font.
-
-@item @@sc@{@var{text}@}
-Print in @sc{small caps} font.
-@end table
-
-@subheading Miscellaneous
-
-@noindent
-See @ref{title subtitle author, , @code{@@title} @code{@@subtitle} and @code{@@author} Commands},@*
-see @ref{Overfull hboxes},@*
-see @ref{Footnotes},@*
-see @ref{dmn, , Format a Dimension},@*
-see @ref{minus, , Inserting a Minus Sign},@*
-see @ref{paragraphindent, , Paragraph Indenting},@*
-see @ref{Cross Reference Commands},@*
-see @ref{title subtitle author, , @code{@@title} @code{@@subtitle} and @code{@@author}}, and@*
-see @ref{Custom Headings, , How to Make Your Own Headings}.
-
-@need 700
-@table @kbd
-@item @@author @var{author}
-Typeset author's name.
-
-@item @@finalout
-Produce cleaner printed output.
-
-@item @@footnotestyle
-Specify footnote style.
-
-@item @@dmn@{@var{dimension}@}
-Format a dimension.
-
-@item @@minus@{@}
-Generate a minus sign.
-
-@item @@paragraphindent
-Specify paragraph indentation.
-
-@item @@ref@{@var{node-name}, @r{[}@var{entry}@r{]}, @r{[}@var{topic-or-title}@r{]}, @r{[}@var{info-file}@r{]}, @r{[}@var{manual}@r{]}@}
-Make a reference. In the printed manual, the
-reference does not start with the word `see'.
-
-@item @@title @var{title}
-Typeset @var{title} in the alternative
-title page format.
-
-@item @@subtitle @var{subtitle}
-Typeset @var{subtitle} in the alternative
-title page format.
-
-@item @@today@{@}
-Insert the current date.
-@end table
-@tex
-% Switch width of first column of tables back to default value
-\global\tableindent=.8in
-@end tex
-
-@node Command and Variable Index, Concept Index, New Features, Top
-@comment node-name, next, previous, up
-@unnumbered Command and Variable Index
-
-This is an alphabetical list of all the @@-commands and several
-variables. To make the list easier to use, the commands are listed
-without their preceding @samp{@@}.@refill
-
-@printindex fn
-
-@node Concept Index, , Command and Variable Index, Top
-@comment node-name, next, previous, up
-@unnumbered Concept Index
-
-@printindex cp
-
-@summarycontents
-@contents
-@bye
diff --git a/gnu/usr.bin/texinfo/info-files/texi-files/userdoc.texi b/gnu/usr.bin/texinfo/info-files/texi-files/userdoc.texi
deleted file mode 100644
index 4ebeae8..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi-files/userdoc.texi
+++ /dev/null
@@ -1,1263 +0,0 @@
-@c This file is meant to be included in any arbitrary piece of
-@c documentation that wishes to describe the info program. Some day
-@c info-stnd.texi should probably use this file instead of duplicating
-@c its contents.
-@c
-@c This file documents the use of the standalone GNU Info program,
-@c versions 2.7 and later.
-
-@ifclear InfoProgVer
-@set InfoProgVer 2.9
-@end ifclear
-@synindex vr cp
-@synindex fn cp
-@synindex ky cp
-
-@heading What is Info?
-
-This text documents the use of the GNU Info program, version
-@value{InfoProgVer}.
-
-@dfn{Info} is a program which is used to view info files on an ASCII
-terminal. @dfn{info files} are the result of processing texinfo files
-with the program @code{makeinfo} or with the Emacs command @code{M-x
-texinfo-format-buffer}. Finally, @dfn{texinfo} is a documentation
-language which allows a printed manual and online documentation (an info
-file) to be produced from a single source file.
-
-@menu
-* Options:: Options you can pass on the command line.
-* Cursor Commands:: Commands which move the cursor within a node.
-* Scrolling Commands:: Commands for moving the node around in a window.
-* Node Commands:: Commands for selecting a new node.
-* Searching Commands:: Commands for searching an info file.
-* Xref Commands:: Commands for selecting cross references.
-* Window Commands:: Commands which manipulate multiple windows.
-* Printing Nodes:: How to print out the contents of a node.
-* Miscellaneous Commands:: A few commands that defy categories.
-* Variables:: How to change the default behaviour of Info.
-* Info for Sys Admins:: How to setup Info. Using special options.
-@ifset STANDALONE
-* GNU Info Global Index:: Global index containing keystrokes, command names,
- variable names, and general concepts.
-@end ifset
-@end menu
-
-@node Options
-@chapter Command Line Options
-@cindex command line options
-@cindex arguments, command line
-
-GNU Info accepts several options to control the initial node being
-viewed, and to specify which directories to search for info files. Here
-is a template showing an invocation of GNU Info from the shell:
-
-@example
-info [--@var{option-name} @var{option-value}] @var{menu-item}@dots{}
-@end example
-
-The following @var{option-names} are available when invoking Info from
-the shell:
-
-@table @code
-@cindex directory path
-@item --directory @var{directory-path}
-@itemx -d @var{directory-path}
-Adds @var{directory-path} to the list of directory paths searched when
-Info needs to find a file. You may issue @code{--directory} multiple
-times; once for each directory which contains info files.
-Alternatively, you may specify a value for the environment variable
-@code{INFOPATH}; if @code{--directory} is not given, the value of
-@code{INFOPATH} is used. The value of @code{INFOPATH} is a colon
-separated list of directory names. If you do not supply
-@code{INFOPATH} or @code{--directory-path} a default path is used.
-
-@item --file @var{filename}
-@itemx -f @var{filename}
-@cindex info file, selecting
-Specifies a particular info file to visit. Instead of visiting the file
-@code{dir}, Info will start with @code{(@var{filename})Top} as the first
-file and node.
-
-@item --node @var{nodename}
-@itemx -n @var{nodename}
-@cindex node, selecting
-Specifies a particular node to visit in the initial file loaded. This
-is especially useful in conjunction with @code{--file}@footnote{Of
-course, you can specify both the file and node in a @code{--node}
-command; but don't forget to escape the open and close parentheses from
-the shell as in: @code{info --node '(emacs)Buffers'}}. You may specify
-@code{--node} multiple times; for an interactive Info, each
-@var{nodename} is visited in its own window, for a non-interactive Info
-(such as when @code{--output} is given) each @var{nodename} is processed
-sequentially.
-
-@item --output @var{filename}
-@itemx -o @var{filename}
-@cindex file, outputting to
-@cindex outputting to a file
-Specify @var{filename} as the name of a file to output to. Each node
-that Info visits will be output to @var{filename} instead of
-interactively viewed. A value of @code{-} for @var{filename} specifies
-the standard output.
-
-@item --subnodes
-@cindex @code{--subnodes}, command line option
-This option only has meaning when given in conjunction with
-@code{--output}. It means to recursively output the nodes appearing in
-the menus of each node being output. Menu items which resolve to
-external info files are not output, and neither are menu items which are
-members of an index. Each node is only output once.
-
-@item --help
-@itemx -h
-Produces a relatively brief description of the available Info options.
-
-@item --version
-@cindex version information
-Prints the version information of Info and exits.
-
-@item @var{menu-item}
-@cindex menu, following
-Remaining arguments to Info are treated as the names of menu items. The
-first argument would be a menu item in the initial node visited, while
-the second argument would be a menu item in the first argument's node.
-You can easily move to the node of your choice by specifying the menu
-names which describe the path to that node. For example,
-
-@example
-info emacs buffers
-@end example
-
-first selects the menu item @samp{Emacs} in the node @samp{(dir)Top},
-and then selects the menu item @samp{Buffers} in the node
-@samp{(emacs)Top}.
-
-@end table
-
-@node Cursor Commands
-@chapter Moving the Cursor
-@cindex cursor, moving
-Many people find that reading screens of text page by page is made
-easier when one is able to indicate particular pieces of text with some
-kind of pointing device. Since this is the case, GNU Info (both the
-Emacs and standalone versions) have several commands which allow you to
-move the cursor about the screen. The notation used in this manual to
-describe keystrokes is identical to the notation used within the Emacs
-manual, and the GNU Readline manual. @xref{Characters, , Character
-Conventions, emacs, the GNU Emacs Manual}, if you are unfamilar with the
-notation.
-
-The following table lists the basic cursor movement commands in Info.
-Each entry consists of the key sequence you should type to execute the
-cursor movement, the @code{M-x}@footnote{@code{M-x} is also a command; it
-invokes @code{execute-extended-command}. @xref{M-x, , Executing an
-extended command, emacs, the GNU Emacs Manual}, for more detailed
-information.} command name (displayed in parentheses), and a short
-description of what the command does. All of the cursor motion commands
-can take an @dfn{numeric} argument (@pxref{Miscellaneous Commands,
-@code{universal-argument}}), to find out how to supply them. With a
-numeric argument, the motion commands are simply executed that
-many times; for example, a numeric argument of 4 given to
-@code{next-line} causes the cursor to move down 4 lines. With a
-negative numeric argument, the motion is reversed; an argument of -4
-given to the @code{next-line} command would cause the cursor to move
-@emph{up} 4 lines.
-
-@table @asis
-@item @code{C-n} (@code{next-line})
-@kindex C-n
-@findex next-line
-Moves the cursor down to the next line.
-
-@item @code{C-p} (@code{prev-line})
-@kindex C-p
-@findex prev-line
-Move the cursor up to the previous line.
-
-@item @code{C-a} (@code{beginning-of-line})
-@kindex C-a, in Info windows
-@findex beginning-of-line
-Move the cursor to the start of the current line.
-
-@item @code{C-e} (@code{end-of-line})
-@kindex C-e, in Info windows
-@findex end-of-line
-Moves the cursor to the end of the current line.
-
-@item @code{C-f} (@code{forward-char})
-@kindex C-f, in Info windows
-@findex forward-char
-Move the cursor forward a character.
-
-@item @code{C-b} (@code{backward-char})
-@kindex C-b, in Info windows
-@findex backward-char
-Move the cursor backward a character.
-
-@item @code{M-f} (@code{forward-word})
-@kindex M-f, in Info windows
-@findex forward-word
-Moves the cursor forward a word.
-
-@item @code{M-b} (@code{backward-word})
-@kindex M-b, in Info winows
-@findex backward-word
-Moves the cursor backward a word.
-
-@item @code{M-<} (@code{beginning-of-node})
-@itemx @code{b}
-@kindex b, in Info winows
-@kindex M-<
-@findex beginning-of-node
-Moves the cursor to the start of the current node.
-
-@item @code{M->} (@code{end-of-node})
-@kindex M->
-@findex end-of-node
-Moves the cursor to the end of the current node.
-
-@item @code{M-r} (@code{move-to-window-line})
-@kindex M-r
-@findex move-to-window-line
-Moves the cursor to a specific line of the window. Without a numeric
-argument, @code{M-r} moves the cursor to the start of the line in the
-center of the window. With a numeric argument of @var{n}, @code{M-r}
-moves the cursor to the start of the @var{n}th line in the window.
-@end table
-
-@node Scrolling Commands
-@chapter Moving Text Within a Window
-@cindex scrolling
-
-Sometimes you are looking at a screenful of text, and only part of the
-current paragraph you are reading is visible on the screen. The
-commands detailed in this section are used to shift which part of the
-current node is visible on the screen.
-
-@table @asis
-@item @code{SPC} (@code{scroll-forward})
-@itemx @code{C-v}
-@kindex SPC, in Info windows
-@kindex C-v
-@findex scroll-forward
-Shift the text in this window up. That is, show more of the node which
-is currently below the bottom of the window. With a numeric argument,
-show that many more lines at the bottom of the window; a numeric
-argument of 4 would shift all of the text in the window up 4 lines
-(discarding the top 4 lines), and show you four new lines at the bottom
-of the window. Without a numeric argument, @key{SPC} takes the bottom
-two lines of the window and places them at the top of the window,
-redisplaying almost a completely new screenful of lines.
-
-@item @code{DEL} (@code{scroll-backward})
-@itemx @code{M-v}
-@kindex DEL, in Info windows
-@kindex M-v
-@findex scroll-backward
-Shift the text in this window down. The inverse of
-@code{scroll-forward}.
-
-@end table
-
-@cindex scrolling through node structure
-The @code{scroll-forward} and @code{scroll-backward} commands can also
-move forward and backward through the node structure of the file. If
-you press @key{SPC} while viewing the end of a node, or @key{DEL} while
-viewing the beginning of a node, what happens is controlled by the
-variable @code{scroll-behaviour}. @xref{Variables,
-@code{scroll-behaviour}}, for more information.
-
-@table @asis
-@item @code{C-l} (@code{redraw-display})
-@kindex C-l
-@findex redraw-display
-Redraw the display from scratch, or shift the line containing the cursor
-to a specified location. With no numeric argument, @samp{C-l} clears
-the screen, and then redraws its entire contents. Given a numeric
-argument of @var{n}, the line containing the cursor is shifted so that
-it is on the @var{n}th line of the window.
-
-@item @code{C-x w} (@code{toggle-wrap})
-@kindex C-w
-@findex toggle-wrap
-Toggles the state of line wrapping in the current window. Normally,
-lines which are longer than the screen width @dfn{wrap}, i.e., they are
-continued on the next line. Lines which wrap have a @samp{\} appearing
-in the rightmost column of the screen. You can cause such lines to be
-terminated at the rightmost column by changing the state of line
-wrapping in the window with @code{C-x w}. When a line which needs more
-space than one screen width to display is displayed, a @samp{$} appears
-in the rightmost column of the screen, and the remainder of the line is
-invisible.
-@end table
-
-@node Node Commands
-@chapter Selecting a New Node
-@cindex nodes, selection of
-
-This section details the numerous Info commands which select a new node
-to view in the current window.
-
-The most basic node commands are @samp{n}, @samp{p}, @samp{u}, and
-@samp{l}.
-
-When you are viewing a node, the top line of the node contains some Info
-@dfn{pointers} which describe where the next, previous, and up nodes
-are. Info uses this line to move about the node structure of the file
-when you use the following commands:
-
-@table @asis
-@item @code{n} (@code{next-node})
-@kindex n
-@findex next-node
-Selects the `Next' node.
-
-@item @code{p} (@code{prev-node})
-@kindex p
-@findex prev-node
-Selects the `Prev' node.
-
-@item @code{u} (@code{up-node})
-@kindex u
-@findex up-node
-Selects the `Up' node.
-@end table
-
-You can easily select a node that you have already viewed in this window
-by using the @samp{l} command -- this name stands for "last", and
-actually moves through the list of already visited nodes for this
-window. @samp{l} with a negative numeric argument moves forward through
-the history of nodes for this window, so you can quickly step between
-two adjacent (in viewing history) nodes.
-
-@table @asis
-@item @code{l} (@code{history-node})
-@kindex l
-@findex history-node
-Selects the most recently selected node in this window.
-@end table
-
-Two additional commands make it easy to select the most commonly
-selected nodes; they are @samp{t} and @samp{d}.
-
-@table @asis
-@item @code{t} (@code{top-node})
-@kindex t
-@findex top-node
-Selects the node @samp{Top} in the current info file.
-
-@item @code{d} (@code{dir-node})
-@kindex d
-@findex dir-node
-Selects the directory node (i.e., the node @samp{(dir)}).
-@end table
-
-Here are some other commands which immediately result in the selection
-of a different node in the current window:
-
-@table @asis
-@item @code{<} (@code{first-node})
-@kindex <
-@findex first-node
-Selects the first node which appears in this file. This node is most
-often @samp{Top}, but it doesn't have to be.
-
-@item @code{>} (@code{last-node})
-@kindex >
-@findex last-node
-Selects the last node which appears in this file.
-
-@item @code{]} (@code{global-next-node})
-@kindex ]
-@findex global-next-node
-Moves forward or down through node structure. If the node that you are
-currently viewing has a @samp{Next} pointer, that node is selected.
-Otherwise, if this node has a menu, the first menu item is selected. If
-there is no @samp{Next} and no menu, the same process is tried with the
-@samp{Up} node of this node.
-
-@item @code{[} (@code{global-prev-node})
-@kindex [
-@findex global-prev-node
-Moves backward or up through node structure. If the node that you are
-currently viewing has a @samp{Prev} pointer, that node is selected.
-Otherwise, if the node has an @samp{Up} pointer, that node is selected,
-and if it has a menu, the last item in the menu is selected.
-@end table
-
-You can get the same behaviour as @code{global-next-node} and
-@code{global-prev-node} while simply scrolling through the file with
-@key{SPC} and @key{DEL}; @xref{Variables, @code{scroll-behaviour}}, for
-more information.
-
-@table @asis
-@item @code{g} (@code{goto-node})
-@kindex g
-@findex goto-node
-Reads the name of a node and selects it. No completion is done while
-reading the node name, since the desired node may reside in a separate
-file. The node must be typed exactly as it appears in the info file. A
-file name may be included as with any node specification, for example
-
-@example
-@code{g(emacs)Buffers}
-@end example
-
-finds the node @samp{Buffers} in the info file @file{emacs}.
-
-@item @code{C-x k} (@code{kill-node})
-@kindex C-x k
-@findex kill-node
-Kills a node. The node name is prompted for in the echo area, with a
-default of the current node. @dfn{Killing} a node means that Info tries
-hard to forget about it, removing it from the list of history nodes kept
-for the window where that node is found. Another node is selected in
-the window which contained the killed node.
-
-@item @code{C-x C-f} (@code{view-file})
-@kindex C-x C-f
-@findex view-file
-Reads the name of a file and selects the entire file. The command
-@example
-@code{C-x C-f @var{filename}}
-@end example
-is equivalent to typing
-@example
-@code{g(@var{filename})*}
-@end example
-
-@item @code{C-x C-b} (@code{list-visited-nodes})
-@kindex C-x C-b
-@findex list-visited-nodes
-Makes a window containing a menu of all of the currently visited nodes.
-This window becomes the selected window, and you may use the standard
-Info commands within it.
-
-@item @code{C-x b} (@code{select-visited-node})
-@kindex C-x b
-@findex select-visited-node
-Selects a node which has been previously visited in a visible window.
-This is similar to @samp{C-x C-b} followed by @samp{m}, but no window is
-created.
-@end table
-
-@node Searching Commands
-@chapter Searching an Info File
-@cindex searching
-
-GNU Info allows you to search for a sequence of characters throughout an
-entire info file, search through the indices of an info file, or find
-areas within an info file which discuss a particular topic.
-
-@table @asis
-@item @code{s} (@code{search})
-@kindex s
-@findex search
-Reads a string in the echo area and searches for it.
-
-@item @code{C-s} (@code{isearch-forward})
-@kindex C-s
-@findex isearch-forward
-Interactively searches forward through the info file for a string as you
-type it.
-
-@item @code{C-r} (@code{isearch-backward})
-@kindex C-r
-@findex isearch-backward
-Interactively searches backward through the info file for a string as
-you type it.
-
-@item @code{i} (@code{index-search})
-@kindex i
-@findex index-search
-Looks up a string in the indices for this info file, and selects a node
-where the found index entry points to.
-
-@item @code{,} (@code{next-index-match})
-@kindex ,
-@findex next-index-match
-Moves to the node containing the next matching index item from the last
-@samp{i} command.
-@end table
-
-The most basic searching command is @samp{s} (@code{search}). The
-@samp{s} command prompts you for a string in the echo area, and then
-searches the remainder of the info file for an ocurrence of that string.
-If the string is found, the node containing it is selected, and the
-cursor is left positioned at the start of the found string. Subsequent
-@samp{s} commands show you the default search string within @samp{[} and
-@samp{]}; pressing @key{RET} instead of typing a new string will use the
-default search string.
-
-@dfn{Incremental searching} is similar to basic searching, but the
-string is looked up while you are typing it, instead of waiting until
-the entire search string has been specified.
-
-@node Xref Commands
-@chapter Selecting Cross References
-
-We have already discussed the @samp{Next}, @samp{Prev}, and @samp{Up}
-pointers which appear at the top of a node. In addition to these
-pointers, a node may contain other pointers which refer you to a
-different node, perhaps in another info file. Such pointers are called
-@dfn{cross references}, or @dfn{xrefs} for short.
-
-@menu
-* Parts of an Xref:: What a cross reference is made of.
-* Selecting Xrefs:: Commands for selecting menu or note items.
-@end menu
-
-@node Parts of an Xref
-@section Parts of an Xref
-
-Cross references have two major parts: the first part is called the
-@dfn{label}; it is the name that you can use to refer to the cross
-reference, and the second is the @dfn{target}; it is the full name of
-the node that the cross reference points to.
-
-The target is separated from the label by a colon @samp{:}; first the
-label appears, and then the target. For example, in the sample menu
-cross reference below, the single colon separates the label from the
-target.
-
-@example
-* Foo Label: Foo Target. More information about Foo.
-@end example
-
-Note the @samp{.} which ends the name of the target. The @samp{.} is
-not part of the target; it serves only to let Info know where the target
-name ends.
-
-A shorthand way of specifying references allows two adjacent colons to
-stand for a target name which is the same as the label name:
-
-@example
-* Foo Commands:: Commands pertaining to Foo.
-@end example
-
-In the above example, the name of the target is the same as the name of
-the label, in this case @code{Foo Commands}.
-
-You will normally see two types of cross references while viewing nodes:
-@dfn{menu} references, and @dfn{note} references. Menu references
-appear within a node's menu; they begin with a @samp{*} at the beginning
-of a line, and continue with a label, a target, and a comment which
-describes what the contents of the node pointed to contains.
-
-Note references appear within the body of the node text; they begin with
-@code{*Note}, and continue with a label and a target.
-
-Like @samp{Next}, @samp{Prev} and @samp{Up} pointers, cross references
-can point to any valid node. They are used to refer you to a place
-where more detailed information can be found on a particular subject.
-Here is a cross reference which points to a node within the Texinfo
-documentation: @xref{xref, , Writing an Xref, texinfo, the Texinfo
-Manual}, for more information on creating your own texinfo cross
-references.
-
-@node Selecting Xrefs
-@section Selecting Xrefs
-
-The following table lists the Info commands which operate on menu items.
-
-@table @asis
-@item @code{1} (@code{menu-digit})
-@itemx @code{2} @dots{} @code{9}
-@cindex 1 @dots{} 9, in Info windows
-@kindex 1 @dots{} 9, in Info windows
-@findex menu-digit
-Within an Info window, pressing a single digit, (such as @samp{1}),
-selects that menu item, and places its node in the current window.
-For convenience, there is one exception; pressing @samp{0} selects the
-@emph{last} item in the node's menu.
-
-@item @code{0} (@code{last-menu-item})
-@kindex 0, in Info windows
-@findex last-menu-item
-Select the last item in the current node's menu.
-
-@item @code{m} (@code{menu-item})
-@kindex m
-@findex menu-item
-Reads the name of a menu item in the echo area and selects its node.
-Completion is available while reading the menu label.
-
-@item @code{M-x find-menu}
-@findex find-menu
-Moves the cursor to the start of this node's menu.
-@end table
-
-This table lists the Info commands which operate on note cross references.
-
-@table @asis
-@item @code{f} (@code{xref-item})
-@itemx @code{r}
-@kindex f
-@kindex r
-@findex xref-item
-Reads the name of a note cross reference in the echo area and selects
-its node. Completion is available while reading the cross reference
-label.
-@end table
-
-Finally, the next few commands operate on menu or note references alike:
-
-@table @asis
-@item @code{TAB} (@code{move-to-next-xref})
-@kindex TAB, in Info windows
-@findex move-to-next-xref
-Moves the cursor to the start of the next nearest menu item or note
-reference in this node. You can then use @key{RET}
-(@code{select-reference-this-line} to select the menu or note reference.
-
-@item @code{M-TAB} (@code{move-to-prev-xref})
-@kindex M-TAB, in Info windows
-@findex move-to-prev-xref
-Moves the cursor the start of the nearest previous menu item or note
-reference in this node.
-
-@item @code{RET} (@code{select-reference-this-line})
-@kindex RET, in Info windows
-@findex select-reference-this-line
-Selects the menu item or note reference appearing on this line.
-@end table
-
-@node Window Commands
-@chapter Manipulating Multiple Windows
-@cindex windows, manipulating
-
-A @dfn{window} is a place to show the text of a node. Windows have a
-view area where the text of the node is displayed, and an associated
-@dfn{mode line}, which briefly describes the node being viewed.
-
-GNU Info supports multiple windows appearing in a single screen; each
-window is separated from the next by its modeline. At any time, there
-is only one @dfn{active} window, that is, the window in which the cursor
-appears. There are commands available for creating windows, changing
-the size of windows, selecting which window is active, and for deleting
-windows.
-
-@menu
-* The Mode Line:: What appears in the mode line?
-* Basic Windows:: Manipulating windows in Info.
-* The Echo Area:: Used for displaying errors and reading input.
-@end menu
-
-@node The Mode Line
-@section The Mode Line
-
-A @dfn{mode line} is a line of inverse video which appears at the bottom
-of an info window. It describes the contents of the window just above
-it; this information includes the name of the file and node appearing in
-that window, the number of screen lines it takes to display the node,
-and the percentage of text that is above the top of the window. It can
-also tell you if the indirect tags table for this info file needs to be
-updated, and whether or not the info file was compressed when stored on
-disk.
-
-Here is a sample mode line for a window containing an uncompressed file
-named @file{dir}, showing the node @samp{Top}.
-
-@example
------Info: (dir)Top, 40 lines --Top---------------------------------------
- ^^ ^ ^^^ ^^
- (file)Node #lines where
-@end example
-
-When a node comes from a file which is compressed on disk, this is
-indicated in the mode line with two small @samp{z}'s. In addition, if
-the info file containing the node has been split into subfiles, the name
-of the subfile containing the node appears in the modeline as well:
-
-@example
---zz-Info: (emacs)Top, 291 lines --Top-- Subfile: emacs-1.Z---------------
-@end example
-
-When Info makes a node internally, such that there is no corresponding
-info file on disk, the name of the node is surrounded by asterisks
-(@samp{*}). The name itself tells you what the contents of the window
-are; the sample mode line below shows an internally constructed node
-showing possible completions:
-
-@example
------Info: *Completions*, 7 lines --All-----------------------------------
-@end example
-
-@node Basic Windows
-@section Window Commands
-
-It can be convenient to view more than one node at a time. To allow
-this, Info can display more than one @dfn{window}. Each window has its
-own mode line (@pxref{The Mode Line}) and history of nodes viewed in that
-window (@pxref{Node Commands, , @code{history-node}}).
-
-@table @asis
-@item @code{C-x o} (@code{next-window})
-@cindex windows, selecting
-@kindex C-x o
-@findex next-window
-Selects the next window on the screen. Note that the echo area can only be
-selected if it is already in use, and you have left it temporarily.
-Normally, @samp{C-x o} simply moves the cursor into the next window on
-the screen, or if you are already within the last window, into the first
-window on the screen. Given a numeric argument, @samp{C-x o} moves over
-that many windows. A negative argument causes @samp{C-x o} to select
-the previous window on the screen.
-
-@item @code{M-x prev-window}
-@findex prev-window
-Selects the previous window on the screen. This is identical to
-@samp{C-x o} with a negative argument.
-
-@item @code{C-x 2} (@code{split-window})
-@cindex windows, creating
-@kindex C-x 2
-@findex split-window
-Splits the current window into two windows, both showing the same node.
-Each window is one half the size of the original window, and the cursor
-remains in the original window. The variable @code{automatic-tiling}
-can cause all of the windows on the screen to be resized for you
-automatically, please @pxref{Variables, , automatic-tiling} for more
-information.
-
-@item @code{C-x 0} (@code{delete-window})
-@cindex windows, deleting
-@kindex C-x 0
-@findex delete-window
-Deletes the current window from the screen. If you have made too many
-windows and your screen appears cluttered, this is the way to get rid of
-some of them.
-
-@item @code{C-x 1} (@code{keep-one-window})
-@kindex C-x 1
-@findex keep-one-window
-Deletes all of the windows excepting the current one.
-
-@item @code{ESC C-v} (@code{scroll-other-window})
-@kindex ESC C-v, in Info windows
-@findex scroll-other-window
-Scrolls the other window, in the same fashion that @samp{C-v} might
-scroll the current window. Given a negative argument, the "other"
-window is scrolled backward.
-
-@item @code{C-x ^} (@code{grow-window})
-@kindex C-x ^
-@findex grow-window
-Grows (or shrinks) the current window. Given a numeric argument, grows
-the current window that many lines; with a negative numeric argument,
-the window is shrunk instead.
-
-@item @code{C-x t} (@code{tile-windows})
-@cindex tiling
-@kindex C-x t
-@findex tile-windows
-Divides the available screen space among all of the visible windows.
-Each window is given an equal portion of the screen in which to display
-its contents. The variable @code{automatic-tiling} can cause
-@code{tile-windows} to be called when a window is created or deleted.
-@xref{Variables, , @code{automatic-tiling}}.
-@end table
-
-@node The Echo Area
-@section The Echo Area
-@cindex echo area
-
-The @dfn{echo area} is a one line window which appears at the bottom of
-the screen. It is used to display informative or error messages, and to
-read lines of input from you when that is necessary. Almost all of the
-commands available in the echo area are identical to their Emacs
-counterparts, so please refer to that documentation for greater depth of
-discussion on the concepts of editing a line of text. The following
-table briefly lists the commands that are available while input is being
-read in the echo area:
-
-@table @asis
-@item @code{C-f} (@code{echo-area-forward})
-@kindex C-f, in the echo area
-@findex echo-area-forward
-Moves forward a character.
-
-@item @code{C-b} (@code{echo-area-backward})
-@kindex C-b, in the echo area
-@findex echo-area-backward
-Moves backward a character.
-
-@item @code{C-a} (@code{echo-area-beg-of-line})
-@kindex C-a, in the echo area
-@findex echo-area-beg-of-line
-Moves to the start of the input line.
-
-@item @code{C-e} (@code{echo-area-end-of-line})
-@kindex C-e, in the echo area
-@findex echo-area-end-of-line
-Moves to the end of the input line.
-
-@item @code{M-f} (@code{echo-area-forward-word})
-@kindex M-f, in the echo area
-@findex echo-area-forward-word
-Moves forward a word.
-
-@item @code{M-b} (@code{echo-area-backward-word})
-@kindex M-b, in the echo area
-@findex echo-area-backward-word
-Moves backward a word.
-
-@item @code{C-d} (@code{echo-area-delete})
-@kindex C-d, in the echo area
-@findex echo-area-delete
-Deletes the character under the cursor.
-
-@item @code{DEL} (@code{echo-area-rubout})
-@kindex DEL, in the echo area
-@findex echo-area-rubout
-Deletes the character behind the cursor.
-
-@item @code{C-g} (@code{echo-area-abort})
-@kindex C-g, in the echo area
-@findex echo-area-abort
-Cancels or quits the current operation. If completion is being read,
-@samp{C-g} discards the text of the input line which does not match any
-completion. If the input line is empty, @samp{C-g} aborts the calling
-function.
-
-@item @code{RET} (@code{echo-area-newline})
-@kindex RET, in the echo area
-@findex echo-area-newline
-Accepts (or forces completion of) the current input line.
-
-@item @code{C-q} (@code{echo-area-quoted-insert})
-@kindex C-q, in the echo area
-@findex echo-area-quoted-insert
-Inserts the next character verbatim. This is how you can insert control
-characters into a search string, for example.
-
-@item @var{printing character} (@code{echo-area-insert})
-@kindex printing characters, in the echo area
-@findex echo-area-insert
-Inserts the character.
-
-@item @code{M-TAB} (@code{echo-area-tab-insert})
-@kindex M-TAB, in the echo area
-@findex echo-area-tab-insert
-Inserts a TAB character.
-
-@item @code{C-t} (@code{echo-area-transpose-chars})
-@kindex C-t, in the echo area
-@findex echo-area-transpose-chars
-Transposes the characters at the cursor.
-@end table
-
-The next group of commands deal with @dfn{killing}, and @dfn{yanking}
-text. For an in depth discussion of killing and yanking,
-@pxref{Killing, , Killing and Deleting, emacs, the GNU Emacs Manual}
-
-@table @asis
-@item @code{M-d} (@code{echo-area-kill-word})
-@kindex M-d, in the echo area
-@findex echo-area-kill-word
-Kills the word following the cursor.
-
-@item @code{M-DEL} (@code{echo-area-backward-kill-word})
-@kindex M-DEL, in the echo area
-@findex echo-area-backward-kill-word
-Kills the word preceding the cursor.
-
-@item @code{C-k} (@code{echo-area-kill-line})
-@kindex C-k, in the echo area
-@findex echo-area-kill-line
-Kills the text from the cursor to the end of the line.
-
-@item @code{C-x DEL} (@code{echo-area-backward-kill-line})
-@kindex C-x DEL, in the echo area
-@findex echo-area-backward-kill-line
-Kills the text from the cursor to the beginning of the line.
-
-@item @code{C-y} (@code{echo-area-yank})
-@kindex C-y, in the echo area
-@findex echo-area-yank
-Yanks back the contents of the last kill.
-
-@item @code{M-y} (@code{echo-area-yank-pop})
-@kindex M-y, in the echo area
-@findex echo-area-yank-pop
-Yanks back a previous kill, removing the last yanked text first.
-@end table
-
-Sometimes when reading input in the echo area, the command that needed
-input will only accept one of a list of several choices. The choices
-represent the @dfn{possible completions}, and you must respond with one
-of them. Since there are a limited number of responses you can make,
-Info allows you to abbreviate what you type, only typing as much of the
-response as is necessary to uniquely identify it. In addition, you can
-request Info to fill in as much of the response as is possible; this
-is called @dfn{completion}.
-
-The following commands are available when completing in the echo area:
-
-@table @asis
-@item @code{TAB} (@code{echo-area-complete})
-@itemx @code{SPC}
-@kindex TAB, in the echo area
-@kindex SPC, in the echo area
-@findex echo-area-complete
-Inserts as much of a completion as is possible.
-
-@item @code{?} (@code{echo-area-possible-completions})
-@kindex ?, in the echo area
-@findex echo-area-possible-completions
-Displays a window containing a list of the possible completions of what
-you have typed so far. For example, if the available choices are:
-@example
-bar
-foliate
-food
-forget
-@end example
-and you have typed an @samp{f}, followed by @samp{?}, the possible
-completions would contain:
-@example
-foliate
-food
-forget
-@end example
-i.e., all of the choices which begin with @samp{f}. Pressing @key{SPC}
-or @key{TAB} would result in @samp{fo} appearing in the echo area, since
-all of the choices which begin with @samp{f} continue with @samp{o}.
-Now, typing @samp{l} followed by @samp{TAB} results in @samp{foliate}
-appearing in the echo area, since that is the only choice which begins
-with @samp{fol}.
-
-@item @code{ESC C-v} (@code{echo-area-scroll-completions-window})
-@kindex ESC C-v, in the echo area
-@findex echo-area-scroll-completions-window
-Scrolls the completions window, if that is visible, or the "other"
-window if not.
-@end table
-
-@node Printing Nodes
-@chapter Printing Out Nodes
-@cindex printing
-
-You may wish to print out the contents of a node as a quick reference
-document for later use. Info provides you with a command for doing
-this. In general, we recommend that you use @TeX{} to format the
-document and print sections of it, by running @code{tex} on the texinfo
-source file.
-
-@table @asis
-@item @code{M-x print-node}
-@findex print-node
-@cindex INFO_PRINT_COMMAND, environment variable
-Pipes the contents of the current node through the command in the
-environment variable @code{INFO_PRINT_COMMAND}. If the variable doesn't
-exist, the node is simply piped to @code{lpr}.
-@end table
-
-@node Miscellaneous Commands
-@chapter Miscellaneous Commands
-
-GNU Info contains several commands which self-document GNU Info:
-
-@table @asis
-@item @code{M-x describe-command}
-@cindex functions, describing
-@cindex commands, describing
-@findex describe-command
-Reads the name of an Info command in the echo area and then displays a
-brief description of what that command does.
-
-@item @code{M-x describe-key}
-@cindex keys, describing
-@findex describe-key
-Reads a key sequence in the echo area, and then displays the name and
-documentation of the Info command that the key sequence invokes.
-
-@item @code{M-x describe-variable}
-Reads the name of a variable in the echo area and then displays a brief
-description of what the variable affects.
-
-@item @code{M-x where-is}
-@findex where-is
-Reads the name of an Info command in the echo area, and then displays
-a key sequence which can be typed in order to invoke that command.
-
-@item @code{C-h} (@code{get-help-window})
-@itemx @code{?}
-@kindex C-h
-@kindex ?, in Info windows
-@findex get-help-window
-Creates (or moves into) the window displaying @code{*Help*}, and places
-a node containing a quick reference card into it. This window displays
-the most concise information about GNU Info available.
-
-@item @code{h} (@code{get-info-help-node})
-@kindex h
-@findex get-info-help-node
-Tries hard to visit the node @code{(info)Help}. The info file
-@file{info.texi} distributed with GNU Info contains this node. Of
-course, the file must first be processed with @code{makeinfo}, and then
-placed into the location of your info directory.
-@end table
-
-Here are the commands for creating a numeric argument:
-
-@table @asis
-@item @code{C-u} (@code{universal-argument})
-@cindex numeric arguments
-@kindex C-u
-@findex universal-argument
-Starts (or multiplies by 4) the current numeric argument. @samp{C-u} is
-a good way to give a small numeric argument to cursor movement or
-scrolling commands; @samp{C-u C-v} scrolls the screen 4 lines, while
-@samp{C-u C-u C-n} moves the cursor down 16 lines.
-
-@item @code{M-1} (@code{add-digit-to-numeric-arg})
-@itemx @code{M-2} @dots{} @code{M-9}
-@kindex M-1 @dots{} M-9
-@findex add-digit-to-numeric-arg
-Adds the digit value of the invoking key to the current numeric
-argument. Once Info is reading a numeric argument, you may just type
-the digits of the argument, without the Meta prefix. For example, you
-might give @samp{C-l} a numeric argument of 32 by typing:
-
-@example
-@kbd{C-u 3 2 C-l}
-@end example
-or
-@example
-@kbd{M-3 2 C-l}
-@end example
-@end table
-
-@samp{C-g} is used to abort the reading of a multi-character key
-sequence, to cancel lengthy operations (such as multi-file searches) and
-to cancel reading input in the echo area.
-
-@table @asis
-@item @code{C-g} (@code{abort-key})
-@cindex cancelling typeahead
-@cindex cancelling the current operation
-@kindex C-g, in Info windows
-@findex abort-key
-Cancels current operation.
-@end table
-
-The @samp{q} command of Info simply quits running Info.
-
-@table @asis
-@item @code{q} (@code{quit})
-@cindex quitting
-@kindex q
-@findex quit
-Exits GNU Info.
-@end table
-
-If the operating system tells GNU Info that the screen is 60 lines tall,
-and it is actually only 40 lines tall, here is a way to tell Info that
-the operating system is correct.
-
-@table @asis
-@item @code{M-x set-screen-height}
-@findex set-screen-height
-@cindex screen, changing the height of
-Reads a height value in the echo area and sets the height of the
-displayed screen to that value.
-@end table
-
-Finally, Info provides a convenient way to display footnotes which might
-be associated with the current node that you are viewing:
-
-@table @asis
-@item @code{ESC C-f} (@code{show-footnotes})
-@kindex ESC C-f
-@findex show-footnotes
-@cindex footnotes, displaying
-Shows the footnotes (if any) associated with the current node in another
-window. You can have Info automatically display the footnotes
-associated with a node when the node is selected by setting the variable
-@code{automatic-footnotes}. @xref{Variables, , @code{automatic-footnotes}}.
-@end table
-
-@node Variables
-@chapter Manipulating Variables
-
-GNU Info contains several @dfn{variables} whose values are looked at by various
-Info commands. You can change the values of these variables, and thus
-change the behaviour of Info to more closely match your environment and
-info file reading manner.
-
-@table @asis
-@item @code{M-x set-variable}
-@cindex variables, setting
-@findex set-variable
-Reads the name of a variable, and the value for it, in the echo area and
-then sets the variable to that value. Completion is available when
-reading the variable name; often, completion is available when reading
-the value to give to the variable, but that depends on the variable
-itself. If a variable does @emph{not} supply multiple choices to
-complete over, it expects a numeric value.
-
-@item @code{M-x describe-variable}
-@cindex variables, describing
-@findex describe-variable
-Reads the name of a variable in the echo area and then displays a brief
-description of what the variable affects.
-@end table
-
-Here is a list of the variables that you can set in Info.
-
-@table @code
-@item automatic-footnotes
-@vindex automatic-footnotes
-When set to @code{On}, footnotes appear and disappear automatically.
-This variable is @code{On} by default. When a node is selected, a
-window containing the footnotes which appear in that node is created,
-and the footnotes are displayed within the new window. The window that
-Info creates to contain the footnotes is called @samp{*Footnotes*}. If
-a node is selected which contains no footnotes, and a @samp{*Footnotes*}
-window is on the screen, the @samp{*Footnotes*} window is deleted.
-Footnote windows created in this fashion are not automatically tiled so
-that they can use as little of the display as is possible.
-
-@item automatic-tiling
-@vindex automatic-tiling
-When set to @code{On}, creating or deleting a window resizes other
-windows. This variable is @code{Off} by default. Normally, typing
-@samp{C-x 2} divides the current window into two equal parts. When
-@code{automatic-tiling} is set to @code{On}, all of the windows are
-resized automatically, keeping an equal number of lines visible in each
-window. There are exceptions to the automatic tiling; specifically, the
-windows @samp{*Completions*} and @samp{*Footnotes*} are @emph{not}
-resized through automatic tiling; they remain their original size.
-
-@item visible-bell
-@vindex visible-bell
-When set to @code{On}, GNU Info attempts to flash the screen instead of
-ringing the bell. This variable is @code{Off} by default. Of course,
-Info can only flash the screen if the terminal allows it; in the case
-that the terminal does not allow it, the setting of this variable has no
-effect. However, you can make Info perform quietly by setting the
-@code{errors-ring-bell} variable to @code{Off}.
-
-@item errors-ring-bell
-@vindex errors-ring-bell
-When set to @code{On}, errors cause the bell to ring. The default
-setting of this variable is @code{On}.
-
-@item gc-compressed-files
-@vindex gc-compressed-files
-When set to @code{On}, Info garbage collects files which had to be
-uncompressed. The default value of this variable is @code{Off}.
-Whenever a node is visited in Info, the info file containing that node
-is read into core, and Info reads information about the tags and nodes
-contained in that file. Once the tags information is read by Info, it
-is never forgotten. However, the actual text of the nodes does not need
-to remain in core unless a particular info window needs it. For
-non-compressed files, the text of the nodes does not remain in core when
-it is no longer in use. But de-compressing a file can be a time
-consuming operation, and so Info tries hard not to do it twice.
-@code{gc-compressed-files} tells Info it is okay to garbage collect the
-text of the nodes of a file which was compressed on disk.
-
-@item show-index-match
-@vindex show-index-match
-When set to @code{On}, the portion of the matched search string is
-highlighted in the message which explains where the matched search
-string was found. The default value of this variable is @code{On}.
-When Info displays the location where an index match was found,
-(@pxref{Searching Commands, , @code{next-index-match}}), the portion of the
-string that you had typed is highlighted by displaying it in the inverse
-case from its surrounding characters.
-
-@item scroll-behaviour
-@vindex scroll-behaviour
-Controls what happens when forward scrolling is requested at the end of
-a node, or when backward scrolling is requested at the beginning of a
-node. The default value for this variable is @code{Continuous}. There
-are three possible values for this variable:
-
-@table @code
-@item Continuous
-Tries to get the first item in this node's menu, or failing that, the
-@samp{Next} node, or failing that, the @samp{Next} of the @samp{Up}.
-This behaviour is identical to using the @samp{]}
-(@code{global-next-node}) and @samp{[} (@code{global-prev-node})
-commands.
-
-@item Next Only
-Only tries to get the @samp{Next} node.
-
-@item Page Only
-Simply gives up, changing nothing. If @code{scroll-behaviour} is
-@code{Page Only}, no scrolling command can change the node that is being
-viewed.
-@end table
-
-@item scroll-step
-@vindex scroll-step
-The number of lines to scroll when the cursor moves out of the window.
-Scrolling happens automatically if the cursor has moved out of the
-visible portion of the node text when it is time to display. Usually
-the scrolling is done so as to put the cursor on the center line of the
-current window. However, if the variable @code{scroll-step} has a
-nonzero value, Info attempts to scroll the node text by that many lines;
-if that is enough to bring the cursor back into the window, that is what
-is done. The default value of this variable is 0, thus placing the
-cursor (and the text it is attached to) in the center of the window.
-Setting this variable to 1 causes a kind of "smooth scrolling" which
-some people prefer.
-
-@item ISO-Latin
-@cindex ISO Latin characters
-@vindex ISO-Latin
-When set to @code{On}, Info accepts and displays ISO Latin characters.
-By default, Info assumes an ASCII character set. @code{ISO-Latin} tells
-Info that it is running in an environment where the European standard
-character set is in use, and allows you to input such characters to
-Info, as well as display them.
-@end table
-
-@node Info for Sys Admins
-@chapter Info for System Administrators
-
-This text describes some common ways of setting up an Info heierarchy
-from scratch, and details the various options that are available when
-installing Info. This text is designed for the person who is installing
-GNU Info on the system; although users may find the information present
-in this section interesting, none of it is vital to understanding how to
-use GNU Info.
-
-@menu
-* Setting the INFOPATH:: Where are my Info files kept?
-* Editing the DIR node:: What goes in `DIR', and why?
-* Storing Info files:: Alternate formats allow flexibilty in setups.
-* Using `localdir':: Building DIR on the fly.
-* Example setups:: Some common ways to origanize Info files.
-@end menu
-
-@node Setting the INFOPATH
-@section Setting the INFOPATH
-Where are my Info files kept?
-
-@node Editing the DIR node
-@section Editing the DIR node
-What goes in `DIR', and why?
-
-@node Storing Info files
-@section Storing Info files
-Alternate formats allow flexibilty in setups.
-
-@node Using `localdir'
-@section Using `localdir'
-Building DIR on the fly.
-
-@node Example setups
-@section Example setups
-Some common ways to origanize Info files.
-
-@ifset STANDALONE
-@node GNU Info Global Index
-@appendix Global Index
-@printindex cp
-@end ifset
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info b/gnu/usr.bin/texinfo/info-files/texi.info
deleted file mode 100644
index cd677e8..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info
+++ /dev/null
@@ -1,297 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-Indirect:
-texi.info-1: 1096
-texi.info-2: 50585
-texi.info-3: 100344
-texi.info-4: 149083
-texi.info-5: 197497
-texi.info-6: 247275
-texi.info-7: 296490
-texi.info-8: 346023
-texi.info-9: 387598
-texi.info-10: 433598
-texi.info-11: 476101
-
-Tag Table:
-(Indirect)
-Node: Top1096
-Node: Copying21758
-Node: Overview23766
-Node: Using Texinfo25673
-Node: Info Files28165
-Node: Printed Books32225
-Node: Formatting Commands35110
-Node: Conventions38551
-Node: Comments40811
-Node: Minimum42233
-Node: Six Parts44386
-Node: Short Sample45896
-Node: Acknowledgements50027
-Node: Texinfo Mode50585
-Node: Texinfo Mode Overview51956
-Node: Emacs Editing52709
-Node: Inserting54839
-Node: Showing the Structure59115
-Node: Updating Nodes and Menus61634
-Node: Updating Commands62706
-Node: Updating Requirements68741
-Node: Other Updating Commands71042
-Node: Info Formatting74311
-Node: Printing75635
-Node: Texinfo Mode Summary77399
-Node: Beginning a File82167
-Node: Four Parts83056
-Node: Sample Beginning84502
-Node: Header86125
-Node: First Line87476
-Node: Start of Header88448
-Node: setfilename89163
-Node: settitle90763
-Node: setchapternewpage92646
-Node: paragraphindent95412
-Node: End of Header96877
-Node: Info Summary and Permissions97717
-Node: Titlepage & Copyright Page98738
-Node: titlepage100344
-Node: titlefont center sp102665
-Node: title subtitle author103895
-Node: Copyright & Permissions106171
-Node: end titlepage108176
-Node: headings on off109881
-Node: The Top Node111707
-Node: Title of Top Node112862
-Node: Master Menu Parts114099
-Node: Software Copying Permissions116150
-Node: Ending a File117318
-Node: Printing Indices & Menus118165
-Node: Contents120448
-Node: File End122790
-Node: Structuring123462
-Node: Tree Structuring125043
-Node: Structuring Command Types126467
-Node: makeinfo top128792
-Node: chapter129323
-Node: unnumbered & appendix130147
-Node: majorheading & chapheading130986
-Node: section131808
-Node: unnumberedsec appendixsec heading132573
-Node: subsection133560
-Node: unnumberedsubsec appendixsubsec subheading134131
-Node: subsubsection135083
-Node: Nodes136603
-Node: Two Paths137538
-Node: Node Menu Illustration138810
-Node: node142510
-Node: Node Names145206
-Node: Writing a Node146271
-Node: Node Line Tips148291
-Node: Node Line Requirements149083
-Node: First Node150691
-Node: makeinfo top command151811
-Node: Top Node Summary153591
-Node: makeinfo Pointer Creation154728
-Node: Menus155977
-Node: Menu Location157220
-Node: Writing a Menu158884
-Node: Menu Parts159850
-Node: Less Cluttered Menu Entry160848
-Node: Menu Example161473
-Node: Other Info Files162995
-Node: Cross References164855
-Node: References165734
-Node: Cross Reference Commands167458
-Node: Cross Reference Parts168509
-Node: xref171238
-Node: Reference Syntax172035
-Node: One Argument173679
-Node: Two Arguments174690
-Node: Three Arguments175804
-Node: Four and Five Arguments178189
-Node: Top Node Naming180602
-Node: ref181610
-Node: pxref182998
-Node: inforef185382
-Node: Marking Text186662
-Node: Indicating187283
-Node: Useful Highlighting189014
-Node: code190199
-Node: kbd193243
-Node: key194431
-Node: samp195985
-Node: var197497
-Node: file199287
-Node: dfn199893
-Node: cite200802
-Node: Emphasis201243
-Node: emph & strong202071
-Node: Smallcaps203041
-Node: Fonts204371
-Node: Quotations and Examples205427
-Node: Block Enclosing Commands207048
-Node: quotation209043
-Node: example210132
-Node: noindent212190
-Node: Lisp Example213657
-Node: smallexample & smalllisp214488
-Node: display216516
-Node: format217146
-Node: exdent217605
-Node: flushleft & flushright218684
-Node: cartouche219946
-Node: Lists and Tables220716
-Node: Introducing Lists221311
-Node: itemize222953
-Node: enumerate225104
-Node: Two-column Tables227594
-Node: table228287
-Node: ftable vtable230601
-Node: itemx231644
-Node: Indices232604
-Node: Index Entries233753
-Node: Predefined Indices234870
-Node: Indexing Commands235865
-Node: Combining Indices239873
-Node: syncodeindex241235
-Node: synindex242874
-Node: New Indices243398
-Node: Insertions245227
-Node: Braces Atsigns Periods245985
-Node: Inserting An Atsign247275
-Node: Inserting Braces247533
-Node: Controlling Spacing247932
-Node: dmn249490
-Node: Dots Bullets250719
-Node: dots251525
-Node: bullet251920
-Node: TeX and copyright252297
-Node: tex252861
-Node: copyright symbol253233
-Node: minus253479
-Node: Glyphs254350
-Node: Glyphs Summary255461
-Node: result255973
-Node: expansion256430
-Node: Print Glyph257352
-Node: Error Glyph258203
-Node: Equivalence259021
-Node: Point Glyph259683
-Node: Breaks261206
-Node: Break Commands262558
-Node: Line Breaks263246
-Node: w264248
-Node: sp265066
-Node: page265474
-Node: group265851
-Node: need267596
-Node: Definition Commands268326
-Node: Def Cmd Template269897
-Node: Optional Arguments272807
-Node: deffnx274396
-Node: Def Cmds in Detail275352
-Node: Functions Commands276462
-Node: Variables Commands279391
-Node: Typed Functions281340
-Node: Typed Variables284875
-Node: Abstract Objects286856
-Node: Data Types291752
-Node: Def Cmd Conventions293005
-Node: Sample Function Definition293566
-Node: Footnotes296490
-Node: Conditionals300343
-Node: Conditional Commands301099
-Node: Using Ordinary TeX Commands302508
-Node: set clear value303956
-Node: ifset ifclear304761
-Node: value307921
-Node: value Example309339
-Node: Format/Print Hardcopy310917
-Node: Use TeX312719
-Node: Shell Format & Print313310
-Node: Within Emacs317908
-Node: Texinfo Mode Printing318896
-Node: Compile-Command322646
-Node: Requirements Summary323554
-Node: Preparing for TeX324974
-Node: Overfull hboxes326989
-Node: smallbook328549
-Node: A4 Paper329782
-Node: Cropmarks and Magnification330484
-Node: Create an Info File332460
-Node: makeinfo advantages333764
-Node: Invoking makeinfo334651
-Node: makeinfo options335363
-Node: Pointer Validation340823
-Node: makeinfo in Emacs342207
-Node: texinfo-format commands344752
-Node: Batch Formatting346023
-Node: Tag and Split Files347269
-Node: Install an Info File350626
-Node: Directory file351276
-Node: New Info File352956
-Node: Other Info Directories354095
-Node: Command List355961
-Node: Tips387598
-Node: Sample Texinfo File399031
-Node: Sample Permissions401147
-Node: Inserting Permissions402188
-Node: ifinfo Permissions404469
-Node: Titlepage Permissions406088
-Node: Include Files407348
-Node: Using Include Files408434
-Node: texinfo-multiple-files-update410368
-Node: Include File Requirements412759
-Node: Sample Include File414004
-Node: Include Files Evolution415532
-Node: Headings417509
-Node: Headings Introduced418144
-Node: Heading Format420033
-Node: Heading Choice422489
-Node: Custom Headings423860
-Node: Catching Mistakes428069
-Node: makeinfo preferred429359
-Node: Debugging with Info430260
-Node: Debugging with TeX433598
-Node: Using texinfo-show-structure437940
-Node: Using occur441040
-Node: Running Info-Validate442579
-Node: Using Info-validate443639
-Node: Unsplit445454
-Node: Tagifying446502
-Node: Splitting447361
-Node: Refilling Paragraphs448981
-Node: Command Syntax450800
-Node: Obtaining TeX453731
-Node: New Features454842
-Node: New Texinfo Mode Commands455424
-Node: New Commands458894
-Node: Command and Variable Index463543
-Node: Concept Index476101
-
-End Tag Table
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-1 b/gnu/usr.bin/texinfo/info-files/texi.info-1
deleted file mode 100644
index 28b4895..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-1
+++ /dev/null
@@ -1,1131 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir)
-
-Texinfo
-*******
-
- Texinfo is a documentation system that uses a single source file to
-produce both on-line information and printed output.
-
- The first part of this master menu lists the major nodes in this Info
-document, including the @-command and concept indices. The rest of the
-menu lists all the lower level nodes in the document.
-
- This is Edition 2.18 of the Texinfo documentation, 26 March 1993,
-for Texinfo Version 2.
-
-* Menu:
-
-* Copying:: Your rights.
-* Overview:: Texinfo in brief.
-* Texinfo Mode:: How to use Texinfo mode.
-* Beginning a File:: What is at the beginning of a Texinfo file?
-* Ending a File:: What is at the end of a Texinfo file?
-* Structuring:: How to create chapters, sections, subsections,
- appendices, and other parts.
-* Nodes:: How to write nodes.
-* Menus:: How to write menus.
-* Cross References:: How to write cross references.
-* Marking Text:: How to mark words and phrases as code,
- keyboard input, meta-syntactic
- variables, and the like.
-* Quotations and Examples:: How to write quotations, examples, etc.
-* Lists and Tables:: How to write lists and tables.
-* Indices:: How to create indices.
-* Insertions:: How to insert @-signs, braces, etc.
-* Glyphs:: How to indicate results of evaluation,
- expansion of macros, errors, etc.
-* Breaks:: How to force and prevent line and page breaks.
-* Definition Commands:: How to describe functions and the like
- in a uniform manner.
-* Footnotes:: How to write footnotes.
-* Conditionals:: How to specify text for either TeX or Info.
-* Format/Print Hardcopy:: How to convert a Texinfo file to a file
- for printing and how to print that file.
-* Create an Info File:: Convert a Texinfo file into an Info file.
-* Install an Info File:: Make an Info file accessible to users.
-* Command List:: All the Texinfo @-commands.
-* Tips:: Hints on how to write a Texinfo document.
-* Sample Texinfo File:: A sample Texinfo file to look at.
-* Sample Permissions:: Tell readers they have the right to copy
- and distribute.
-* Include Files:: How to incorporate other Texinfo files.
-* Headings:: How to write page headings and footings.
-* Catching Mistakes:: How to find formatting mistakes.
-* Refilling Paragraphs:: All about paragraph refilling.
-* Command Syntax:: A description of @-Command syntax.
-* Obtaining TeX:: How to Obtain TeX.
-* New Features:: Texinfo second edition features.
-* Command and Variable Index:: A menu containing commands and variables.
-* Concept Index:: A menu covering many topics.
-
- -- The Detailed Node Listing --
-
-Overview of Texinfo
-
-* Using Texinfo:: Create a conventional printed book
- or an Info file.
-* Info Files:: What is an Info file?
-* Printed Books:: Characteristics of a printed book or manual.
-* Formatting Commands:: @-commands are used for formatting.
-* Conventions:: General rules for writing a Texinfo file.
-* Comments:: How to write comments and mark regions that
- the formatting commands will ignore.
-* Minimum:: What a Texinfo file must have.
-* Six Parts:: Usually, a Texinfo file has six parts.
-* Short Sample:: A short sample Texinfo file.
-* Acknowledgements::
-
-Using Texinfo Mode
-
-* Texinfo Mode Overview:: How Texinfo mode can help you.
-* Emacs Editing:: Texinfo mode adds to GNU Emacs' general
- purpose editing features.
-* Inserting:: How to insert frequently used @-commands.
-* Showing the Structure:: How to show the structure of a file.
-* Updating Nodes and Menus:: How to update or create new nodes and menus.
-* Info Formatting:: How to format for Info.
-* Printing:: How to format and print part or all of a file.
-* Texinfo Mode Summary:: Summary of all the Texinfo mode commands.
-
-Updating Nodes and Menus
-
-* Updating Commands:: Five major updating commands.
-* Updating Requirements:: How to structure a Texinfo file for
- using the updating command.
-* Other Updating Commands:: How to indent descriptions, insert
- missing nodes lines, and update
- nodes in sequence.
-
-Beginning a Texinfo File
-
-* Four Parts:: Four parts begin a Texinfo file.
-* Sample Beginning:: Here is a sample beginning for a Texinfo file.
-* Header:: The very beginning of a Texinfo file.
-* Info Summary and Permissions:: Summary and copying permissions for Info.
-* Titlepage & Copyright Page:: Creating the title and copyright pages.
-* The Top Node:: Creating the `Top' node and master menu.
-* Software Copying Permissions:: Ensure that you and others continue to
- have the right to use and share software.
-
-The Texinfo File Header
-
-* First Line:: The first line of a Texinfo file.
-* Start of Header:: Formatting a region requires this.
-* setfilename:: Tell Info the name of the Info file.
-* settitle:: Create a title for the printed work.
-* setchapternewpage:: Start chapters on right-hand pages.
-* paragraphindent:: An option to specify paragraph indentation.
-* End of Header:: Formatting a region requires this.
-
-The Title and Copyright Pages
-
-* titlepage:: Create a title for the printed document.
-* titlefont center sp:: The `@titlefont', `@center',
- and `@sp' commands.
-* title subtitle author:: The `@title', `@subtitle',
- and `@author' commands.
-* Copyright & Permissions:: How to write the copyright notice and
- include copying permissions.
-* end titlepage:: Turn on page headings after the title and
- copyright pages.
-* headings on off:: An option for turning headings on and off
- and double or single sided printing.
-
-The `Top' Node and Master Menu
-
-* Title of Top Node:: Sketch what the file is about.
-* Master Menu Parts:: A master menu has three or more parts.
-
-Ending a Texinfo File
-
-* Printing Indices & Menus:: How to print an index in hardcopy and
- generate index menus in Info.
-* Contents:: How to create a table of contents.
-* File End:: How to mark the end of a file.
-
-Chapter Structuring
-
-* Tree Structuring:: A manual is like an upside down tree ...
-* Structuring Command Types:: How to divide a manual into parts.
-* makeinfo top:: The `@top' command, part of the `Top' node.
-* chapter::
-* unnumbered & appendix::
-* majorheading & chapheading::
-* section::
-* unnumberedsec appendixsec heading::
-* subsection::
-* unnumberedsubsec appendixsubsec subheading::
-* subsubsection:: Commands for the lowest level sections.
-
-Nodes
-
-* Two Paths:: Different commands to structure
- Info output and printed output.
-* Node Menu Illustration:: A diagram, and sample nodes and menus.
-* node:: How to write a node, in detail.
-* makeinfo Pointer Creation:: How to create node pointers with `makeinfo'.
-
-The `@node' Command
-
-* Node Names:: How to choose node and pointer names.
-* Writing a Node:: How to write an `@node' line.
-* Node Line Tips:: Keep names short.
-* Node Line Requirements:: Keep names unique, without @-commands.
-* First Node:: How to write a `Top' node.
-* makeinfo top command:: How to use the `@top' command.
-* Top Node Summary:: Write a brief description for readers.
-
-Menus
-
-* Menu Location:: Put a menu in a short node.
-* Writing a Menu:: What is a menu?
-* Menu Parts:: A menu entry has three parts.
-* Less Cluttered Menu Entry:: Two part menu entry.
-* Menu Example:: Two and three part menu entries.
-* Other Info Files:: How to refer to a different Info file.
-
-Cross References
-
-* References:: What cross references are for.
-* Cross Reference Commands:: A summary of the different commands.
-* Cross Reference Parts:: A cross reference has several parts.
-* xref:: Begin a reference with `See' ...
-* Top Node Naming:: How to refer to the beginning of another file.
-* ref:: A reference for the last part of a sentence.
-* pxref:: How to write a parenthetical cross reference.
-* inforef:: How to refer to an Info-only file.
-
-`@xref'
-
-* Reference Syntax:: What a reference looks like and requires.
-* One Argument:: `@xref' with one argument.
-* Two Arguments:: `@xref' with two arguments.
-* Three Arguments:: `@xref' with three arguments.
-* Four and Five Arguments:: `@xref' with four and five arguments.
-
-Marking Words and Phrases
-
-* Indicating:: How to indicate definitions, files, etc.
-* Emphasis:: How to emphasize text.
-
-Indicating Definitions, Commands, etc.
-
-* Useful Highlighting:: Highlighting provides useful information.
-* code:: How to indicate code.
-* kbd:: How to show keyboard input.
-* key:: How to specify keys.
-* samp:: How to show a literal sequence of characters.
-* var:: How to indicate a metasyntactic variable.
-* file:: How to indicate the name of a file.
-* dfn:: How to specify a definition.
-* cite:: How to refer to a book that is not in Info.
-
-Emphasizing Text
-
-* emph & strong:: How to emphasize text in Texinfo.
-* Smallcaps:: How to use the small caps font.
-* Fonts:: Various font commands for printed output.
-
-Quotations and Examples
-
-* Block Enclosing Commands:: Use different constructs for
- different purposes.
-* quotation:: How to write a quotation.
-* example:: How to write an example in a fixed-width font.
-* noindent:: How to prevent paragraph indentation.
-* Lisp Example:: How to illustrate Lisp code.
-* smallexample & smalllisp:: Forms for the `@smallbook' option.
-* display:: How to write an example in the current font.
-* format:: How to write an example that does not narrow
- the margins.
-* exdent:: How to undo the indentation of a line.
-* flushleft & flushright:: How to push text flushleft or flushright.
-* cartouche:: How to draw cartouches around examples.
-
-Making Lists and Tables
-
-* Introducing Lists:: Texinfo formats lists for you.
-* itemize:: How to construct a simple list.
-* enumerate:: How to construct a numbered list.
-* Two-column Tables:: How to construct a two-column table.
-
-Making a Two-column Table
-
-* table:: How to construct a two-column table.
-* ftable vtable:: How to construct a two-column table
- with automatic indexing.
-* itemx:: How to put more entries in the first column.
-
-Creating Indices
-
-* Index Entries:: Choose different words for index entries.
-* Predefined Indices:: Use different indices for different kinds
- of entry.
-* Indexing Commands:: How to make an index entry.
-* Combining Indices:: How to combine indices.
-* New Indices:: How to define your own indices.
-
-Combining Indices
-
-* syncodeindex:: How to merge two indices, using `@code'
- font for the merged-from index.
-* synindex:: How to merge two indices, using the
- default font of the merged-to index.
-
-Special Insertions
-
-* Braces Atsigns Periods:: How to insert braces, `@' and periods.
-* dmn:: How to format a dimension.
-* Dots Bullets:: How to insert dots and bullets.
-* TeX and copyright:: How to insert the TeX logo
- and the copyright symbol.
-* minus:: How to insert a minus sign.
-
-Inserting `@', Braces, and Periods
-
-* Inserting An Atsign::
-* Inserting Braces:: How to insert `{' and `}'
-* Controlling Spacing:: How to insert the right amount of space
- after punctuation within a sentence.
-
-Inserting Ellipsis, Dots, and Bullets
-
-* dots:: How to insert dots ...
-* bullet:: How to insert a bullet.
-
-Inserting TeX and the Copyright Symbol
-
-* tex:: How to insert the TeX logo.
-* copyright symbol:: How to use `@copyright'{}.
-
-Glyphs for Examples
-
-* Glyphs Summary::
-* result:: How to show the result of expression.
-* expansion:: How to indicate an expansion.
-* Print Glyph:: How to indicate printed output.
-* Error Glyph:: How to indicate an error message.
-* Equivalence:: How to indicate equivalence.
-* Point Glyph:: How to indicate the location of point.
-
-Making and Preventing Breaks
-
-* Break Commands:: Cause and prevent splits.
-* Line Breaks:: How to force a single line to use two lines.
-* w:: How to prevent unwanted line breaks.
-* sp:: How to insert blank lines.
-* page:: How to force the start of a new page.
-* group:: How to prevent unwanted page breaks.
-* need:: Another way to prevent unwanted page breaks.
-
-Definition Commands
-
-* Def Cmd Template:: How to structure a description using a
- definition command.
-* Optional Arguments:: How to handle optional and repeated arguments.
-* deffnx:: How to group two or more `first' lines.
-* Def Cmds in Detail:: All the definition commands.
-* Def Cmd Conventions:: Conventions for writing definitions.
-* Sample Function Definition::
-
-The Definition Commands
-
-* Functions Commands:: Commands for functions and similar entities.
-* Variables Commands:: Commands for variables and similar entities.
-* Typed Functions:: Commands for functions in typed languages.
-* Typed Variables:: Commands for variables in typed languages.
-* Abstract Objects:: Commands for object-oriented programming.
-* Data Types:: The definition command for data types.
-
-Conditionally Visible Text
-
-* Conditional Commands:: How to specify text for Info or TeX.
-* Using Ordinary TeX Commands:: You can use any and all TeX commands.
-* set clear value:: How to designate which text to format (for
- both Info and TeX); and how to set a
- flag to a string that you can insert.
-
-`@set', `@clear', and `@value'
-
-* ifset ifclear:: Format a region if a flag is set.
-* value:: Replace a flag with a string.
-* value Example:: An easy way to update edition information.
-
-Format and Print Hardcopy
-
-* Use TeX:: Use TeX to format for hardcopy.
-* Shell Format & Print:: How to format and print a hardcopy manual
- with shell commands.
-* Within Emacs:: How to format and print from an Emacs shell.
-* Texinfo Mode Printing:: How to format and print in Texinfo mode.
-* Compile-Command:: How to print using Emacs's compile command.
-* Requirements Summary:: TeX formatting requirements summary.
-* Preparing for TeX:: What you need to do to use TeX.
-* Overfull hboxes:: What are and what to do with overfull hboxes.
-* smallbook:: How to print small format books and manuals.
-* A4 Paper:: How to print on European A4 paper.
-* Cropmarks and Magnification:: How to print marks to indicate the size
- of pages and how to print scaled up output.
-
-Creating an Info File
-
-* makeinfo advantages:: `makeinfo' provides better error checking.
-* Invoking makeinfo:: How to run `makeinfo' from a shell.
-* makeinfo options:: Specify fill-column and other options.
-* Pointer Validation:: How to check that pointers point somewhere.
-* makeinfo in Emacs:: How to run `makeinfo' from Emacs.
-* texinfo-format commands:: Two Info formatting commands written
- in Emacs Lisp are an alternative
- to `makeinfo'.
-* Batch Formatting:: How to format for Info in Emacs Batch mode.
-* Tag and Split Files:: How tagged and split files help Info
- to run better.
-
-Installing an Info File
-
-* Directory file:: The top level menu for all Info files.
-* New Info File:: Listing a new info file.
-* Other Info Directories:: How to specify Info files that are
- located in other directories.
-
-Sample Permissions
-
-* Inserting Permissions:: How to put permissions in your document.
-* ifinfo Permissions:: Sample `ifinfo' copying permissions.
-* Titlepage Permissions:: Sample Titlepage copying permissions.
-
-Include Files
-
-* Using Include Files:: How to use the `@include' command.
-* texinfo-multiple-files-update:: How to create and update nodes and
- menus when using included files.
-* Include File Requirements:: What `texinfo-multiple-files-update' expects.
-* Sample Include File:: A sample outer file with included files
- within it; and a sample included file.
-* Include Files Evolution:: How use of the `@include' command
- has changed over time.
-
-Page Headings
-
-* Headings Introduced:: Conventions for using page headings.
-* Heading Format:: Standard page heading formats.
-* Heading Choice:: How to specify the type of page heading.
-* Custom Headings:: How to create your own headings and footings.
-
-Formatting Mistakes
-
-* makeinfo preferred:: `makeinfo' finds errors.
-* Debugging with Info:: How to catch errors with Info formatting.
-* Debugging with TeX:: How to catch errors with TeX formatting.
-* Using texinfo-show-structure:: How to use `texinfo-show-structure'.
-* Using occur:: How to list all lines containing a pattern.
-* Running Info-Validate:: How to find badly referenced nodes.
-
-Finding Badly Referenced Nodes
-
-* Using Info-validate:: How to run `Info-validate'.
-* Unsplit:: How to create an unsplit file.
-* Tagifying:: How to tagify a file.
-* Splitting:: How to split a file manually.
-
-Second Edition Features
-
-* New Texinfo Mode Commands:: The updating commands are especially useful.
-* New Commands:: Many newly described @-commands.
-
-
-File: texi.info, Node: Copying, Next: Overview, Prev: Top, Up: Top
-
-Texinfo Copying Conditions
-**************************
-
- The programs currently being distributed that relate to Texinfo
-include portions of GNU Emacs, plus other separate programs (including
-`makeinfo', `info', `texindex', and `texinfo.tex'). These programs are
-"free"; this means that everyone is free to use them and free to
-redistribute them on a free basis. The Texinfo-related programs are
-not in the public domain; they are copyrighted and there are
-restrictions on their distribution, but these restrictions are designed
-to permit everything that a good cooperating citizen would want to do.
-What is not allowed is to try to prevent others from further sharing
-any version of these programs that they might get from you.
-
- Specifically, we want to make sure that you have the right to give
-away copies of the programs that relate to Texinfo, that you receive
-source code or else can get it if you want it, that you can change these
-programs or use pieces of them in new free programs, and that you know
-you can do these things.
-
- To make sure that everyone has such rights, we have to forbid you to
-deprive anyone else of these rights. For example, if you distribute
-copies of the Texinfo related programs, you must give the recipients all
-the rights that you have. You must make sure that they, too, receive or
-can get the source code. And you must tell them their rights.
-
- Also, for our own protection, we must make certain that everyone
-finds out that there is no warranty for the programs that relate to
-Texinfo. If these programs are modified by someone else and passed on,
-we want their recipients to know that what they have is not what we
-distributed, so that any problems introduced by others will not reflect
-on our reputation.
-
- The precise conditions of the licenses for the programs currently
-being distributed that relate to Texinfo are found in the General Public
-Licenses that accompany them.
-
-
-File: texi.info, Node: Overview, Next: Texinfo Mode, Prev: Copying, Up: Top
-
-Overview of Texinfo
-*******************
-
- "Texinfo"(1) is a documentation system that uses a single source
-file to produce both on-line information and printed output. This
-means that instead of writing two different documents, one for the
-on-line help or other on-line information and the other for a typeset
-manual or other printed work, you need write only one document. When
-the work is revised, you need revise only one document. (You can read
-the on-line information, known as an "Info file", with an Info
-documentation-reading program.)
-
-* Menu:
-
-* Using Texinfo:: Create a conventional printed book
- or an Info file.
-* Info Files:: What is an Info file?
-* Printed Books:: Characteristics of a printed book or manual.
-* Formatting Commands:: @-commands are used for formatting.
-* Conventions:: General rules for writing a Texinfo file.
-* Comments:: How to write comments and mark regions that
- the formatting commands will ignore.
-* Minimum:: What a Texinfo file must have.
-* Six Parts:: Usually, a Texinfo file has six parts.
-* Short Sample:: A short sample Texinfo file.
-* Acknowledgements::
-
- ---------- Footnotes ----------
-
- (1) Note that the first syllable of "Texinfo" is pronounced like
-"speck", not "hex". This odd pronunciation is derived from, but is not
-the same as, the pronunciation of TeX. In the word TeX, the `X' is
-actually the Greek letter "chi" rather than the English letter "ex".
-Pronounce TeX as if the `X' were the last sound in the name `Bach'; but
-pronounce Texinfo as if the `x' were a `k'. Spell "Texinfo" with a
-capital "T" and write the other letters in lower case.
-
-
-File: texi.info, Node: Using Texinfo, Next: Info Files, Up: Overview
-
-Using Texinfo
-=============
-
- Using Texinfo, you can create a printed document with the normal
-features of a book, including chapters, sections, cross references, and
-indices. From the same Texinfo source file, you can create a
-menu-driven, on-line Info file with nodes, menus, cross references, and
-indices. You can, if you wish, make the chapters and sections of the
-printed document correspond to the nodes of the on-line information;
-and you use the same cross references and indices for both the Info
-file and the printed work. `The GNU Emacs Manual' is a good example of
-a Texinfo file, as is this manual.
-
- To make a printed document, you process a Texinfo source file with
-the TeX typesetting program. This creates a DVI file that you can
-typeset and print as a book or report. (Note that the Texinfo language
-is completely different from TeX's usual language, PlainTeX, which
-Texinfo replaces.) If you do not have TeX, but do have `troff' or
-`nroff', you can use the `texi2roff' program instead.
-
- To make an Info file, you process a Texinfo source file with the
-`makeinfo' utility or Emacs's `texinfo-format-buffer' command; this
-creates an Info file that you can install on-line.
-
- TeX and `texi2roff' work with many types of printer; similarly, Info
-works with almost every type of computer terminal. This power makes
-Texinfo a general purpose system, but brings with it a constraint,
-which is that a Texinfo file may contain only the customary
-"typewriter" characters (letters, numbers, spaces, and punctuation
-marks) but no special graphics.
-
- A Texinfo file is a plain ASCII file containing text and
-"@-commands" (words preceded by an `@') that tell the typesetting and
-formatting programs what to do. You may edit a Texinfo file with any
-text editor; but it is especially convenient to use GNU Emacs since
-that editor has a special mode, called Texinfo mode, that provides
-various Texinfo-related features. (*Note Texinfo Mode::.)
-
- Before writing a Texinfo source file, you should become familiar with
-the Info documentation reading program and learn about nodes, menus,
-cross references, and the rest. (*note info: (info)Top, for more
-information.)
-
- You can use Texinfo to create both on-line help and printed manuals;
-moreover, Texinfo is freely redistributable. For these reasons, Texinfo
-is the format in which documentation for GNU utilities and libraries is
-written.
-
-
-File: texi.info, Node: Info Files, Next: Printed Books, Prev: Using Texinfo, Up: Overview
-
-Info files
-==========
-
- An Info file is a Texinfo file formatted so that the Info
-documentation reading program can operate on it. (`makeinfo' and
-`texinfo-format-buffer' are two commands that convert a Texinfo file
-into an Info file.)
-
- Info files are divided into pieces called "nodes", each of which
-contains the discussion of one topic. Each node has a name, and
-contains both text for the user to read and pointers to other nodes,
-which are identified by their names. The Info program displays one node
-at a time, and provides commands with which the user can move to other
-related nodes.
-
- *note info: (info)Top, for more information about using Info.
-
- Each node of an Info file may have any number of child nodes that
-describe subtopics of the node's topic. The names of child nodes are
-listed in a "menu" within the parent node; this allows you to use
-certain Info commands to move to one of the child nodes. Generally, an
-Info file is organized like a book. If a node is at the logical level
-of a chapter, its child nodes are at the level of sections; likewise,
-the child nodes of sections are at the level of subsections.
-
- All the children of any one parent are linked together in a
-bidirectional chain of `Next' and `Previous' pointers. The `Next'
-pointer provides a link to the next section, and the `Previous' pointer
-provides a link to the previous section. This means that all the nodes
-that are at the level of sections within a chapter are linked together.
-Normally the order in this chain is the same as the order of the
-children in the parent's menu. Each child node records the parent node
-name as its `Up' pointer. The last child has no `Next' pointer, and the
-first child has the parent both as its `Previous' and as its `Up'
-pointer.(1)
-
- The book-like structuring of an Info file into nodes that correspond
-to chapters, sections, and the like is a matter of convention, not a
-requirement. The `Up', `Previous', and `Next' pointers of a node can
-point to any other nodes, and a menu can contain any other nodes.
-Thus, the node structure can be any directed graph. But it is usually
-more comprehensible to follow a structure that corresponds to the
-structure of chapters and sections in a printed book or report.
-
- In addition to menus and to `Next', `Previous', and `Up' pointers,
-Info provides pointers of another kind, called references, that can be
-sprinkled throughout the text. This is usually the best way to
-represent links that do not fit a hierarchical structure.
-
- Usually, you will design a document so that its nodes match the
-structure of chapters and sections in the printed output. But there
-are times when this is not right for the material being discussed.
-Therefore, Texinfo uses separate commands to specify the node structure
-for the Info file and the section structure for the printed output.
-
- Generally, you enter an Info file through a node that by convention
-is called `Top'. This node normally contains just a brief summary of
-the file's purpose, and a large menu through which the rest of the file
-is reached. From this node, you can either traverse the file
-systematically by going from node to node, or you can go to a specific
-node listed in the main menu, or you can search the index menus and
-then go directly to the node that has the information you want.
-
- If you want to read through an Info file in sequence, as if it were a
-printed manual, you can get the whole file with the advanced Info
-command `g* RET'. (*note Advanced Info commands: (info)Expert.)
-
- The `dir' file in the `info' directory serves as the departure point
-for the whole Info system. From it, you can reach the `Top' nodes of
-each of the documents in a complete Info system.
-
- ---------- Footnotes ----------
-
- (1) In some documents, the first child has no `Previous' pointer.
-Occasionally, the last child has the node name of the next following
-higher level node as its `Next' pointer.
-
-
-File: texi.info, Node: Printed Books, Next: Formatting Commands, Prev: Info Files, Up: Overview
-
-Printed Books
-=============
-
- A Texinfo file can be formatted and typeset as a printed book or
-manual. To do this, you need TeX, a powerful, sophisticated typesetting
-program written by Donald Knuth.(1)
-
- A Texinfo-based book is similar to any other typeset, printed work:
-it can have a title page, copyright page, table of contents, and
-preface, as well as chapters, numbered or unnumbered sections and
-subsections, page headers, cross references, footnotes, and indices.
-
- You can use Texinfo to write a book without ever having the intention
-of converting it into on-line information. You can use Texinfo for
-writing a printed novel, and even to write a printed memo, although
-this latter application is not recommended since electronic mail is so
-much easier.
-
- TeX is a general purpose typesetting program. Texinfo provides a
-file called `texinfo.tex' that contains information (definitions or
-"macros") that TeX uses when it typesets a Texinfo file.
-(`texinfo.tex' tells TeX how to convert the Texinfo @-commands to TeX
-commands, which TeX can then process to create the typeset document.)
-`texinfo.tex' contains the specifications for printing a document.
-
- Most often, documents are printed on 8.5 inch by 11 inch pages
-(216mm by 280mm; this is the default size), but you can also print for
-7 inch by 9.25 inch pages (178mm by 235mm; the `@smallbook' size) or on
-European A4 size paper (`@afourpaper'). (*Note Printing "Small" Books:
-smallbook. Also, see *Note Printing on A4 Paper: A4 Paper.)
-
- By changing the parameters in `texinfo.tex', you can change the size
-of the printed document. In addition, you can change the style in
-which the printed document is formatted; for example, you can change the
-sizes and fonts used, the amount of indentation for each paragraph, the
-degree to which words are hyphenated, and the like. By changing the
-specifications, you can make a book look dignified, old and serious, or
-light-hearted, young and cheery.
-
- TeX is freely distributable. It is written in a dialect of Pascal
-called WEB and can be compiled either in Pascal or (by using a
-conversion program that comes with the TeX distribution) in C. (*Note
-TeX Mode: (emacs)TeX Mode, for information about TeX.)
-
- TeX is very powerful and has a great many features. Because a
-Texinfo file must be able to present information both on a
-character-only terminal in Info form and in a typeset book, the
-formatting commands that Texinfo supports are necessarily limited.
-
- *Note How to Obtain TeX: Obtaining TeX.
-
- ---------- Footnotes ----------
-
- (1) You can also use the `texi2roff' program if you do not have
-TeX; since Texinfo is designed for use with TeX, `texi2roff' is not
-described here. `texi2roff' is part of the standard GNU distribution.
-
-
-File: texi.info, Node: Formatting Commands, Next: Conventions, Prev: Printed Books, Up: Overview
-
-@-commands
-==========
-
- In a Texinfo file, the commands that tell TeX how to typeset the
-printed manual and tell `makeinfo' and `texinfo-format-buffer' how to
-create an Info file are preceded by `@'; they are called "@-commands".
-For example, `@node' is the command to indicate a node and `@chapter'
-is the command to indicate the start of a chapter.
-
- *Please note:* All the @-commands, with the exception of the
- `@TeX{}' command, must be written entirely in lower case.
-
- The Texinfo @-commands are a strictly limited set of constructs. The
-strict limits make it possible for Texinfo files to be understood both
-by TeX and by the code that converts them into Info files. You can
-display Info files on any terminal that displays alphabetic and numeric
-characters. Similarly, you can print the output generated by TeX on a
-wide variety of printers.
-
- Depending on what they do or what arguments(1) they take, you need
-to write @-commands on lines of their own or as part of sentences:
-
- * Write a command such as `@noindent' at the beginning of a line as
- the only text on the line. (`@noindent' prevents the beginning of
- the next line from being indented as the beginning of a paragraph.)
-
- * Write a command such as `@chapter' at the beginning of a line
- followed by the command's arguments, in this case the chapter
- title, on the rest of the line. (`@chapter' creates chapter
- titles.)
-
- * Write a command such as `@dots{}' wherever you wish but usually
- within a sentence. (`@dots{}' creates dots ...)
-
- * Write a command such as `@code{SAMPLE-CODE}' wherever you wish
- (but usually within a sentence) with its argument, SAMPLE-CODE in
- this example, between the braces. (`@code' marks text as being
- code.)
-
- * Write a command such as `@example' at the beginning of a line of
- its own; write the body-text on following lines; and write the
- matching `@end' command, `@end example' in this case, at the
- beginning of a line of its own after the body-text. (`@example'
- ... `@end example' indents and typesets body-text as an example.)
-
-As a general rule, a command requires braces if it mingles among other
-text; but it does not need braces if it starts a line of its own. The
-non-alphabetic commands, such as `@:', are exceptions to the rule; they
-do not need braces.
-
- As you gain experience with Texinfo, you will rapidly learn how to
-write the different commands: the different ways to write commands make
-it easier to write and read Texinfo files than if all commands followed
-exactly the same syntax. (For details about @-command syntax, see
-*Note @-Command Syntax: Command Syntax.)
-
- ---------- Footnotes ----------
-
- (1) The word "argument" comes from the way it is used in
-mathematics and does not refer to a disputation between two people; it
-refers to the information presented to the command. According to the
-`Oxford English Dictionary', the word derives from the Latin for "to
-make clear, prove"; thus it came to mean `the evidence offered as
-proof', which is to say, `the information offered', which led to its
-mathematical meaning. In its other thread of derivation, the word came
-to mean `to assert in a manner against which others may make counter
-assertions', which led to the meaning of `argument' as a disputation.
-
-
-File: texi.info, Node: Conventions, Next: Comments, Prev: Formatting Commands, Up: Overview
-
-General Syntactic Conventions
-=============================
-
- All ASCII printing characters except `@', `{' and `}' can appear in
-a Texinfo file and stand for themselves. `@' is the escape character
-which introduces commands. `{' and `}' should be used only to surround
-arguments to certain commands. To put one of these special characters
-into the document, put an `@' character in front of it, like this:
-`@@', `@{', and `@}'.
-
- It is customary in TeX to use doubled single-quote characters to
-begin and end quotations: ` ` and ' ' (but without a space between the
-two single-quote characters). This convention should be followed in
-Texinfo files. TeX converts doubled single-quote characters to left-
-and right-hand doubled quotation marks and Info converts doubled
-single-quote characters to ASCII double-quotes: ` ` and ' ' to " .
-
- Use three hyphens in a row, `---', for a dash--like this. In TeX, a
-single or even a double hyphen produces a printed dash that is shorter
-than the usual typeset dash. Info reduces three hyphens to two for
-display on the screen.
-
- To prevent a paragraph from being indented in the printed manual, put
-the command `@noindent' on a line by itself before the paragraph.
-
- If you mark off a region of the Texinfo file with the `@iftex' and
-`@end iftex' commands, that region will appear only in the printed
-copy; in that region, you can use certain commands borrowed from
-PlainTeX that you cannot use in Info. Likewise, if you mark off a
-region with the `@ifinfo' and `@end ifinfo' commands, that region will
-appear only in the Info file; in that region, you can use Info commands
-that you cannot use in TeX. (*Note Conditionals::.)
-
- *Caution:* Do not use tabs in a Texinfo file! TeX uses
- variable-width fonts, which means that it cannot predefine a tab
- to work in all circumstances. Consequently, TeX treats tabs like
- single spaces, and that is not what they look like.
-
- To avoid this problem, Texinfo mode causes GNU Emacs to insert
- multiple spaces when you press the TAB key.
-
- Also, you can run `untabify' in Emacs to convert tabs in a region
- to multiple spaces.
-
-
-File: texi.info, Node: Comments, Next: Minimum, Prev: Conventions, Up: Overview
-
-Comments
-========
-
- You can write comments in a Texinfo file that will not appear in
-either the Info file or the printed manual by using the `@comment'
-command (which may be abbreviated to `@c'). Such comments are for the
-person who reads the Texinfo file. All the text on a line that follows
-either `@comment' or `@c' is a comment; the rest of the line does not
-appear in either the Info file or the printed manual. (Often, you can
-write the `@comment' or `@c' in the middle of a line, and only the text
-that follows after the `@comment' or `@c' command does not appear; but
-some commands, such as `@settitle' and `@setfilename', work on a whole
-line. You cannot use `@comment' or `@c' in a line beginning with such
-a command.)
-
- You can write long stretches of text that will not appear in either
-the Info file or the printed manual by using the `@ignore' and `@end
-ignore' commands. Write each of these commands on a line of its own,
-starting each command at the beginning of the line. Text between these
-two commands does not appear in the processed output. You can use
-`@ignore' and `@end ignore' for writing comments. Often, `@ignore' and
-`@end ignore' is used to enclose a part of the copying permissions that
-applies to the Texinfo source file of a document, but not to the Info
-or printed version of the document.
-
-
-File: texi.info, Node: Minimum, Next: Six Parts, Prev: Comments, Up: Overview
-
-What a Texinfo File Must Have
-=============================
-
- By convention, the names of Texinfo files end with one of the
-extensions `.texinfo', `.texi', or `.tex'. The longer extension is
-preferred since it describes more clearly to a human reader the nature
-of the file. The shorter extensions are for operating systems that
-cannot handle long file names.
-
- In order to be made into a printed manual and an Info file, a
-Texinfo file *must* begin with lines like this:
-
- \input texinfo
- @setfilename INFO-FILE-NAME
- @settitle NAME-OF-MANUAL
-
-The contents of the file follow this beginning, and then you *must* end
-a Texinfo file with a line like this:
-
- @bye
-
-The `\input texinfo' line tells TeX to use the `texinfo.tex' file,
-which tells TeX how to translate the Texinfo @-commands into TeX
-typesetting commands. (Note the use of the backslash, `\'; this is
-correct for TeX.) The `@setfilename' line provides a name for the Info
-file and the `@settitle' line specifies a title for the page headers (or
-footers) of the printed manual.
-
- The `@bye' line at the end of the file on a line of its own tells
-the formatters that the file is ended and to stop formatting.
-
- Usually, you will not use quite such a spare format, but will include
-mode setting and start-of-header and end-of-header lines at the
-beginning of a Texinfo file, like this:
-
- \input texinfo @c -*-texinfo-*-
- @c %**start of header
- @setfilename INFO-FILE-NAME
- @settitle NAME-OF-MANUAL
- @c %**end of header
-
-In the first line, `-*-texinfo-*-' causes Emacs to switch into Texinfo
-mode when you edit the file.
-
- The `@c' lines which surround the `@setfilename' and `@settitle'
-lines are optional, but you need them in order to run TeX or Info on
-just part of the file. (*Note Start of Header::, for more information.)
-
- Furthermore, you will usually provide a Texinfo file with a title
-page, indices, and the like. But the minimum, which can be useful for
-short documents, is just the three lines at the beginning and the one
-line at the end.
-
-
-File: texi.info, Node: Six Parts, Next: Short Sample, Prev: Minimum, Up: Overview
-
-Six Parts of a Texinfo File
-===========================
-
- Generally, a Texinfo file contains more than the minimal beginning
-and end--it usually contains six parts:
-
-1. Header
- The "Header" names the file, tells TeX which definitions' file to
- use, and performs other "housekeeping" tasks.
-
-2. Summary Description and Copyright
- The "Summary Description and Copyright" segment describes the
- document and contains the copyright notice and copying permissions
- for the Info file. The segment must be enclosed between `@ifinfo'
- and `@end ifinfo' commands so that the formatters place it only in
- the Info file.
-
-3. Title and Copyright
- The "Title and Copyright" segment contains the title and copyright
- pages and copying permissions for the printed manual. The segment
- must be enclosed between `@titlepage' and `@end titlepage'
- commands. The title and copyright page appear only in the printed
- manual.
-
-4. `Top' Node and Master Menu
- The "Master Menu" contains a complete menu of all the nodes in the
- whole Info file. It appears only in the Info file, in the `Top'
- node.
-
-5. Body
- The "Body" of the document may be structured like a traditional
- book or encyclopedia or it may be free form.
-
-6. End
- The "End" contains commands for printing indices and generating
- the table of contents, and the `@bye' command on a line of its own.
-
-
-File: texi.info, Node: Short Sample, Next: Acknowledgements, Prev: Six Parts, Up: Overview
-
-A Short Sample Texinfo File
-===========================
-
- Here is a complete but very short Texinfo file, in 6 parts. The
-first three parts of the file, from `\input texinfo' through to `@end
-titlepage', look more intimidating than they are. Most of the material
-is standard boilerplate; when you write a manual, simply insert the
-names for your own manual in this segment. (*Note Beginning a File::.)
-
-In the following, the sample text is *indented*; comments on it are
-not. The complete file, without any comments, is shown in *Note Sample
-Texinfo File::.
-
-Part 1: Header
---------------
-
-The header does not appear in either the Info file or the
-printed output. It sets various parameters, including the
-name of the Info file and the title used in the header.
-
- \input texinfo @c -*-texinfo-*-
- @c %**start of header
- @setfilename sample.info
- @settitle Sample Document
- @c %**end of header
-
- @setchapternewpage odd
-
-Part 2: Summary Description and Copyright
------------------------------------------
-
-The summary description and copyright segment does not
-appear in the printed document.
-
- @ifinfo
- This is a short example of a complete Texinfo file.
-
- Copyright @copyright{} 1990 Free Software Foundation, Inc.
- @end ifinfo
-
-Part 3: Titlepage and Copyright
--------------------------------
-
-The titlepage segment does not appear in the Info file.
-
- @titlepage
- @sp 10
- @comment The title is printed in a large font.
- @center @titlefont{Sample Title}
-
- @c The following two commands start the copyright page.
- @page
- @vskip 0pt plus 1filll
- Copyright @copyright{} 1990 Free Software Foundation, Inc.
- @end titlepage
-
-Part 4: `Top' Node and Master Menu
-----------------------------------
-
-The `Top' node contains the master menu for the Info file.
-Since a printed manual uses a table of contents rather than
-a menu, the master menu appears only in the Info file.
-
- @node Top, First Chapter, (dir), (dir)
- @comment node-name, next, previous, up
-
- @menu
- * First Chapter:: The first chapter is the
- only chapter in this sample.
- * Concept Index:: This index has two entries.
- @end menu
-
-Part 5: The Body of the Document
----------------------------------
-
-The body segment contains all the text of the document, but not the
-indices or table of contents. This example illustrates a node and a
-chapter containing an enumerated list.
-
- @node First Chapter, Concept Index, Top, Top
- @comment node-name, next, previous, up
- @chapter First Chapter
- @cindex Sample index entry
-
- This is the contents of the first chapter.
- @cindex Another sample index entry
-
- Here is a numbered list.
-
- @enumerate
- @item
- This is the first item.
-
- @item
- This is the second item.
- @end enumerate
-
- The @code{makeinfo} and @code{texinfo-format-buffer}
- commands transform a Texinfo file such as this into
- an Info file; and @TeX{} typesets it for a printed
- manual.
-
-Part 6: The End of the Document
--------------------------------
-
-The end segment contains commands both for generating an index in a node
-and unnumbered chapter of its own and for generating the table of
-contents; and it contains the `@bye' command that marks the end of the
-document.
-
- @node Concept Index, , First Chapter, Top
- @comment node-name, next, previous, up
- @unnumbered Concept Index
-
- @printindex cp
-
- @contents
- @bye
-
-The Results
------------
-
- Here is what the contents of the first chapter of the sample look
-like:
-
- This is the contents of the first chapter.
-
- Here is a numbered list.
-
- 1. This is the first item.
-
- 2. This is the second item.
-
- The `makeinfo' and `texinfo-format-buffer' commands transform a
- Texinfo file such as this into an Info file; and TeX typesets it
- for a printed manual.
-
-
-File: texi.info, Node: Acknowledgements, Prev: Short Sample, Up: Overview
-
-Acknowledgements
-================
-
- Richard M. Stallman wrote Edition 1.0 of this manual.
-Robert J. Chassell revised and extended it, starting with Edition 1.1.
-
- Our thanks go out to all who helped improve this work, particularly
-to Francois Pinard and David D. Zuhn, who tirelessly recorded and
-reported mistakes and obscurities; our special thanks go to
-Melissa Weisshaus for her frequent and often tedious reviews of nearly
-similar editions. Our mistakes are our own.
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-10 b/gnu/usr.bin/texinfo/info-files/texi.info-10
deleted file mode 100644
index f28ff2e..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-10
+++ /dev/null
@@ -1,1165 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Debugging with TeX, Next: Using texinfo-show-structure, Prev: Debugging with Info, Up: Catching Mistakes
-
-Catching Errors with TeX Formatting
-===================================
-
- You can also catch mistakes when you format a file with TeX.
-
- Usually, you do this after you have run `texinfo-format-buffer' (or,
-better, `makeinfo-buffer') on the same file, because
-`texinfo-format-buffer' sometimes displays error messages that make
-more sense than TeX. (*Note Debugging with Info::, for more
-information.)
-
- For example, TeX was run on a Texinfo file, part of which is shown
-here:
-
- ---------- Buffer: texinfo.texi ----------
- name of the texinfo file as an extension. The
- @samp{??} are `wildcards' that cause the shell to
- substitute all the raw index files. (@xref{sorting
- indices, for more information about sorting
- indices.)@refill
- ---------- Buffer: texinfo.texi ----------
-
-(The cross reference lacks a closing brace.) TeX produced the following
-output, after which it stopped:
-
- ---------- Buffer: *texinfo-tex-shell* ----------
- Runaway argument?
- {sorting indices, for more information about sorting
- indices.) @refill @ETC.
- ! Paragraph ended before @xref was complete.
- <to be read again>
- @par
- l.27
-
- ?
- ---------- Buffer: *texinfo-tex-shell* ----------
-
- In this case, TeX produced an accurate and understandable error
-message:
-
- Paragraph ended before @xref was complete.
-
-`@par' is an internal TeX command of no relevance to Texinfo. `l.27'
-means that TeX detected the problem on line 27 of the Texinfo file.
-The `?' is the prompt TeX uses in this circumstance.
-
- Unfortunately, TeX is not always so helpful, and sometimes you must
-truly be a Sherlock Holmes to discover what went wrong.
-
- In any case, if you run into a problem like this, you can do one of
-three things.
-
- 1. You can tell TeX to continue running and ignore just this error by
- typing RET at the `?' prompt.
-
- 2. You can tell TeX to continue running and to ignore all errors as
- best it can by typing `r RET' at the `?' prompt.
-
- This is often the best thing to do. However, beware: the one error
- may produce a cascade of additional error messages as its
- consequences are felt through the rest of the file. (To stop TeX
- when it is producing such an avalanche of error messages, type
- `C-d' (or `C-c C-d', if you are running a shell inside Emacs
- Version 18.))
-
- 3. You can tell TeX to stop this run by typing `x RET' at the `?'
- prompt.
-
- Please note that if you are running TeX inside Emacs, you need to
-switch to the shell buffer and line at which TeX offers the `?' prompt.
-
- Sometimes TeX will format a file without producing error messages
-even though there is a problem. This usually occurs if a command is
-not ended but TeX is able to continue processing anyhow. For example,
-if you fail to end an itemized list with the `@end itemize' command,
-TeX will write a DVI file that you can print out. The only error
-message that TeX will give you is the somewhat mysterious comment that
-
- (@end occurred inside a group at level 1)
-
-However, if you print the DVI file, you will find that the text of the
-file that follows the itemized list is entirely indented as if it were
-part of the last item in the itemized list. The error message is the
-way TeX says that it expected to find an `@end' command somewhere in
-the file; but that it could not determine where it was needed.
-
- Another source of notoriously hard-to-find errors is a missing `@end
-group' command. If you ever are stumped by incomprehensible errors,
-look for a missing `@end group' command first.
-
- If the Texinfo file lacks header lines, TeX may stop in the
-beginning of its run and display output that looks like the following.
-The `*' indicates that TeX is waiting for input.
-
- This is TeX, Version 2.0 for Berkeley UNIX
- (preloaded format=plain-cm 87.10.25)
- (test.texinfo [1])
- *
-
-In this case, simply type `\end RET' after the asterisk. Then write
-the header lines in the Texinfo file and run the TeX command again.
-(Note the use of the backslash, `\'. TeX uses `\' instead of `@'; and
-in this circumstance, you are working directly with TeX, not with
-Texinfo.)
-
-
-File: texi.info, Node: Using texinfo-show-structure, Next: Using occur, Prev: Debugging with TeX, Up: Catching Mistakes
-
-Using `texinfo-show-structure'
-==============================
-
- It is not always easy to keep track of the nodes, chapters,
-sections, and subsections of a Texinfo file. This is especially true
-if you are revising or adding to a Texinfo file that someone else has
-written.
-
- In GNU Emacs, in Texinfo mode, the `texinfo-show-structure' command
-lists all the lines that begin with the @-commands that specify the
-structure: `@chapter', `@section', `@appendix', and so on. With an
-argument (`C-u' as prefix argument, if interactive), the command also
-shows the `@node' lines. The `texinfo-show-structure' command is bound
-to `C-c C-s' in Texinfo mode, by default.
-
- The lines are displayed in a buffer called the `*Occur*' buffer.
-For example, when `texinfo-show-structure' was run on an earlier
-version of this appendix, it produced the following:
-
- Lines matching "^@\\(chapter \\|sect\\|sub\\|unnum\\|major\\|
- heading \\|appendix\\)" in buffer texinfo.texi.
- 4:@appendix Formatting Mistakes
- 52:@appendixsec Catching Errors with Info Formatting
- 222:@appendixsec Catching Errors with @TeX{} Formatting
- 338:@appendixsec Using @code{texinfo-show-structure}
- 407:@appendixsubsec Using @code{occur}
- 444:@appendixsec Finding Badly Referenced Nodes
- 513:@appendixsubsec Running @code{Info-validate}
- 573:@appendixsubsec Splitting a File Manually
-
- This says that lines 4, 52, and 222 of `texinfo.texi' begin with the
-`@appendix', `@appendixsec', and `@appendixsec' commands respectively.
-If you move your cursor into the `*Occur*' window, you can position the
-cursor over one of the lines and use the `C-c C-c' command
-(`occur-mode-goto-occurrence'), to jump to the corresponding spot in
-the Texinfo file. *Note Using Occur: (emacs)Other Repeating Search,
-for more information about `occur-mode-goto-occurrence'.
-
- The first line in the `*Occur*' window describes the "regular
-expression" specified by TEXINFO-HEADING-PATTERN. This regular
-expression is the pattern that `texinfo-show-structure' looks for.
-*Note Using Regular Expressions: (emacs)Regexps, for more information.
-
- When you invoke the `texinfo-show-structure' command, Emacs will
-display the structure of the whole buffer. If you want to see the
-structure of just a part of the buffer, of one chapter, for example,
-use the `C-x n' (`narrow-to-region') command to mark the region.
-(*Note Narrowing: (emacs)Narrowing.) This is how the example used
-above was generated. (To see the whole buffer again, use `C-x w'
-(`widen').)
-
- If you call `texinfo-show-structure' with a prefix argument by
-typing `C-u C-c C-s', it will list lines beginning with `@node' as well
-as the lines beginning with the @-sign commands for `@chapter',
-`@section', and the like.
-
- You can remind yourself of the structure of a Texinfo file by
-looking at the list in the `*Occur*' window; and if you have mis-named
-a node or left out a section, you can correct the mistake.
-
-
-File: texi.info, Node: Using occur, Next: Running Info-Validate, Prev: Using texinfo-show-structure, Up: Catching Mistakes
-
-Using `occur'
-=============
-
- Sometimes the `texinfo-show-structure' command produces too much
-information. Perhaps you want to remind yourself of the overall
-structure of a Texinfo file, and are overwhelmed by the detailed list
-produced by `texinfo-show-structure'. In this case, you can use the
-`occur' command directly. To do this, type
-
- `M-x occur'
-
-and then, when prompted, type a "regexp", a regular expression for the
-pattern you want to match. (*Note Regular Expressions:
-(emacs)Regexps.) The `occur' command works from the current location
-of the cursor in the buffer to the end of the buffer. If you want to
-run `occur' on the whole buffer, place the cursor at the beginning of
-the buffer.
-
- For example, to see all the lines that contain the word `@chapter'
-in them, just type `@chapter'. This will produce a list of the
-chapters. It will also list all the sentences with `@chapter' in the
-middle of the line.
-
- If you want to see only those lines that start with the word
-`@chapter', type `^@chapter' when prompted by `occur'. If you want to
-see all the lines that end with a word or phrase, end the last word
-with a `$'; for example, `catching mistakes$'. This can be helpful
-when you want to see all the nodes that are part of the same chapter or
-section and therefore have the same `Up' pointer.
-
- *Note Using Occur: (emacs)Other Repeating Search, for more
-information.
-
-
-File: texi.info, Node: Running Info-Validate, Prev: Using occur, Up: Catching Mistakes
-
-Finding Badly Referenced Nodes
-==============================
-
- You can use the `Info-validate' command to check whether any of the
-`Next', `Previous', `Up' or other node pointers fail to point to a
-node. This command checks that every node pointer points to an
-existing node. The `Info-validate' command works only on Info files,
-not on Texinfo files.
-
- The `makeinfo' program validates pointers automatically, so you do
-not need to use the `Info-validate' command if you are using
-`makeinfo'. You only may need to use `Info-validate' if you are unable
-to run `makeinfo' and instead must create an Info file using
-`texinfo-format-region' or `texinfo-format-buffer', or if you write an
-Info file from scratch.
-
-* Menu:
-
-* Using Info-validate:: How to run `Info-validate'.
-* Unsplit:: How to create an unsplit file.
-* Tagifying:: How to tagify a file.
-* Splitting:: How to split a file manually.
-
-
-File: texi.info, Node: Using Info-validate, Next: Unsplit, Up: Running Info-Validate
-
-Running `Info-validate'
------------------------
-
- To use `Info-validate', visit the Info file you wish to check and
-type:
-
- M-x Info-validate
-
-(Note that the `Info-validate' command requires an upper case `I'. You
-may also need to create a tag table before running `Info-validate'.
-*Note Tagifying::.)
-
- If your file is valid, you will receive a message that says "File
-appears valid". However, if you have a pointer that does not point to
-a node, error messages will be displayed in a buffer called `*problems
-in info file*'.
-
- For example, `Info-validate' was run on a test file that contained
-only the first node of this manual. One of the messages said:
-
- In node "Overview", invalid Next: Texinfo Mode
-
-This meant that the node called `Overview' had a `Next' pointer that
-did not point to anything (which was true in this case, since the test
-file had only one node in it).
-
- Now suppose we add a node named `Texinfo Mode' to our test case but
-we do not specify a `Previous' for this node. Then we will get the
-following error message:
-
- In node "Texinfo Mode", should have Previous: Overview
-
-This is because every `Next' pointer should be matched by a `Previous'
-(in the node where the `Next' points) which points back.
-
- `Info-validate' also checks that all menu entries and cross
-references point to actual nodes.
-
- Note that `Info-validate' requires a tag table and does not work
-with files that have been split. (The `texinfo-format-buffer' command
-automatically splits large files.) In order to use `Info-validate' on
-a large file, you must run `texinfo-format-buffer' with an argument so
-that it does not split the Info file; and you must create a tag table
-for the unsplit file.
-
-
-File: texi.info, Node: Unsplit, Next: Tagifying, Prev: Using Info-validate, Up: Running Info-Validate
-
-Creating an Unsplit File
-------------------------
-
- You can run `Info-validate' only on a single Info file that has a
-tag table. The command will not work on the indirect subfiles that are
-generated when a master file is split. If you have a large file
-(longer than 70,000 bytes or so), you need to run the
-`texinfo-format-buffer' or `makeinfo-buffer' command in such a way that
-it does not create indirect subfiles. You will also need to create a
-tag table for the Info file. After you have done this, you can run
-`Info-validate' and look for badly referenced nodes.
-
- The first step is to create an unsplit Info file.
-
- To prevent `texinfo-format-buffer' from splitting a Texinfo file
-into smaller Info files, give a prefix to the `M-x
-texinfo-format-buffer' command:
-
- C-u M-x texinfo-format-buffer
-
-or else
-
- C-u C-c C-e C-b
-
-When you do this, Texinfo will not split the file and will not create a
-tag table for it.
-
-
-File: texi.info, Node: Tagifying, Next: Splitting, Prev: Unsplit, Up: Running Info-Validate
-
-Tagifying a File
-----------------
-
- After creating an unsplit Info file, you must create a tag table for
-it. Visit the Info file you wish to tagify and type:
-
- M-x Info-tagify
-
-(Note the upper case I in `Info-tagify'.) This creates an Info file
-with a tag table that you can validate.
-
- The third step is to validate the Info file:
-
- M-x Info-validate
-
-(Note the upper case I in `Info-validate'.) In brief, the steps are:
-
- C-u M-x texinfo-format-buffer
- M-x Info-tagify
- M-x Info-validate
-
- After you have validated the node structure, you will be able to
-rerun `texinfo-format-buffer' in the normal way so it will construct a
-tag table and split the file automatically, or you can make the tag
-table and split the file manually.
-
-
-File: texi.info, Node: Splitting, Prev: Tagifying, Up: Running Info-Validate
-
-Splitting a File Manually
--------------------------
-
- You should split a large file or else let the
-`texinfo-format-buffer' or `makeinfo-buffer' command do it for you
-automatically. (Generally you will let one of the formatting commands
-do this job for you. *Note Create an Info File::.)
-
- The split-off files are called the indirect subfiles.
-
- Info files are split to save memory. With smaller files, Emacs does
-not have make such a large buffer to hold the information.
-
- If an Info file has more than 30 nodes, you should also make a tag
-table for it. *Note Using Info-validate::, for information about
-creating a tag table. (Again, tag tables are usually created
-automatically by the formatting command; you only need to create a tag
-table yourself if you are doing the job manually. Most likely, you
-will do this for a large, unsplit file on which you have run
-`Info-validate'.)
-
- Visit the Info file you wish to tagify and split and type the two
-commands:
-
- M-x Info-tagify
- M-x Info-split
-
-(Note that the `I' in `Info' is upper case.)
-
- When you use the `Info-split' command, the buffer is modified into a
-(small) Info file which lists the indirect subfiles. This file should
-be saved in place of the original visited file. The indirect subfiles
-are written in the same directory the original file is in, with names
-generated by appending `-' and a number to the original file name.
-
- The primary file still functions as an Info file, but it contains
-just the tag table and a directory of subfiles.
-
-
-File: texi.info, Node: Refilling Paragraphs, Next: Command Syntax, Prev: Catching Mistakes, Up: Top
-
-Refilling Paragraphs
-********************
-
- The `@refill' command refills and, optionally, indents the first
-line of a paragraph.(1) The `@refill' command is no longer important,
-but we describe it here because you once needed it. You will see it in
-many old Texinfo files.
-
- Without refilling, paragraphs containing long @-constructs may look
-bad after formatting because the formatter removes @-commands and
-shortens some lines more than others. In the past, neither
-`texinfo-format-region' nor `texinfo-format-buffer' refilled paragraphs
-automatically. The `@refill' command had to be written at the end of
-every paragraph to cause these formatters to fill them. (Both TeX and
-`makeinfo' have always refilled paragraphs automatically.) Now, all
-the Info formatters automatically fill and indent those paragraphs that
-need to be filled and indented.
-
- The `@refill' command causes both the `texinfo-format-region'
-command and the `texinfo-format-buffer' command to refill a paragraph
-in the Info file *after* all the other processing has been done. For
-this reason, you can not use `@refill' with a paragraph containing
-either `@*' or `@w{ ... }' since the refilling action will override
-those two commands.
-
- The `texinfo-format-region' and `texinfo-format-buffer' commands now
-automatically append `@refill' to the end of each paragraph that should
-be filled. They do not append `@refill' to the ends of paragraphs that
-contain `@*' or `@w{ ...}' and therefore do not refill or indent them.
-
- ---------- Footnotes ----------
-
- (1) Perhaps the command should have been called the
-`@refillandindent' command, but `@refill' is shorter and the name was
-chosen before indenting was possible.
-
-
-File: texi.info, Node: Command Syntax, Next: Obtaining TeX, Prev: Refilling Paragraphs, Up: Top
-
-@-Command Syntax
-****************
-
- The character `@' is used to start special Texinfo commands. (It
-has the same meaning that `\' has in PlainTeX.) Texinfo has four types
-of @-command:
-
-1. Non-alphabetic commands.
- These commands consist of an @ followed by a punctuation mark or
- other character that is not part of the alphabet. Non-alphabetic
- commands are almost always part of the text within a paragraph,
- and never take any argument. The two characters (@ and the other
- one) are complete in themselves; none is followed by braces. The
- non-alphabetic commands are: `@.', `@:', `@*', `@@', `@{', and
- `@}'.
-
-2. Alphabetic commands that do not require arguments.
- These commands start with @ followed by a word followed by left-
- and right-hand braces. These commands insert special symbols in
- the document; they do not require arguments. For example,
- `@dots{}' => `...', `@equiv{}' => `==', `@TeX{}' => `TeX', and
- `@bullet{}' => `*'.
-
-3. Alphabetic commands that require arguments within braces.
- These commands start with @ followed by a letter or a word,
- followed by an argument within braces. For example, the command
- `@dfn' indicates the introductory or defining use of a term; it is
- used as follows: `In Texinfo, @@-commands are @dfn{mark-up}
- commands.'
-
-4. Alphabetic commands that occupy an entire line.
- These commands occupy an entire line. The line starts with @,
- followed by the name of the command (a word); for example,
- `@center' or `@cindex'. If no argument is needed, the word is
- followed by the end of the line. If there is an argument, it is
- separated from the command name by a space. Braces are not used.
-
- Thus, the alphabetic commands fall into classes that have different
-argument syntaxes. You cannot tell to which class a command belongs by
-the appearance of its name, but you can tell by the command's meaning:
-if the command stands for a glyph, it is in class 2 and does not
-require an argument; if it makes sense to use the command together with
-other text as part of a paragraph, the command is in class 3 and must
-be followed by an argument in braces; otherwise, it is in class 4 and
-uses the rest of the line as its argument.
-
- The purpose of having a different syntax for commands of classes 3
-and 4 is to make Texinfo files easier to read, and also to help the GNU
-Emacs paragraph and filling commands work properly. There is only one
-exception to this rule: the command `@refill', which is always used at
-the end of a paragraph immediately following the final period or other
-punctuation character. `@refill' takes no argument and does *not*
-require braces. `@refill' never confuses the Emacs paragraph commands
-because it cannot appear at the beginning of a line.
-
-
-File: texi.info, Node: Obtaining TeX, Next: New Features, Prev: Command Syntax, Up: Top
-
-How to Obtain TeX
-*****************
-
- TeX is freely redistributable. You can obtain TeX for Unix systems
-from the University of Washington for a distribution fee.
-
- To order a full distribution, send $200.00 for a 1/2-inch 9-track
-1600 bpi (`tar' or `cpio') tape reel, or $210.00 for a 1/4-inch 4-track
-QIC-24 (`tar' or `cpio') cartridge, to:
-
- Northwest Computing Support Center
- DR-10, Thomson Hall 35
- University of Washington
- Seattle, Washington 98195
-
-Please make checks payable to the University of Washington.
-
- Prepaid orders are preferred but purchase orders are acceptable;
-however, purchase orders carry an extra charge of $10.00, to pay for
-processing.
-
- Overseas sites: please add to the base cost $20.00 for shipment via
-air parcel post, or $30.00 for shipment via courier.
-
- Please check with the Northwest Computing Support Center at the
-University of Washington for current prices and formats:
-
- telephone: (206) 543-6259
- email: elisabet@u.washington.edu
-
-
-File: texi.info, Node: New Features, Next: Command and Variable Index, Prev: Obtaining TeX, Up: Top
-
-Second Edition Features
-***********************
-
- The second edition of the Texinfo manual describes more than 20 new
-Texinfo mode commands and more than 50 previously undocumented Texinfo
-@-commands. This edition is more than twice the length of the first
-edition.
-
- Here is a brief description of the new commands.
-
-* Menu:
-
-* New Texinfo Mode Commands:: The updating commands are especially useful.
-* New Commands:: Many newly described @-commands.
-
-
-File: texi.info, Node: New Texinfo Mode Commands, Next: New Commands, Up: New Features
-
-New Texinfo Mode Commands
-=========================
-
- Texinfo mode provides commands and features especially designed for
-working with Texinfo files. More than 20 new commands have been added,
-including commands for automatically creating and updating both nodes
-and menus. This is a tedious task when done by hand.
-
- The keybindings are intended to be somewhat mnemonic.
-
-Update all nodes and menus
---------------------------
-
- The `texinfo-master-menu' command is the primary command:
-
-`C-c C-u m'
-`M-x texinfo-master-menu'
- Create or update a master menu. With `C-u' as a prefix argument,
- first create or update all nodes and regular menus.
-
-Update Pointers
----------------
-
-Create or update `Next', `Previous', and `Up' node pointers.
-
-*Note Updating Nodes and Menus::.
-
-`C-c C-u C-n'
-`M-x texinfo-update-node'
- Update a node.
-
-`C-c C-u C-e'
-`M-x texinfo-every-node-update'
- Update every node in the buffer.
-
-Update Menus
-------------
-
-Create or update menus.
-
-*Note Updating Nodes and Menus::.
-
-`C-c C-u C-m'
-`M-x texinfo-make-menu'
- Make or update a menu.
-
-`C-c C-u C-a'
-`M-x texinfo-all-menus-update'
- Make or update all the menus in a buffer. With `C-u' as a prefix
- argument, first update all the nodes.
-
-Insert Title as Description
----------------------------
-
-Insert a node's chapter or section title in the space for the
-description in a menu entry line; position point so you can edit the
-insert. (This command works somewhat differently than the other
-insertion commands, which insert only a predefined string.)
-
-*Note Inserting Frequently Used Commands: Inserting.
-
-`C-c C-c C-d'
- Insert title.
-
-Format for Info
----------------
-
-Provide keybindings both for the Info formatting commands that are
-written in Emacs Lisp and for `makeinfo' that is written in C.
-
-*Note Info Formatting::.
-
-Use the Emacs lisp `texinfo-format...' commands:
-
-`C-c C-e C-r'
- Format the region.
-
-`C-c C-e C-b'
- Format the buffer.
-
-Use `makeinfo':
-
-`C-c C-m C-r'
- Format the region.
-
-`C-c C-m C-b'
- Format the buffer.
-
-`C-c C-m C-l'
- Recenter the `makeinfo' output buffer.
-
-`C-c C-m C-k'
- Kill the `makeinfo' formatting job.
-
-Typeset and Print
------------------
-
-Typeset and print Texinfo documents from within Emacs.
-
-*Note Printing::.
-
-`C-c C-t C-r'
- Run TeX on the region.
-
-`C-c C-t C-b'
- Run TeX on the buffer.
-
-`C-c C-t C-i'
- Run `texindex'.
-
-`C-c C-t C-p'
- Print the DVI file.
-
-`C-c C-t C-q'
- Show the print queue.
-
-`C-c C-t C-d'
- Delete a job from the print queue.
-
-`C-c C-t C-k'
- Kill the current TeX formatting job.
-
-`C-c C-t C-x'
- Quit a currently stopped TeX formatting job.
-
-`C-c C-t C-l'
- Recenter the output buffer.
-
-Other Updating Commands
------------------------
-
-The "other updating commands" do not have standard keybindings because
-they are used less frequently.
-
-*Note Other Updating Commands::.
-
-`M-x texinfo-insert-node-lines'
- Insert missing `@node' lines using section titles as node names.
-
-`M-x texinfo-multiple-files-update'
- Update a multi-file document. With a numeric prefix, such as `C-u
- 8', update *every* pointer and menu in *all* the files and then
- insert a master menu.
-
-`M-x texinfo-indent-menu-description'
- Indent descriptions in menus.
-
-`M-x texinfo-sequential-node-update'
- Insert node pointers in strict sequence.
-
-
-File: texi.info, Node: New Commands, Prev: New Texinfo Mode Commands, Up: New Features
-
-New Texinfo @-Commands
-======================
-
- The second edition of the Texinfo manual describes more than 50
-commands that were not described in the first edition. A third or so
-of these commands existed in Texinfo but were not documented in the
-manual; the others are new. Here is a listing, with brief descriptions
-of them:
-
-Indexing
---------
-
-Create your own index, and merge indices.
-
-*Note Indices::.
-
-`@defindex INDEX-NAME'
- Define a new index and its indexing command. See also the
- `@defcodeindex' command.
-
-`@synindex FROM-INDEX INTO-INDEX'
- Merge the FROM-INDEX index into the INTO-INDEX index. See also
- the `@syncodeindex' command.
-
-Definitions
------------
-
-Describe functions, variables, macros, commands, user options, special
-forms, and other such artifacts in a uniform format.
-
-*Note Definition Commands::.
-
-`@deffn CATEGORY NAME ARGUMENTS...'
- Format a description for functions, interactive commands, and
- similar entities.
-
-`@defvr, @defop, ...'
- 15 other related commands.
-
-Glyphs
-------
-
-Indicate the results of evaluation, expansion, printed output, an error
-message, equivalence of expressions, and the location of point.
-
-*Note Glyphs::.
-
-`@equiv{}'
-`=='
- Equivalence:
-
-`@error{}'
-`error-->'
- Error message
-
-`@expansion{}'
-`==>'
- Macro expansion
-
-`@point{}'
-`-!-'
- Position of point
-
-`@print{}'
-`-|'
- Printed output
-
-`@result{}'
-`=>'
- Result of an expression
-
-Page Headings
--------------
-
-Customize page headings.
-
-*Note Headings::.
-
-`@headings ON-OFF-SINGLE-DOUBLE'
- Headings on or off, single, or double-sided.
-
-`@evenfooting [LEFT] @| [CENTER] @| [RIGHT]'
- Footings for even-numbered (left-hand) pages.
-
-`@evenheading, @everyheading, @oddheading, ...'
- Five other related commands.
-
-`@thischapter'
- Insert name of chapter and chapter number.
-
-`@thischaptername, @thisfile, @thistitle, @thispage'
- Related commands.
-
-Formatting
-----------
-
-Format blocks of text.
-
-*Note Quotations and Examples::, and
-*Note Making Lists and Tables: Lists and Tables.
-
-`@cartouche'
- Draw rounded box surrounding text (not in Info).
-
-`@enumerate OPTIONAL-ARG'
- Enumerate a list with letters or numbers.
-
-`@exdent LINE-OF-TEXT'
- Remove indentation.
-
-`@flushleft'
- Left justify.
-
-`@flushright'
- Right justify.
-
-`@format'
- Do not narrow nor change font.
-
-`@ftable FORMATTING-COMMAND'
-`@vtable FORMATTING-COMMAND'
- Two-column table with indexing.
-
-`@lisp'
- For an example of Lisp code.
-
-`@smallexample'
-`@smalllisp'
- Like @table and @lisp but for @smallbook.
-
-Conditionals
-------------
-
-Conditionally format text.
-
-*Note `@set' `@clear' `@value': set clear value.
-
-`@set FLAG [STRING]'
- Set a flag. Optionally, set value of FLAG to STRING.
-
-`@clear FLAG'
- Clear a flag.
-
-`@value{FLAG}'
- Replace with value to which FLAG is set.
-
-`@ifset FLAG'
- Format, if FLAG is set.
-
-`@ifclear FLAG'
- Ignore, if FLAG is set.
-
-@heading series for Titles
---------------------------
-
-Produce unnumbered headings that do not appear in a table of contents.
-
-*Note Structuring::.
-
-`@heading TITLE'
- Unnumbered section-like heading not listed in the table of
- contents of a printed manual.
-
-`@chapheading, @majorheading, @subheading, @subsubheading'
- Related commands.
-
-Font commands
--------------
-
-*Note Smallcaps::, and
-*Note Fonts::.
-
-`@r{TEXT}'
- Print in roman font.
-
-`@sc{TEXT}'
- Print in SMALL CAPS font.
-
-Miscellaneous
--------------
-
-See *Note `@title' `@subtitle' and `@author' Commands: title subtitle
-author,
-see *Note Overfull hboxes::,
-see *Note Footnotes::,
-see *Note Format a Dimension: dmn,
-see *Note Inserting a Minus Sign: minus,
-see *Note Paragraph Indenting: paragraphindent,
-see *Note Cross Reference Commands::,
-see *Note `@title' `@subtitle' and `@author': title subtitle author, and
-see *Note How to Make Your Own Headings: Custom Headings.
-
-`@author AUTHOR'
- Typeset author's name.
-
-`@finalout'
- Produce cleaner printed output.
-
-`@footnotestyle'
- Specify footnote style.
-
-`@dmn{DIMENSION}'
- Format a dimension.
-
-`@minus{}'
- Generate a minus sign.
-
-`@paragraphindent'
- Specify paragraph indentation.
-
-`@ref{NODE-NAME, [ENTRY], [TOPIC-OR-TITLE], [INFO-FILE], [MANUAL]}'
- Make a reference. In the printed manual, the reference does not
- start with the word `see'.
-
-`@title TITLE'
- Typeset TITLE in the alternative title page format.
-
-`@subtitle SUBTITLE'
- Typeset SUBTITLE in the alternative title page format.
-
-`@today{}'
- Insert the current date.
-
-
-File: texi.info, Node: Command and Variable Index, Next: Concept Index, Prev: New Features, Up: Top
-
-Command and Variable Index
-**************************
-
- This is an alphabetical list of all the @-commands and several
-variables. To make the list easier to use, the commands are listed
-without their preceding `@'.
-
-* Menu:
-
-* * (force line break): Line Breaks.
-* . (true end of sentence): Controlling Spacing.
-* : (suppress widening): Controlling Spacing.
-* @ (single @): Inserting An Atsign.
-* { (single {): Inserting Braces.
-* } (single }): Inserting Braces.
-* afourpaper: A4 Paper.
-* appendix: unnumbered & appendix.
-* appendixsec: unnumberedsec appendixsec heading.
-* appendixsection: unnumberedsec appendixsec heading.
-* appendixsubsec: unnumberedsubsec appendixsubsec subheading.
-* appendixsubsubsec: subsubsection.
-* apply: Sample Function Definition.
-* author: title subtitle author.
-* b (bold font): Fonts.
-* buffer-end: Def Cmd Template.
-* bullet: bullet.
-* bye: Ending a File.
-* bye: File End.
-* c (comment): Comments.
-* cartouche: cartouche.
-* center: titlefont center sp.
-* chapheading: majorheading & chapheading.
-* chapter: chapter.
-* cindex: Indexing Commands.
-* cite: cite.
-* clear: ifset ifclear.
-* code: code.
-* comment: Comments.
-* contents: Contents.
-* copyright: copyright symbol.
-* copyright: Copyright & Permissions.
-* cropmarks: Cropmarks and Magnification.
-* defcodeindex: New Indices.
-* defcv: Abstract Objects.
-* deffn: Functions Commands.
-* deffnx: deffnx.
-* defindex: New Indices.
-* defivar: Abstract Objects.
-* defmac: Functions Commands.
-* defmethod: Abstract Objects.
-* defop: Abstract Objects.
-* defopt: Variables Commands.
-* defspec: Functions Commands.
-* deftp: Data Types.
-* deftypefn: Typed Functions.
-* deftypefun: Typed Functions.
-* deftypevar: Typed Variables.
-* deftypevr: Typed Variables.
-* defun: Functions Commands.
-* defvar: Variables Commands.
-* defvr: Variables Commands.
-* dfn: dfn.
-* display: display.
-* dmn: dmn.
-* dots: dots.
-* emph: emph & strong.
-* end: Quotations and Examples.
-* end: Introducing Lists.
-* end titlepage: end titlepage.
-* enumerate: enumerate.
-* evenfooting: Custom Headings.
-* evenheading: Custom Headings.
-* everyfooting: Custom Headings.
-* everyheading: Custom Headings.
-* example: example.
-* exdent: exdent.
-* file: file.
-* filll: Copyright & Permissions.
-* finalout: Overfull hboxes.
-* findex: Indexing Commands.
-* flushleft: flushleft & flushright.
-* flushright: flushleft & flushright.
-* foobar: Optional Arguments.
-* footnote: Footnotes.
-* footnotestyle: Footnotes.
-* format: format.
-* forward-word: Def Cmd Template.
-* ftable: ftable vtable.
-* group: group.
-* heading: unnumberedsec appendixsec heading.
-* headings: headings on off.
-* i (italic font): Fonts.
-* ifclear: ifset ifclear.
-* ifinfo: Conditionals.
-* ifset: ifset ifclear.
-* iftex: Conditionals.
-* ignore: Comments.
-* include: Using Include Files.
-* Info-validate: Running Info-Validate.
-* INFOPATH: Other Info Directories.
-* inforef: inforef.
-* input (TeX command): Minimum.
-* isearch-backward: deffnx.
-* isearch-forward: deffnx.
-* item: itemize.
-* item: table.
-* itemize: itemize.
-* itemx: itemx.
-* kbd: kbd.
-* key: key.
-* kindex: Indexing Commands.
-* lisp: Lisp Example.
-* lpr (DVI print command): Shell Format & Print.
-* mag (TeX command): Cropmarks and Magnification.
-* majorheading: majorheading & chapheading.
-* makeinfo-buffer: makeinfo in Emacs.
-* makeinfo-kill-job: makeinfo in Emacs.
-* makeinfo-recenter-output-buffer: makeinfo in Emacs.
-* makeinfo-region: makeinfo in Emacs.
-* menu: Menus.
-* minus: minus.
-* need: need.
-* next-error: makeinfo in Emacs.
-* noindent: noindent.
-* occur: Using occur.
-* occur-mode-goto-occurrence: Showing the Structure.
-* oddfooting: Custom Headings.
-* oddheading: Custom Headings.
-* page: page.
-* page-delimiter: Showing the Structure.
-* paragraphindent: paragraphindent.
-* pindex: Indexing Commands.
-* printindex: Printing Indices & Menus.
-* pxref: pxref.
-* quotation: quotation.
-* r (Roman font): Fonts.
-* ref: ref.
-* refill: Refilling Paragraphs.
-* samp: samp.
-* sc (small caps font): Smallcaps.
-* section: section.
-* set: ifset ifclear.
-* setchapternewpage: setchapternewpage.
-* setfilename: setfilename.
-* settitle: settitle.
-* shortcontents: Contents.
-* smallbook: smallbook.
-* smallexample: smallexample & smalllisp.
-* smalllisp: smallexample & smalllisp.
-* sp (line spacing): sp.
-* sp (titlepage line spacing): titlefont center sp.
-* strong: emph & strong.
-* subheading: unnumberedsubsec appendixsubsec subheading.
-* subsection: subsection.
-* subsubheading: subsubsection.
-* subsubsection: subsubsection.
-* subtitle: title subtitle author.
-* summarycontents: Contents.
-* syncodeindex: syncodeindex.
-* syncodeindex: syncodeindex.
-* synindex: synindex.
-* t (typewriter font): Fonts.
-* table: Two-column Tables.
-* tex: Using Ordinary TeX Commands.
-* tex (command): tex.
-* texi2dvi (shell script): Shell Format & Print.
-* texindex: Format/Print Hardcopy.
-* texindex: Shell Format & Print.
-* texinfo-all-menus-update: Updating Commands.
-* texinfo-every-node-update: Updating Commands.
-* texinfo-format-buffer: Info Formatting.
-* texinfo-format-buffer: texinfo-format commands.
-* texinfo-format-buffer: texinfo-format commands.
-* texinfo-format-region: texinfo-format commands.
-* texinfo-format-region: texinfo-format commands.
-* texinfo-format-region: Info Formatting.
-* texinfo-indent-menu-description: Other Updating Commands.
-* texinfo-insert-@code: Inserting.
-* texinfo-insert-@dfn: Inserting.
-* texinfo-insert-@end: Inserting.
-* texinfo-insert-@example: Inserting.
-* texinfo-insert-@item: Inserting.
-* texinfo-insert-@kbd: Inserting.
-* texinfo-insert-@node: Inserting.
-* texinfo-insert-@noindent: Inserting.
-* texinfo-insert-@samp: Inserting.
-* texinfo-insert-@table: Inserting.
-* texinfo-insert-@var: Inserting.
-* texinfo-insert-braces: Inserting.
-* texinfo-insert-node-lines: Other Updating Commands.
-* texinfo-make-menu: Updating Commands.
-* texinfo-master-menu: Updating Commands.
-* texinfo-multiple-files-update: texinfo-multiple-files-update.
-* texinfo-multiple-files-update (in brief): Other Updating Commands.
-* texinfo-sequential-node-update: Other Updating Commands.
-* texinfo-show-structure: Using texinfo-show-structure.
-* texinfo-show-structure: Showing the Structure.
-* texinfo-start-menu-description: Inserting.
-* texinfo-tex-buffer: Printing.
-* texinfo-tex-print: Printing.
-* texinfo-tex-region: Printing.
-* texinfo-update-node: Updating Commands.
-* TEXINPUTS: Preparing for TeX.
-* thischapter: Custom Headings.
-* thischaptername: Custom Headings.
-* thisfile: Custom Headings.
-* thispage: Custom Headings.
-* thistitle: Custom Headings.
-* tindex: Indexing Commands.
-* title: title subtitle author.
-* titlefont: titlefont center sp.
-* titlepage: titlepage.
-* today: Custom Headings.
-* top (@-command): makeinfo top command.
-* unnumbered: unnumbered & appendix.
-* unnumberedsec: unnumberedsec appendixsec heading.
-* unnumberedsubsec: unnumberedsubsec appendixsubsec subheading.
-* unnumberedsubsubsec: subsubsection.
-* up-list: Inserting.
-* value: value.
-* var: var.
-* vindex: Indexing Commands.
-* vskip: Copyright & Permissions.
-* vtable: ftable vtable.
-* w (prevent line break): w.
-* xref: xref.
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-11 b/gnu/usr.bin/texinfo/info-files/texi.info-11
deleted file mode 100644
index f960227..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-11
+++ /dev/null
@@ -1,451 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Concept Index, Prev: Command and Variable Index, Up: Top
-
-Concept Index
-*************
-
-* Menu:
-
-* @-command in nodename: Node Line Requirements.
-* @-command list: Command List.
-* @-command syntax: Command Syntax.
-* @-commands: Formatting Commands.
-* .cshrc initialization file: Preparing for TeX.
-* .profile initialization file: Preparing for TeX.
-* @include file sample: Sample Include File.
-* @menu parts: Menu Parts.
-* @node line writing: Writing a Node.
-* makeinfo inside Emacs: makeinfo in Emacs.
-* makeinfo options: makeinfo options.
-* TEXINPUTS environment variable: Preparing for TeX.
-* dir directory for Info installation: Install an Info File.
-* dir file listing: New Info File.
-* End node footnote style: Footnotes.
-* Separate footnote style: Footnotes.
-* Top node: The Top Node.
-* Top node is first: First Node.
-* Top node naming for references: Top Node Naming.
-* Top node summary: Top Node Summary.
-* hboxes, overfull: Overfull hboxes.
-* ifinfo permissions: ifinfo Permissions.
-* TeX commands, using ordinary: Using Ordinary TeX Commands.
-* TeX index sorting: Format/Print Hardcopy.
-* TeX input initialization: Preparing for TeX.
-* TeX, how to obtain: Obtaining TeX.
-* A4 paper, printing on: A4 Paper.
-* Abbreviations for keys: key.
-* Adding a new info file: New Info File.
-* Alphabetical @-command list: Command List.
-* Another Info directory: Other Info Directories.
-* Apostrophe in nodename: Node Line Requirements.
-* Arguments, repeated and optional: Optional Arguments.
-* Automatic pointer creation with makeinfo: makeinfo Pointer Creation.
-* Automatically insert nodes, menus: Updating Nodes and Menus.
-* Badly referenced nodes: Running Info-Validate.
-* Batch formatting for Info: Batch Formatting.
-* Beginning a Texinfo file: Beginning a File.
-* Beginning line of a Texinfo file: First Line.
-* Black rectangle in hardcopy: Overfull hboxes.
-* Blank lines: sp.
-* Book characteristics, printed: Printed Books.
-* Book, printing small: smallbook.
-* Box with rounded corners: cartouche.
-* Braces and argument syntax: Command Syntax.
-* Braces, inserting: Braces Atsigns Periods.
-* Braces, when to use: Formatting Commands.
-* Breaks in a line: Line Breaks.
-* Buffer formatting and printing: Printing.
-* Bullets, inserting: Dots Bullets.
-* Capitalizing index entries: Indexing Commands.
-* Case in nodename: Node Line Requirements.
-* Catching errors with TeX formatting: Debugging with TeX.
-* Catching errors with Info formatting: Debugging with Info.
-* Catching mistakes: Catching Mistakes.
-* Chapter structuring: Structuring.
-* Characteristics, printed books or manuals: Printed Books.
-* Checking for badly referenced nodes: Running Info-Validate.
-* Colon in nodename: Node Line Requirements.
-* Combining indices: Combining Indices.
-* Comma in nodename: Node Line Requirements.
-* Command definitions: Sample Function Definition.
-* Commands to insert single characters: Braces Atsigns Periods.
-* Commands using ordinary TeX: Using Ordinary TeX Commands.
-* Commands, inserting them: Inserting.
-* Comments: Comments.
-* Compile command for formatting: Compile-Command.
-* Conditionally visible text: Conditionals.
-* Conditions for copying Texinfo: Copying.
-* Contents, Table of: Contents.
-* Contents-like outline of file structure: Showing the Structure.
-* Conventions for writing definitions: Def Cmd Conventions.
-* Conventions, syntactic: Conventions.
-* Copying conditions: Copying.
-* Copying permissions: Sample Permissions.
-* Copying software: Software Copying Permissions.
-* Copyright page: Copyright & Permissions.
-* Correcting mistakes: Catching Mistakes.
-* Create nodes, menus automatically: Updating Nodes and Menus.
-* Creating an Info file: Create an Info File.
-* Creating an unsplit file: Unsplit.
-* Creating index entries: Indexing Commands.
-* Creating indices: Indices.
-* Creating pointers with makeinfo: makeinfo Pointer Creation.
-* Cropmarks for printing: Cropmarks and Magnification.
-* Cross reference parts: Cross Reference Parts.
-* Cross references: Cross References.
-* Cross references using @inforef: inforef.
-* Cross references using @pxref: pxref.
-* Cross references using @ref: ref.
-* Cross references using @xref: xref.
-* Debugging the Texinfo structure: Catching Mistakes.
-* Debugging with TeX formatting: Debugging with TeX.
-* Debugging with Info formatting: Debugging with Info.
-* Defining indexing entries: Indexing Commands.
-* Defining new indices: New Indices.
-* Definition commands: Definition Commands.
-* Definition conventions: Def Cmd Conventions.
-* Definition template: Def Cmd Template.
-* Definitions grouped together: deffnx.
-* Description for menu, start: Inserting.
-* Different cross reference commands: Cross Reference Commands.
-* Dimension formatting: dmn.
-* Display formatting: display.
-* Distribution: Software Copying Permissions.
-* Dots, inserting: dots.
-* Dots, inserting: Dots Bullets.
-* Double-colon menu entries: Less Cluttered Menu Entry.
-* DVI file: Shell Format & Print.
-* Ellipsis, inserting: Dots Bullets.
-* Emacs: Texinfo Mode.
-* Emacs shell, format, print from: Within Emacs.
-* Emphasizing text: Emphasis.
-* Emphasizing text, font for: emph & strong.
-* End of header line: End of Header.
-* End titlepage starts headings: end titlepage.
-* Ending a Texinfo file: Ending a File.
-* Entries for an index: Indexing Commands.
-* Entries, making index: Index Entries.
-* Enumeration: enumerate.
-* Equivalence, indicating it: Equivalence.
-* Error message, indicating it: Error Glyph.
-* Errors, parsing: makeinfo in Emacs.
-* European A4 paper: A4 Paper.
-* Evaluation glyph: result.
-* Example for a small book: smallexample & smalllisp.
-* Example menu: Menu Example.
-* Examples, formatting them: example.
-* Expansion, indicating it: expansion.
-* File beginning: Beginning a File.
-* File ending: Ending a File.
-* File section structure, showing it: Showing the Structure.
-* Filling paragraphs: Refilling Paragraphs.
-* Final output: Overfull hboxes.
-* Finding badly referenced nodes: Running Info-Validate.
-* First line of a Texinfo file: First Line.
-* First node: First Node.
-* Fonts for indices: syncodeindex.
-* Fonts for printing, not for Info: Fonts.
-* Footings: Headings.
-* Footnotes: Footnotes.
-* Format a dimension: dmn.
-* Format and print hardcopy: Format/Print Hardcopy.
-* Format and print in Texinfo mode: Texinfo Mode Printing.
-* Format with the compile command: Compile-Command.
-* Format, print from Emacs shell: Within Emacs.
-* Formatting a file for Info: Create an Info File.
-* Formatting commands: Formatting Commands.
-* Formatting examples: example.
-* Formatting for Info: Info Formatting.
-* Formatting for printing: Printing.
-* Formatting headings and footings: Headings.
-* Formatting requirements: Requirements Summary.
-* Frequently used commands, inserting: Inserting.
-* Function definitions: Sample Function Definition.
-* General syntactic conventions: Conventions.
-* Generating menus with indices: Printing Indices & Menus.
-* Glyphs: Glyphs.
-* GNU Emacs: Texinfo Mode.
-* GNU Emacs shell, format, print from: Within Emacs.
-* Going to other Info files' nodes: Other Info Files.
-* Group (hold text together vertically): group.
-* Grouping two definitions together: deffnx.
-* Hardcopy, printing it: Format/Print Hardcopy.
-* Header for Texinfo files: Header.
-* Header of a Texinfo file: First Line.
-* Headings: Headings.
-* Headings, page, begin to appear: end titlepage.
-* Highlighting text: Indicating.
-* Hints: Tips.
-* Holding text together vertically: group.
-* If text conditionally visible: Conditionals.
-* Ignored text: Comments.
-* Include file requirements: Include File Requirements.
-* Include file sample: Sample Include File.
-* Include files: Include Files.
-* Indentation undoing: exdent.
-* Indenting paragraphs: paragraphindent.
-* Index entries: Indexing Commands.
-* Index entries, making: Index Entries.
-* Index entry capitalization: Indexing Commands.
-* Index font types: Indexing Commands.
-* Indexing commands, predefined: Indexing Commands.
-* Indexing table entries automatically: ftable vtable.
-* Indicating commands, definitions, etc.: Indicating.
-* Indicating evaluation: result.
-* Indices: Indices.
-* Indices, combining them: Combining Indices.
-* Indices, defining new: New Indices.
-* Indices, printing and menus: Printing Indices & Menus.
-* Indices, sorting: Format/Print Hardcopy.
-* Indices, two letter names: syncodeindex.
-* Indirect subfiles: Tag and Split Files.
-* Info batch formatting: Batch Formatting.
-* Info file installation: Install an Info File.
-* Info file requires @setfilename: setfilename.
-* Info file, listing new one: New Info File.
-* Info file, splitting manually: Splitting.
-* Info files: Info Files.
-* Info formatting: Info Formatting.
-* Info installed in another directory: Other Info Directories.
-* Info validating a large file: Using Info-validate.
-* Info, creating an on-line file: Create an Info File.
-* Info; other files' nodes: Other Info Files.
-* Initialization file for TeX input: Preparing for TeX.
-* Insert nodes, menus automatically: Updating Nodes and Menus.
-* Inserting @, braces, and periods: Braces Atsigns Periods.
-* Inserting dots: Dots Bullets.
-* Inserting dots: dots.
-* Inserting ellipsis: Dots Bullets.
-* Inserting frequently used commands: Inserting.
-* Inserting special characters and symbols: Insertions.
-* Installing an Info file: Install an Info File.
-* Installing Info in another directory: Other Info Directories.
-* Introduction, as part of file: Software Copying Permissions.
-* Itemization: itemize.
-* Keys, recommended names: key.
-* Larger or smaller pages: Cropmarks and Magnification.
-* Less cluttered menu entry: Less Cluttered Menu Entry.
-* License agreement: Software Copying Permissions.
-* Line breaks: Line Breaks.
-* Line breaks, preventing: w.
-* Line spacing: sp.
-* Lisp example: Lisp Example.
-* Lisp example for a small book: smallexample & smalllisp.
-* List of @-commands: Command List.
-* Listing a new info file: New Info File.
-* Lists and tables, making them: Lists and Tables.
-* Local variables: Compile-Command.
-* Location of menus: Menu Location.
-* Looking for badly referenced nodes: Running Info-Validate.
-* Macro definitions: Sample Function Definition.
-* Magnified printing: Cropmarks and Magnification.
-* Making a printed manual: Format/Print Hardcopy.
-* Making a tag table automatically: Tag and Split Files.
-* Making a tag table manually: Unsplit.
-* Making cross references: Cross References.
-* Making line and page breaks: Breaks.
-* Making lists and tables: Lists and Tables.
-* Manual characteristics, printed: Printed Books.
-* Marking text within a paragraph: Marking Text.
-* Marking words and phrases: Marking Text.
-* Master menu: The Top Node.
-* Master menu parts: Master Menu Parts.
-* Mathematical expressions: Using Ordinary TeX Commands.
-* Menu description, start: Inserting.
-* Menu entries with two colons: Less Cluttered Menu Entry.
-* Menu example: Menu Example.
-* Menu location: Menu Location.
-* Menu parts: Menu Parts.
-* Menu writing: Writing a Menu.
-* Menus: Menus.
-* Menus generated with indices: Printing Indices & Menus.
-* META key: key.
-* Meta-syntactic chars for arguments: Optional Arguments.
-* Minimal Texinfo file (requirements): Minimum.
-* Mistakes, catching: Catching Mistakes.
-* Mode, using Texinfo: Texinfo Mode.
-* Must have in Texinfo file: Minimum.
-* Names for indices: syncodeindex.
-* Names recommended for keys: key.
-* Naming a `Top' Node in references: Top Node Naming.
-* Need space at page bottom: need.
-* New index defining: New Indices.
-* New info file, listing it in dir file: New Info File.
-* Node line requirements: Node Line Requirements.
-* Node line writing: Writing a Node.
-* Node, defined: node.
-* Node, `Top': The Top Node.
-* Nodename must be unique: Node Line Requirements.
-* Nodename, cannot contain: Node Line Requirements.
-* Nodes for menus are short: Menu Location.
-* Nodes in other Info files: Other Info Files.
-* Nodes, catching mistakes: Catching Mistakes.
-* Nodes, checking for badly referenced: Running Info-Validate.
-* Obtaining TeX: Obtaining TeX.
-* Occurrences, listing with @occur: Using occur.
-* Optional and repeated arguments: Optional Arguments.
-* Options for makeinfo: makeinfo options.
-* Ordinary TeX commands, using: Using Ordinary TeX Commands.
-* Other Info files' nodes: Other Info Files.
-* Outline of file structure, showing it: Showing the Structure.
-* Overfull hboxes: Overfull hboxes.
-* Overview of Texinfo: Overview.
-* Page breaks: page.
-* Page delimiter in Texinfo mode: Showing the Structure.
-* Page headings: Headings.
-* Page numbering: Headings.
-* Page sizes for books: smallbook.
-* Pages, starting odd: setchapternewpage.
-* Paper size, European A4: A4 Paper.
-* Paragraph indentation: paragraphindent.
-* Paragraph, marking text within: Marking Text.
-* Parsing errors: makeinfo in Emacs.
-* Part of file formatting and printing: Printing.
-* Parts of a cross reference: Cross Reference Parts.
-* Parts of a master menu: Master Menu Parts.
-* Parts of a menu: Menu Parts.
-* Periods, inserting: Braces Atsigns Periods.
-* Permissions: Sample Permissions.
-* Permissions, printed: Copyright & Permissions.
-* PlainTeX: Using Ordinary TeX Commands.
-* Point, indicating it in a buffer: Point Glyph.
-* Pointer creation with makeinfo: makeinfo Pointer Creation.
-* Pointer validation with makeinfo: Pointer Validation.
-* Predefined indexing commands: Indexing Commands.
-* Predefined names for indices: syncodeindex.
-* Preparing to use TeX: Preparing for TeX.
-* Preventing line and page breaks: Breaks.
-* Print and format in Texinfo mode: Texinfo Mode Printing.
-* Print, format from Emacs shell: Within Emacs.
-* Printed book and manual characteristics: Printed Books.
-* Printed output, indicating it: Print Glyph.
-* Printed permissions: Copyright & Permissions.
-* Printing a region or buffer: Printing.
-* Printing an index: Printing Indices & Menus.
-* Printing cropmarks: Cropmarks and Magnification.
-* Problems, catching: Catching Mistakes.
-* Quotations: quotation.
-* Recommended names for keys: key.
-* Rectangle, ugly, black in hardcopy: Overfull hboxes.
-* References: Cross References.
-* References using @inforef: inforef.
-* References using @pxref: pxref.
-* References using @ref: ref.
-* References using @xref: xref.
-* Referring to other Info files: Other Info Files.
-* Refilling paragraphs: Refilling Paragraphs.
-* Region formatting and printing: Printing.
-* Region printing in Texinfo mode: Texinfo Mode Printing.
-* Repeated and optional arguments: Optional Arguments.
-* Required in Texinfo file: Minimum.
-* Requirements for formatting: Requirements Summary.
-* Requirements for include files: Include File Requirements.
-* Requirements for updating commands: Updating Requirements.
-* Result of an expression: result.
-* Running Info-validate: Using Info-validate.
-* Running makeinfo in Emacs: makeinfo in Emacs.
-* Running an Info formatter: Info Formatting.
-* Sample @include file: Sample Include File.
-* Sample function definition: Sample Function Definition.
-* Sample Texinfo file: Short Sample.
-* Sample Texinfo file, no comments: Sample Texinfo File.
-* Section structure of a file, showing it: Showing the Structure.
-* Shell, format, print from: Within Emacs.
-* Shell, running makeinfo in: makeinfo in Emacs.
-* Short nodes for menus: Menu Location.
-* Showing the section structure of a file: Showing the Structure.
-* Showing the structure of a file: Using texinfo-show-structure.
-* Single characters, commands to insert: Braces Atsigns Periods.
-* Size of printed book: smallbook.
-* Small book example: smallexample & smalllisp.
-* Small book size: smallbook.
-* Small caps font: Smallcaps.
-* Software copying permissions: Software Copying Permissions.
-* Sorting indices: Format/Print Hardcopy.
-* Spaces (blank lines): sp.
-* Special insertions: Insertions.
-* Special typesetting commands: Dots Bullets.
-* Specifying index entries: Indexing Commands.
-* Splitting an Info file manually: Splitting.
-* Start of header line: Start of Header.
-* Starting chapters: setchapternewpage.
-* Structure of a file, showing it: Showing the Structure.
-* Structure, catching mistakes in: Catching Mistakes.
-* Structuring of chapters: Structuring.
-* Subsection-like commands: unnumberedsubsec appendixsubsec subheading.
-* Subsub commands: subsubsection.
-* Syntactic conventions: Conventions.
-* Syntax, optional & repeated arguments: Optional Arguments.
-* Table of contents: Contents.
-* Tables and lists, making them: Lists and Tables.
-* Tables with indexes: ftable vtable.
-* Tables, making two-column: Two-column Tables.
-* Tabs; don't use!: Conventions.
-* Tag table, making automatically: Tag and Split Files.
-* Tag table, making manually: Unsplit.
-* Template for a definition: Def Cmd Template.
-* Texinfo file beginning: Beginning a File.
-* Texinfo file ending: Ending a File.
-* Texinfo file header: Header.
-* Texinfo file minimum: Minimum.
-* Texinfo file section structure, showing it: Showing the Structure.
-* Texinfo mode: Texinfo Mode.
-* Texinfo overview: Overview.
-* Texinfo printed book characteristics: Printed Books.
-* Text, conditionally visible: Conditionals.
-* Thin space between number, dimension: dmn.
-* Tips: Tips.
-* Title page: titlepage.
-* Titlepage end starts headings: end titlepage.
-* Titlepage permissions: Titlepage Permissions.
-* Tree structuring: Tree Structuring.
-* Two letter names for indices: syncodeindex.
-* Two named items for @table: itemx.
-* Two part menu entry: Less Cluttered Menu Entry.
-* Two `First' Lines for @deffn: deffnx.
-* Typesetting commands for dots, etc.: Dots Bullets.
-* Uncluttered menu entry: Less Cluttered Menu Entry.
-* Unique nodename requirement: Node Line Requirements.
-* Unprocessed text: Comments.
-* Unsplit file creation: Unsplit.
-* Updating nodes and menus: Updating Nodes and Menus.
-* Updating requirements: Updating Requirements.
-* Usage tips: Tips.
-* Validating a large file: Using Info-validate.
-* Validation of pointers: Pointer Validation.
-* Value of an expression, indicating: result.
-* Vertical whitespace (vskip): Copyright & Permissions.
-* Vertically holding text together: group.
-* Visibility of conditional text: Conditionals.
-* Words and phrases, marking them: Marking Text.
-* Writing a menu: Writing a Menu.
-* Writing an @node line: Writing a Node.
-
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-2 b/gnu/usr.bin/texinfo/info-files/texi.info-2
deleted file mode 100644
index 6ad094d..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-2
+++ /dev/null
@@ -1,1289 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Texinfo Mode, Next: Beginning a File, Prev: Overview, Up: Top
-
-Using Texinfo Mode
-******************
-
- You may edit a Texinfo file with any text editor you choose. A
-Texinfo file is no different from any other ASCII file. However, GNU
-Emacs comes with a special mode, called Texinfo mode, that provides
-Emacs commands and tools to help ease your work.
-
- This chapter describes features of GNU Emacs' Texinfo mode but not
-any features of the Texinfo formatting language. If you are reading
-this manual straight through from the beginning, you may want to skim
-through this chapter briefly and come back to it after reading
-succeeding chapters which describe the Texinfo formatting language in
-detail.
-
-* Menu:
-
-* Texinfo Mode Overview:: How Texinfo mode can help you.
-* Emacs Editing:: Texinfo mode adds to GNU Emacs' general
- purpose editing features.
-* Inserting:: How to insert frequently used @-commands.
-* Showing the Structure:: How to show the structure of a file.
-* Updating Nodes and Menus:: How to update or create new nodes and menus.
-* Info Formatting:: How to format for Info.
-* Printing:: How to format and print part or all of a file.
-* Texinfo Mode Summary:: Summary of all the Texinfo mode commands.
-
-
-File: texi.info, Node: Texinfo Mode Overview, Next: Emacs Editing, Up: Texinfo Mode
-
-Texinfo Mode Overview
-=====================
-
- Texinfo mode provides special features for working with Texinfo
-files:
-
- * Insert frequently used @commands.
-
- * Automatically create `@node' lines.
-
- * Show the structure of a Texinfo source file.
-
- * Automatically create or update the `Next',
- `Previous', and `Up' pointers of a node.
-
- * Automatically create or update menus.
-
- * Automatically create a master menu.
-
- * Format a part or all of a file for Info.
-
- * Typeset and print part or all of a file.
-
- Perhaps the two most helpful features are those for inserting
-frequently used @-commands and for creating node pointers and menus.
-
-
-File: texi.info, Node: Emacs Editing, Next: Inserting, Prev: Texinfo Mode Overview, Up: Texinfo Mode
-
-The Usual GNU Emacs Editing Commands
-====================================
-
- In most cases, the usual Text mode commands work the same in Texinfo
-mode as they do in Text mode. Texinfo mode adds new editing commands
-and tools to GNU Emacs' general purpose editing features. The major
-difference concerns filling. In Texinfo mode, the paragraph separation
-variable and syntax table are redefined so that Texinfo commands that
-should be on lines of their own are not inadvertently included in
-paragraphs. Thus, the `M-q' (`fill-paragraph') command will refill a
-paragraph but not mix an indexing command on a line adjacent to it into
-the paragraph.
-
- In addition, Texinfo mode sets the `page-delimiter' variable to the
-value of `texinfo-chapter-level-regexp'; by default, this is a regular
-expression matching the commands for chapters and their equivalents,
-such as appendices. With this value for the page delimiter, you can
-jump from chapter title to chapter title with the `C-x ]'
-(`forward-page') and `C-x [' (`backward-page') commands and narrow to a
-chapter with the `C-x p' (`narrow-to-page') command. (*Note Pages:
-(emacs)Pages, for details about the page commands.)
-
- You may name a Texinfo file however you wish, but the convention is
-to end a Texinfo file name with one of the three extensions `.texinfo',
-`.texi', or `.tex'. A longer extension is preferred, since it is
-explicit, but a shorter extension may be necessary for operating
-systems that limit the length of file names. GNU Emacs automatically
-enters Texinfo mode when you visit a file with a `.texinfo' or `.texi'
-extension. Also, Emacs switches to Texinfo mode when you visit a file
-that has `-*-texinfo-*-' in its first line. If ever you are in another
-mode and wish to switch to Texinfo mode, type `M-x texinfo-mode'.
-
- Like all other Emacs features, you can customize or enhance Texinfo
-mode as you wish. In particular, the keybindings are very easy to
-change. The keybindings described here are the default or standard
-ones.
-
-
-File: texi.info, Node: Inserting, Next: Showing the Structure, Prev: Emacs Editing, Up: Texinfo Mode
-
-Inserting Frequently Used Commands
-==================================
-
- Texinfo mode provides commands to insert various frequently used
-@-commands into the buffer. You can use these commands to save
-keystrokes.
-
- The insert commands are invoked by typing `C-c' twice and then the
-first letter of the @-command:
-
-`C-c C-c c'
-`M-x texinfo-insert-@code'
- Insert `@code{}' and put the cursor between the braces.
-
-`C-c C-c d'
-`M-x texinfo-insert-@dfn'
- Insert `@dfn{}' and put the cursor between the braces.
-
-`C-c C-c e'
-`M-x texinfo-insert-@end'
- Insert `@end' and attempt to insert the correct following word,
- such as `example' or `table'. (This command does not handle
- nested lists correctly, but inserts the word appropriate to the
- immediately preceding list.)
-
-`C-c C-c i'
-`M-x texinfo-insert-@item'
- Insert `@item' and put the cursor at the beginning of the next
- line.
-
-`C-c C-c k'
-`M-x texinfo-insert-@kbd'
- Insert `@kbd{}' and put the cursor between the braces.
-
-`C-c C-c n'
-`M-x texinfo-insert-@node'
- Insert `@node' and a comment line listing the sequence for the
- `Next', `Previous', and `Up' nodes. Leave point after the `@node'.
-
-`C-c C-c o'
-`M-x texinfo-insert-@noindent'
- Insert `@noindent' and put the cursor at the beginning of the next
- line.
-
-`C-c C-c s'
-`M-x texinfo-insert-@samp'
- Insert `@samp{}' and put the cursor between the braces.
-
-`C-c C-c t'
-`M-x texinfo-insert-@table'
- Insert `@table' followed by a SPC and leave the cursor after the
- SPC.
-
-`C-c C-c v'
-`M-x texinfo-insert-@var'
- Insert `@var{}' and put the cursor between the braces.
-
-`C-c C-c x'
-`M-x texinfo-insert-@example'
- Insert `@example' and put the cursor at the beginning of the next
- line.
-
-`C-c C-c {'
-`M-x texinfo-insert-braces'
- Insert `{}' and put the cursor between the braces.
-
-`C-c C-c }'
-`C-c C-c ]'
-`M-x up-list'
- Move from between a pair of braces forward past the closing brace.
- Typing `C-c C-c ]' is easier than typing `C-c C-c }', which is,
- however, more mnemonic; hence the two keybindings. (Also, you can
- move out from between braces by typing `C-f'.)
-
- To put a command such as `@code{...}' around an *existing* word,
-position the cursor in front of the word and type `C-u 1 C-c C-c c'.
-This makes it easy to edit existing plain text. The value of the
-prefix argument tells Emacs how many words following point to include
-between braces--1 for one word, 2 for two words, and so on. Use a
-negative argument to enclose the previous word or words. If you do not
-specify a prefix argument, Emacs inserts the @-command string and
-positions the cursor between the braces. This feature works only for
-those @-commands that operate on a word or words within one line, such
-as `@kbd' and `@var'.
-
- This set of insert commands was created after analyzing the frequency
-with which different @-commands are used in the `GNU Emacs Manual' and
-the `GDB Manual'. If you wish to add your own insert commands, you can
-bind a keyboard macro to a key, use abbreviations, or extend the code
-in `texinfo.el'.
-
- `C-c C-c C-d' (`texinfo-start-menu-description') is an insert
-command that works differently from the other insert commands. It
-inserts a node's section or chapter title in the space for the
-description in a menu entry line. (A menu entry has three parts, the
-entry name, the node name, and the description. Only the node name is
-required, but a description helps explain what the node is about.
-*Note The Parts of a Menu: Menu Parts.)
-
- To use `texinfo-start-menu-description', position point in a menu
-entry line and type `C-c C-c C-d'. The command looks for and copies
-the title that goes with the node name, and inserts the title as a
-description; it positions point at beginning of the inserted text so you
-can edit it. The function does not insert the title if the menu entry
-line already contains a description.
-
- This command is only an aid to writing descriptions; it does not do
-the whole job. You must edit the inserted text since a title tends to
-use the same words as a node name but a useful description uses
-different words.
-
-
-File: texi.info, Node: Showing the Structure, Next: Updating Nodes and Menus, Prev: Inserting, Up: Texinfo Mode
-
-Showing the Section Structure of a File
-=======================================
-
- You can show the section structure of a Texinfo file by using the
-`C-c C-s' command (`texinfo-show-structure'). This command shows the
-section structure of a Texinfo file by listing the lines that begin
-with the @-commands for `@chapter', `@section', and the like. It
-constructs what amounts to a table of contents. These lines are
-displayed in another buffer called the `*Occur*' buffer. In that
-buffer, you can position the cursor over one of the lines and use the
-`C-c C-c' command (`occur-mode-goto-occurrence'), to jump to the
-corresponding spot in the Texinfo file.
-
-`C-c C-s'
-`M-x texinfo-show-structure'
- Show the `@chapter', `@section', and such lines of a Texinfo file.
-
-`C-c C-c'
-`M-x occur-mode-goto-occurrence'
- Go to the line in the Texinfo file corresponding to the line under
- the cursor in the `*Occur*' buffer.
-
- If you call `texinfo-show-structure' with a prefix argument by
-typing `C-u C-c C-s', it will list not only those lines with the
-@-commands for `@chapter', `@section', and the like, but also the
-`@node' lines. (This is how the `texinfo-show-structure' command
-worked without an argument in the first version of Texinfo. It was
-changed because `@node' lines clutter up the `*Occur*' buffer and are
-usually not needed.) You can use `texinfo-show-structure' with a prefix
-argument to check whether the `Next', `Previous', and `Up' pointers of
-an `@node' line are correct.
-
- Often, when you are working on a manual, you will be interested only
-in the structure of the current chapter. In this case, you can mark
-off the region of the buffer that you are interested in with the `C-x
-n' (`narrow-to-region') command and `texinfo-show-structure' will work
-on only that region. To see the whole buffer again, use `C-x w'
-(`widen'). (*Note Narrowing: (emacs)Narrowing, for more information
-about the narrowing commands.)
-
- In addition to providing the `texinfo-show-structure' command,
-Texinfo mode sets the value of the page delimiter variable to match the
-chapter-level @-commands. This enables you to use the `C-x ]'
-(`forward-page') and `C-x [' (`backward-page') commands to move forward
-and backward by chapter, and to use the `C-x p' (`narrow-to-page')
-command to narrow to a chapter. *Note Pages: (emacs)Pages, for more
-information about the page commands.
-
-
-File: texi.info, Node: Updating Nodes and Menus, Next: Info Formatting, Prev: Showing the Structure, Up: Texinfo Mode
-
-Updating Nodes and Menus
-========================
-
- Texinfo mode provides commands for automatically creating or updating
-menus and node pointers. The commands are called "update" commands
-because their most frequent use is for updating a Texinfo file after
-you have worked on it; but you can use them to insert the `Next',
-`Previous', and `Up' pointers into an `@node' line that has none and to
-create menus in a file that has none.
-
- If you do not use the updating commands, you need to write menus and
-node pointers by hand, which is a tedious task.
-
-* Menu:
-
-* Updating Commands:: Five major updating commands.
-* Updating Requirements:: How to structure a Texinfo file for
- using the updating command.
-* Other Updating Commands:: How to indent descriptions, insert
- missing nodes lines, and update
- nodes in sequence.
-
-
-File: texi.info, Node: Updating Commands, Next: Updating Requirements, Up: Updating Nodes and Menus
-
-The Updating Commands
----------------------
-
- You can use the updating commands
-
- * to insert or update the `Next', `Previous', and `Up' pointers of a
- node,
-
- * to insert or update the menu for a section, and
-
- * to create a master menu for a Texinfo source file.
-
- You can also use the commands to update all the nodes and menus in a
-region or in a whole Texinfo file.
-
- The updating commands work only with conventional Texinfo files,
-which are structured hierarchically like books. In such files, a
-structuring command line must follow closely after each `@node' line,
-except for the `Top' `@node' line. (A "structuring command line" is a
-line beginning with `@chapter', `@section', or other similar command.)
-
- You can write the structuring command line on the line that follows
-immediately after an `@node' line or else on the line that follows
-after a single `@comment' line or a single `@ifinfo' line. You cannot
-interpose more than one line between the `@node' line and the
-structuring command line; and you may interpose only an `@comment' line
-or an `@ifinfo' line.
-
- Commands which work on a whole buffer require that the `Top' node be
-followed by a node with an `@chapter' or equivalent-level command.
-Note that the menu updating commands will not create a main or master
-menu for a Texinfo file that has only `@chapter'-level nodes! The menu
-updating commands only create menus *within* nodes for lower level
-nodes. To create a menu of chapters, you must provide a `Top' node.
-
- The menu updating commands remove menu entries that refer to other
-Info files since they do not refer to nodes within the current buffer.
-This is a deficiency. Rather than use menu entries, you can use cross
-references to refer to other Info files. None of the updating commands
-affect cross references.
-
- Texinfo mode has five updating commands that are used most often: two
-are for updating the node pointers or menu of a single node (or a
-region); two are for updating every node pointer and menu in a file;
-and one, the `texinfo-master-menu' command, is for creating a master
-menu for a complete file, and optionally, for updating every node and
-menu in the whole Texinfo file.
-
- The `texinfo-master-menu' command is the primary command:
-
-`C-c C-u m'
-`M-x texinfo-master-menu'
- Create or update a master menu that includes all the other menus
- (incorporating the descriptions from pre-existing menus, if any).
-
- With an argument (prefix argument, `C-u,' if interactive), first
- create or update all the nodes and all the regular menus in the
- buffer before constructing the master menu. (*Note The Top Node
- and Master Menu: The Top Node, for more about a master menu.)
-
- For `texinfo-master-menu' to work, the Texinfo file must have a
- `Top' node and at least one subsequent node.
-
- After extensively editing a Texinfo file, you can type the
- following:
-
- C-u M-x texinfo-master-menu
- or
- C-u C-c C-u m
-
- This updates all the nodes and menus completely and all at once.
-
- The other major updating commands do smaller jobs and are designed
-for the person who updates nodes and menus as he or she writes a
-Texinfo file.
-
- The commands are:
-
-`C-c C-u C-n'
-`M-x texinfo-update-node'
- Insert the `Next', `Previous', and `Up' pointers for the node that
- point is within (i.e., for the `@node' line preceding point). If
- the `@node' line has pre-existing `Next', `Previous', or `Up'
- pointers in it, the old pointers are removed and new ones inserted.
- With an argument (prefix argument, `C-u', if interactive), this
- command updates all `@node' lines in the region (which is the text
- between point and mark).
-
-`C-c C-u C-m'
-`M-x texinfo-make-menu'
- Create or update the menu in the node that point is within. With
- an argument (`C-u' as prefix argument, if interactive), the
- command makes or updates menus for the nodes which are either
- within or a part of the region.
-
- Whenever `texinfo-make-menu' updates an existing menu, the
- descriptions from that menu are incorporated into the new menu.
- This is done by copying descriptions from the existing menu to the
- entries in the new menu that have the same node names. If the
- node names are different, the descriptions are not copied to the
- new menu.
-
-`C-c C-u C-e'
-`M-x texinfo-every-node-update'
- Insert or update the `Next', `Previous', and `Up' pointers for
- every node in the buffer.
-
-`C-c C-u C-a'
-`M-x texinfo-all-menus-update'
- Create or update all the menus in the buffer. With an argument
- (`C-u' as prefix argument, if interactive), first insert or update
- all the node pointers before working on the menus.
-
- If a master menu exists, the `texinfo-all-menus-update' command
- updates it; but the command does not create a new master menu if
- none already exists. (Use the `texinfo-master-menu' command for
- that.)
-
- When working on a document that does not merit a master menu, you
- can type the following:
-
- C-u C-c C-u C-a
- or
- C-u M-x texinfo-all-menus-update
-
- This updates all the nodes and menus.
-
- The `texinfo-column-for-description' variable specifies the column
-to which menu descriptions are indented. By default, the value is 32
-although it is often useful to reduce it to as low as 24. You can set
-the variable with the `M-x edit-options' command (*note Editing
-Variable Values: (emacs)Edit Options.) or with the `M-x set-variable'
-command (*note Examining and Setting Variables: (emacs)Examining.).
-
- Also, the `texinfo-indent-menu-description' command may be used to
-indent existing menu descriptions to a specified column. Finally, if
-you wish, you can use the `texinfo-insert-node-lines' command to insert
-missing `@node' lines into a file. (*Note Other Updating Commands::,
-for more information.)
-
-
-File: texi.info, Node: Updating Requirements, Next: Other Updating Commands, Prev: Updating Commands, Up: Updating Nodes and Menus
-
-Updating Requirements
----------------------
-
- To use the updating commands, you must organize the Texinfo file
-hierarchically with chapters, sections, subsections, and the like.
-When you construct the hierarchy of the manual, do not `jump down' more
-than one level at a time: you can follow the `Top' node with a chapter,
-but not with a section; you can follow a chapter with a section, but
-not with a subsection. However, you may `jump up' any number of levels
-at one time--for example, from a subsection to a chapter.
-
- Each `@node' line, with the exception of the line for the `Top'
-node, must be followed by a line with a structuring command such as
-`@chapter', `@section', or `@unnumberedsubsec'.
-
- Each `@node' line/structuring-command line combination must look
-either like this:
-
- @node Comments, Minimum, Conventions, Overview
- @comment node-name, next, previous, up
- @section Comments
-
- or like this (without the `@comment' line):
-
- @node Comments, Minimum, Conventions, Overview
- @section Comments
-
-In this example, `Comments' is the name of both the node and the
-section. The next node is called `Minimum' and the previous node is
-called `Conventions'. The `Comments' section is within the `Overview'
-node, which is specified by the `Up' pointer. (Instead of an
-`@comment' line, you can write an `@ifinfo' line.)
-
- If a file has a `Top' node, it must be called `top' or `Top' and be
-the first node in the file.
-
- The menu updating commands create a menu of sections within a
-chapter, a menu of subsections within a section, and so on. This means
-that you must have a `Top' node if you want a menu of chapters.
-
- Incidentally, the `makeinfo' command will create an Info file for a
-hierarchically organized Texinfo file that lacks `Next', `Previous' and
-`Up' pointers. Thus, if you can be sure that your Texinfo file will be
-formatted with `makeinfo', you have no need for the `update node'
-commands. (*Note Creating an Info File: Create an Info File, for more
-information about `makeinfo'.) However, both `makeinfo' and the
-`texinfo-format-...' commands require that you insert menus in the file.
-
-
-File: texi.info, Node: Other Updating Commands, Prev: Updating Requirements, Up: Updating Nodes and Menus
-
-Other Updating Commands
------------------------
-
- In addition to the five major updating commands, Texinfo mode
-possesses several less frequently used updating commands:
-
-`M-x texinfo-insert-node-lines'
- Insert `@node' lines before the `@chapter', `@section', and other
- sectioning commands wherever they are missing throughout a region
- in a Texinfo file.
-
- With an argument (`C-u' as prefix argument, if interactive), the
- `texinfo-insert-node-lines' command not only inserts `@node' lines
- but also inserts the chapter or section titles as the names of the
- corresponding nodes. In addition, it inserts the titles as node
- names in pre-existing `@node' lines that lack names. Since node
- names should be more concise than section or chapter titles, you
- must manually edit node names so inserted.
-
- For example, the following marks a whole buffer as a region and
- inserts `@node' lines and titles throughout:
-
- C-x h C-u M-x texinfo-insert-node-lines
-
- (Note that this command inserts titles as node names in `@node'
- lines; the `texinfo-start-menu-description' command (*note
- Inserting Frequently Used Commands: Inserting.) inserts titles as
- descriptions in menu entries, a different action. However, in both
- cases, you need to edit the inserted text.)
-
-`M-x texinfo-multiple-files-update'
- Update nodes and menus in a document built from several separate
- files. With `C-u' as a prefix argument, create and insert a
- master menu in the outer file. With a numeric prefix argument,
- such as `C-u 2', first update all the menus and all the `Next',
- `Previous', and `Up' pointers of all the included files before
- creating and inserting a master menu in the outer file. The
- `texinfo-multiple-files-update' command is described in the
- appendix on `@include' files. *Note
- texinfo-multiple-files-update::.
-
-`M-x texinfo-indent-menu-description'
- Indent every description in the menu following point to the
- specified column. You can use this command to give yourself more
- space for descriptions. With an argument (`C-u' as prefix
- argument, if interactive), the `texinfo-indent-menu-description'
- command indents every description in every menu in the region.
- However, this command does not indent the second and subsequent
- lines of a multi-line description.
-
-`M-x texinfo-sequential-node-update'
- Insert the names of the nodes immediately following and preceding
- the current node as the `Next' or `Previous' pointers regardless
- of those nodes' hierarchical level. This means that the `Next'
- node of a subsection may well be the next chapter. Sequentially
- ordered nodes are useful for novels and other documents that you
- read through sequentially. (However, in Info, the `g* RET'
- command lets you look through the file sequentially, so
- sequentially ordered nodes are not strictly necessary.) With an
- argument (prefix argument, if interactive), the
- `texinfo-sequential-node-update' command sequentially updates all
- the nodes in the region.
-
-
-File: texi.info, Node: Info Formatting, Next: Printing, Prev: Updating Nodes and Menus, Up: Texinfo Mode
-
-Formatting for Info
-===================
-
- Texinfo mode provides several commands for formatting part or all of
-a Texinfo file for Info. Often, when you are writing a document, you
-want to format only part of a file--that is, a region.
-
- You can use either the `texinfo-format-region' or the
-`makeinfo-region' command to format a region:
-
-`C-c C-e C-r'
-`M-x texinfo-format-region'
-`C-c C-m C-r'
-`M-x makeinfo-region'
- Format the current region for Info.
-
- You can use either the `texinfo-format-buffer' or the
-`makeinfo-buffer' command to format a whole buffer:
-
-`C-c C-e C-b'
-`M-x texinfo-format-buffer'
-`C-c C-m C-b'
-`M-x makeinfo-buffer'
- Format the current buffer for Info.
-
- For example, after writing a Texinfo file, you can type the
-following:
-
- C-u C-c C-u m
-or
- C-u M-x texinfo-master-menu
-
-This updates all the nodes and menus. Then type the following to create
-an Info file:
-
- C-c C-m C-b
-or
- M-x makeinfo-buffer
-
- For the Info formatting commands to work, the file *must* include a
-line that has `@setfilename' in its header.
-
- Not all systems support the `makeinfo'-based formatting commands.
-
- *Note Create an Info File::, for details about Info formatting.
-
-
-File: texi.info, Node: Printing, Next: Texinfo Mode Summary, Prev: Info Formatting, Up: Texinfo Mode
-
-Formatting and Printing
-=======================
-
- Typesetting and printing a Texinfo file is a multi-step process in
-which you first create a file for printing (called a DVI file), and then
-print the file. Optionally, you may also create indices. To do this,
-you must run the `texindex' command after first running the `tex'
-typesetting command; and then you must run the `tex' command again.
-
- Often, when you are writing a document, you want to typeset and print
-only part of a file to see what it will look like. You can use the
-`texinfo-tex-region' and related commands for this purpose. Use the
-`texinfo-tex-buffer' command to format all of a buffer.
-
-`C-c C-t C-r'
-`M-x texinfo-tex-region'
- Run TeX on the region.
-
-`C-c C-t C-b'
-`M-x texinfo-tex-buffer'
- Run TeX on the buffer.
-
-`C-c C-t C-i'
-`M-x texinfo-texindex'
- Run `texindex' to sort the indices of a Texinfo file formatted with
- `texinfo-tex-region' or `texinfo-tex-buffer'. You must run the
- `tex' command a second time after sorting the raw index files.
-
-`C-c C-t C-p'
-`M-x texinfo-tex-print'
- Print the file (or the part of the file) previously formatted with
- `texinfo-tex-buffer' or `texinfo-tex-region'.
-
- For `texinfo-tex-region' or `texinfo-tex-buffer' to work, the file
-*must* start with a `\input texinfo' line and must include an
-`@settitle' line. The file must end with `@bye' on a line by itself.
-(When you use `texinfo-tex-region', you must surround the `@settitle'
-line with start-of-header and end-of-header lines.)
-
- *Note Format/Print Hardcopy::, for a description of the other TeX
-related commands, such as `tex-show-print-queue'.
-
-
-File: texi.info, Node: Texinfo Mode Summary, Prev: Printing, Up: Texinfo Mode
-
-Texinfo Mode Summary
-====================
-
- In Texinfo mode, each set of commands has default keybindings that
-begin with the same keys. All the commands that are custom-created for
-Texinfo mode begin with `C-c'. The keys are somewhat mnemonic.
-
-Insert Commands
----------------
-
- The insert commands are invoked by typing `C-c' twice and then the
-first letter of the @-command to be inserted. (It might make more
-sense mnemonically to use `C-c C-i', for `custom insert', but `C-c C-c'
-is quick to type.)
-
- C-c C-c c Insert `@code'.
- C-c C-c d Insert `@dfn'.
- C-c C-c e Insert `@end'.
- C-c C-c i Insert `@item'.
- C-c C-c n Insert `@node'.
- C-c C-c s Insert `@samp'.
- C-c C-c v Insert `@var'.
- C-c C-c { Insert braces.
- C-c C-c ]
- C-c C-c } Move out of enclosing braces.
-
- C-c C-c C-d Insert a node's section title
- in the space for the description
- in a menu entry line.
-
-Show Structure
---------------
-
- The `texinfo-show-structure' command is often used within a narrowed
-region.
-
- C-c C-s List all the headings.
-
-The Master Update Command
--------------------------
-
- The `texinfo-master-menu' command creates a master menu; and can be
-used to update every node and menu in a file as well.
-
- C-c C-u m
- M-x texinfo-master-menu
- Create or update a master menu.
-
- C-u C-c C-u m With `C-u' as a prefix argument, first
- create or update all nodes and regular
- menus, and then create a master menu.
-
-Update Pointers
----------------
-
- The update pointer commands are invoked by typing `C-c C-u' and then
-either typing `C-n' for `texinfo-update-node' or typing `C-e' for
-`texinfo-every-node-update'.
-
- C-c C-u C-n Update a node.
- C-c C-u C-e Update every node in the buffer.
-
-Update Menus
-------------
-
- Invoke the update menu commands by typing `C-c C-u' and then either
-`C-m' for `texinfo-make-menu' or `C-a' for `texinfo-all-menus-update'.
-To update both nodes and menus at the same time, precede `C-c C-u C-a'
-with `C-u'.
-
- C-c C-u C-m Make or update a menu.
-
- C-c C-u C-a Make or update all
- menus in a buffer.
-
- C-u C-c C-u C-a With `C-u' as a prefix argument,
- first create or update all nodes and
- then create or update all menus.
-
-Format for Info
----------------
-
- The Info formatting commands that are written in Emacs Lisp are
-invoked by typing `C-c C-e' and then either `C-r' for a region or `C-b'
-for the whole buffer.
-
- The Info formatting commands that are written in C and based on the
-`makeinfo' program are invoked by typing `C-c C-m' and then either
-`C-r' for a region or `C-b' for the whole buffer.
-
-Use the `texinfo-format...' commands:
-
- C-c C-e C-r Format the region.
- C-c C-e C-b Format the buffer.
-
-Use `makeinfo':
-
- C-c C-m C-r Format the region.
- C-c C-m C-b Format the buffer.
- C-c C-m C-l Recenter the `makeinfo' output buffer.
- C-c C-m C-k Kill the `makeinfo' formatting job.
-
-Typeset and Print
------------------
-
- The TeX typesetting and printing commands are invoked by typing `C-c
-C-t' and then another control command: `C-r' for `texinfo-tex-region',
-`C-b' for `texinfo-tex-buffer', and so on.
-
- C-c C-t C-r Run TeX on the region.
- C-c C-t C-b Run TeX on the buffer.
- C-c C-t C-i Run `texindex'.
- C-c C-t C-p Print the DVI file.
- C-c C-t C-q Show the print queue.
- C-c C-t C-d Delete a job from the print queue.
- C-c C-t C-k Kill the current TeX formatting job.
- C-c C-t C-x Quit a currently stopped TeX formatting job.
- C-c C-t C-l Recenter the output buffer.
-
-Other Updating Commands
------------------------
-
- The `other updating commands' do not have standard keybindings
-because they are rarely used.
-
- M-x texinfo-insert-node-lines
- Insert missing `@node' lines in region.
- With `C-u' as a prefix argument,
- use section titles as node names.
-
- M-x texinfo-multiple-files-update
- Update a multi-file document.
- With `C-u 2' as a prefix argument,
- create or update all nodes and menus
- in all included files first.
-
- M-x texinfo-indent-menu-description
- Indent descriptions.
-
- M-x texinfo-sequential-node-update
- Insert node pointers in strict sequence.
-
-
-File: texi.info, Node: Beginning a File, Next: Ending a File, Prev: Texinfo Mode, Up: Top
-
-Beginning a Texinfo File
-************************
-
- Certain pieces of information must be provided at the beginning of a
-Texinfo file, such as the name of the file and the title of the
-document.
-
-* Menu:
-
-* Four Parts:: Four parts begin a Texinfo file.
-* Sample Beginning:: Here is a sample beginning for a Texinfo file.
-* Header:: The very beginning of a Texinfo file.
-* Info Summary and Permissions:: Summary and copying permissions for Info.
-* Titlepage & Copyright Page:: Creating the title and copyright pages.
-* The Top Node:: Creating the `Top' node and master menu.
-* Software Copying Permissions:: Ensure that you and others continue to
- have the right to use and share software.
-
-
-File: texi.info, Node: Four Parts, Next: Sample Beginning, Up: Beginning a File
-
-Four Parts Begin a File
-=======================
-
- Generally, the beginning of a Texinfo file has four parts:
-
- 1. The header, delimited by special comment lines, that includes the
- commands for naming the Texinfo file and telling TeX what
- definitions' file to use when processing the Texinfo file.
-
- 2. A short statement of what the file is about, with a copyright
- notice and copying permissions. This is enclosed in `@ifinfo' and
- `@end ifinfo' commands so that the formatters place it only in the
- Info file.
-
- 3. A title page and copyright page, with a copyright notice and
- copying permissions. This is enclosed between `@titlepage' and
- `@end titlepage' commands. The title and copyright page appear
- only in the printed manual.
-
- 4. The `Top' node that contains a menu for the whole Info file. The
- contents of this node appear only in the Info file.
-
- Also, optionally, you may include the copying conditions for a
-program and a warranty disclaimer. The copying section will be
-followed by an introduction or else by the first chapter of the manual.
-
- Since the copyright notice and copying permissions for the Texinfo
-document (in contrast to the copying permissions for a program) are in
-parts that appear only in the Info file or only in the printed manual,
-this information must be given twice.
-
-
-File: texi.info, Node: Sample Beginning, Next: Header, Prev: Four Parts, Up: Beginning a File
-
-Sample Texinfo File Beginning
-=============================
-
- The following sample shows what is needed.
-
- \input texinfo @c -*-texinfo-*-
- @c %**start of header
- @setfilename NAME-OF-INFO-FILE
- @settitle NAME-OF-MANUAL
- @setchapternewpage odd
- @c %**end of header
-
- @ifinfo
- This file documents ...
-
- Copyright YEAR COPYRIGHT-OWNER
-
- Permission is granted to ...
- @end ifinfo
-
- @c This title page illustrates only one of the
- @c two methods of forming a title page.
-
- @titlepage
- @title NAME-OF-MANUAL-WHEN-PRINTED
- @subtitle SUBTITLE-IF-ANY
- @subtitle SECOND-SUBTITLE
- @author AUTHOR
-
- @c The following two commands
- @c start the copyright page.
- @page
- @vskip 0pt plus 1filll
- Copyright @copyright{} YEAR COPYRIGHT-OWNER
-
- Published by ...
-
- Permission is granted to ...
- @end titlepage
-
- @node Top, Overview, (dir), (dir)
-
- @ifinfo
- This document describes ...
-
- This document applies to version ...
- of the program named ...
- @end ifinfo
-
- @menu
- * Copying:: Your rights and freedoms.
- * First Chapter:: Getting started ...
- * Second Chapter:: ...
- ...
- ...
- @end menu
-
- @node First Chapter, Second Chapter, top, top
- @comment node-name, next, previous, up
- @chapter First Chapter
- @cindex Index entry for First Chapter
-
-
-File: texi.info, Node: Header, Next: Info Summary and Permissions, Prev: Sample Beginning, Up: Beginning a File
-
-The Texinfo File Header
-=======================
-
- Texinfo files start with at least three lines that provide Info and
-TeX with necessary information. These are the `\input texinfo' line,
-the `@settitle' line, and the `@setfilename' line. If you want to run
-TeX on just a part of the Texinfo File, you must write the `@settitle'
-and `@setfilename' lines between start-of-header and end-of-header
-lines.
-
- Thus, the beginning of a Texinfo file looks like this:
-
- \input texinfo @c -*-texinfo-*-
- @setfilename sample.info
- @settitle Sample Document
-
-or else like this:
-
- \input texinfo @c -*-texinfo-*-
- @c %**start of header
- @setfilename sample.info
- @settitle Sample Document
- @c %**end of header
-
-* Menu:
-
-* First Line:: The first line of a Texinfo file.
-* Start of Header:: Formatting a region requires this.
-* setfilename:: Tell Info the name of the Info file.
-* settitle:: Create a title for the printed work.
-* setchapternewpage:: Start chapters on right-hand pages.
-* paragraphindent:: An option to specify paragraph indentation.
-* End of Header:: Formatting a region requires this.
-
-
-File: texi.info, Node: First Line, Next: Start of Header, Up: Header
-
-The First Line of a Texinfo File
---------------------------------
-
- Every Texinfo file that is to be the top-level input to TeX must
-begin with a line that looks like this:
-
- \input texinfo @c -*-texinfo-*-
-
-This line serves two functions:
-
- 1. When the file is processed by TeX, the `\input texinfo' command
- tells TeX to load the macros needed for processing a Texinfo file.
- These are in a file called `texinfo.tex', which is usually located
- in the `/usr/lib/tex/macros' directory. TeX uses the backslash,
- `\', to mark the beginning of a command, just as Texinfo uses `@'.
- The `texinfo.tex' file causes the switch from `\' to `@'; before
- the switch occurs, TeX requires `\', which is why it appears at
- the beginning of the file.
-
- 2. When the file is edited in GNU Emacs, the `-*-texinfo-*-' mode
- specification tells Emacs to use Texinfo mode.
-
-
-File: texi.info, Node: Start of Header, Next: setfilename, Prev: First Line, Up: Header
-
-Start of Header
----------------
-
- Write a start-of-header line on the second line of a Texinfo file.
-Follow the start-of-header line with `@setfilename' and `@settitle'
-lines and, optionally, with other command lines, such as `@smallbook'
-or `@footnotestyle'; and then by an end-of-header line (*note End of
-Header::.).
-
- With these lines, you can format part of a Texinfo file for Info or
-typeset part for printing.
-
- A start-of-header line looks like this:
-
- @c %**start of header
-
- The odd string of characters, `%**', is to ensure that no other
-comment is accidentally taken for a start-of-header line.
-
-
-File: texi.info, Node: setfilename, Next: settitle, Prev: Start of Header, Up: Header
-
-`@setfilename'
---------------
-
- In order to be made into an Info file, a Texinfo file must contain a
-line that looks like this:
-
- @setfilename INFO-FILE-NAME
-
- Write the `@setfilename' command at the beginning of a line and
-follow it on the same line by the Info file name. Do not write
-anything else on the line; anything on the line after the command is
-considered part of the file name, including a comment.
-
- The `@setfilename' line specifies the name of the Info file to be
-generated. This name should be different from the name of the Texinfo
-file. The convention is to write a name with a `.info' extension, to
-produce an Info file name such as `texinfo.info'.
-
- Some operating systems cannot handle long file names. You can run
-into a problem even when the file name you specify is itself short
-enough. This occurs because the Info formatters split a long Info file
-into short indirect subfiles, and name them by appending `-1', `-2',
-..., `-10', `-11', and so on, to the original file name. (*Note Tag
-Files and Split Files: Tag and Split Files.) The subfile name
-`texinfo.info-10', for example, is too long for some systems; so the
-Info file name for this document is actually `texinfo' rather than
-`texinfo.info'.
-
- The Info formatting commands ignore everything written before the
-`@setfilename' line, which is why the very first line of the file (the
-`\input' line) does not need to be commented out. The `@setfilename'
-line is ignored when you typeset a printed manual.
-
-
-File: texi.info, Node: settitle, Next: setchapternewpage, Prev: setfilename, Up: Header
-
-`@settitle'
------------
-
- In order to be made into a printed manual, a Texinfo file must
-contain a line that looks like this:
-
- @settitle TITLE
-
- Write the `@settitle' command at the beginning of a line and follow
-it on the same line by the title. This tells TeX the title to use in a
-header or footer. Do not write anything else on the line; anything on
-the line after the command is considered part of the title, including a
-comment.
-
- Conventionally, TeX formats a Texinfo file for double-sided output
-so as to print the title in the left-hand (even-numbered) page headings
-and the current chapter titles in the right-hand (odd-numbered) page
-headings. (TeX learns the title of each chapter from each `@chapter'
-command.) Page footers are not printed.
-
- Even if you are printing in a single-sided style, TeX looks for an
-`@settitle' command line, in case you include the manual title in the
-heading.
-
- The `@settitle' command should precede everything that generates
-actual output in TeX.
-
- Although the title in the `@settitle' command is usually the same as
-the title on the title page, it does not affect the title as it appears
-on the title page. Thus, the two do not need not match exactly; and
-the title in the `@settitle' command can be a shortened or expanded
-version of the title as it appears on the title page. (*Note
-`@titlepage': titlepage.)
-
- TeX prints page headings only for that text that comes after the
-`@end titlepage' command in the Texinfo file, or that comes after an
-`@headings' command that turns on headings. (*Note The `@headings'
-Command: headings on off, for more information.)
-
- You may, if you wish, create your own, customized headings and
-footings. *Note Page Headings: Headings, for a detailed discussion of
-this process.
-
-
-File: texi.info, Node: setchapternewpage, Next: paragraphindent, Prev: settitle, Up: Header
-
-`@setchapternewpage'
---------------------
-
- In a book or a manual, text is usually printed on both sides of the
-paper, chapters start on right-hand pages, and right-hand pages have
-odd numbers. But in short reports, text often is printed only on one
-side of the paper. Also in short reports, chapters sometimes do not
-start on new pages, but are printed on the same page as the end of the
-preceding chapter, after a small amount of vertical whitespace.
-
- You can use the `@setchapternewpage' command with various arguments
-to specify how TeX should start chapters and whether it should typeset
-pages for printing on one or both sides of the paper (single-sided or
-double-sided printing).
-
- Write the `@setchapternewpage' command at the beginning of a line
-followed by its argument.
-
- For example, you would write the following to cause each chapter to
-start on a fresh odd-numbered page:
-
- @setchapternewpage odd
-
- You can specify one of three alternatives with the
-`@setchapternewpage' command:
-
-`@setchapternewpage off'
- Cause TeX to typeset a new chapter on the same page as the last
- chapter, after skipping some vertical whitespace. Also, cause TeX
- to format page headers for single-sided printing. (You can
- override the headers format with the `@headings double' command;
- see *Note The `@headings' Command: headings on off.)
-
-`@setchapternewpage on'
- Cause TeX to start new chapters on new pages and to typeset page
- headers for single-sided printing. This is the form most often
- used for short reports.
-
- This alternative is the default.
-
-`@setchapternewpage odd'
- Cause TeX to start new chapters on new, odd-numbered pages
- (right-handed pages) and to typeset for double-sided printing.
- This is the form most often used for books and manuals.
-
-Texinfo does not have an `@setchapternewpage even' command.
-
-(You can countermand or modify an `@setchapternewpage' command with an
-`@headings' command. *Note The `@headings' Command: headings on off.)
-
- At the beginning of a manual or book, pages are not numbered--for
-example, the title and copyright pages of a book are not numbered. By
-convention, table of contents pages are numbered with roman numerals
-and not in sequence with the rest of the document.
-
- Since an Info file does not have pages, the `@setchapternewpage'
-command has no effect on it.
-
- Usually, you do not write an `@setchapternewpage' command for
-single-sided printing, but accept the default which is to typeset for
-single-sided printing and to start new chapters on new pages. Usually,
-you write an `@setchapternewpage odd' command for double-sided printing.
-
-
-File: texi.info, Node: paragraphindent, Next: End of Header, Prev: setchapternewpage, Up: Header
-
-Paragraph Indenting
--------------------
-
- The Info formatting commands may insert spaces at the beginning of
-the first line of each paragraph, thereby indenting that paragraph. You
-can use the `@paragraphindent' command to specify the indentation.
-Write an `@paragraphindent' command at the beginning of a line followed
-by either `asis' or a number. The template is:
-
- @paragraphindent INDENT
-
- The Info formatting commands indent according to the value of INDENT:
-
- * If the value of INDENT is `asis', the Info formatting commands do
- not change the existing indentation.
-
- * If the value of INDENT is 0, the Info formatting commands delete
- existing indentation.
-
- * If the value of INDENT is greater than 0, the Info formatting
- commands indent the paragraph by that number of spaces.
-
- The default value of INDENT is `asis'.
-
- Write the `@paragraphindent' command before or shortly after the
-end-of-header line at the beginning of a Texinfo file. (If you write
-the command between the start-of-header and end-of-header lines, the
-region formatting commands indent paragraphs as specified.)
-
- A peculiarity of `texinfo-format-buffer' and `texinfo-format-region'
-is that they do not indent (nor fill) paragraphs that contain `@w' or
-`@*' commands. *Note Refilling Paragraphs::, for a detailed
-description of what goes on.
-
-
-File: texi.info, Node: End of Header, Prev: paragraphindent, Up: Header
-
-End of Header
--------------
-
- Follow the header lines with an end-of-header line. An
-end-of-header line looks like this:
-
- @c %**end of header
-
- If you include the `@setchapternewpage' command between the
-start-of-header and end-of-header lines, TeX will typeset a region as
-that command specifies. Similarly, if you include an `@smallbook'
-command between the start-of-header and end-of-header lines, TeX will
-typeset a region in the "small" book format.
-
- The reason for the odd string of characters (`%**') is so that the
-`texinfo-tex-region' command does not accidentally find something that
-it should not when it is looking for the header.
-
- The start-of-header line and the end-of-header line are Texinfo mode
-variables that you can change.
-
-
-File: texi.info, Node: Info Summary and Permissions, Next: Titlepage & Copyright Page, Prev: Header, Up: Beginning a File
-
-Summary and Copying Permissions for Info
-========================================
-
- The title page and the copyright page appear only in the printed
-copy of the manual; therefore, the same information must be inserted in
-a section that appears only in the Info file. This section usually
-contains a brief description of the contents of the Info file, a
-copyright notice, and copying permissions.
-
- The copyright notice should read:
-
- Copyright YEAR COPYRIGHT-OWNER
-
-and be put on a line by itself.
-
- Standard text for the copyright permissions is contained in an
-appendix to this manual; see *Note `ifinfo' Copying Permissions: ifinfo
-Permissions, for the complete text.
-
- The permissions text appears in an Info file *before* the first
-node. This mean that a reader does *not* see this text when reading
-the file using Info, except when using the advanced Info command `g *'.
-
-
-File: texi.info, Node: Titlepage & Copyright Page, Next: The Top Node, Prev: Info Summary and Permissions, Up: Beginning a File
-
-The Title and Copyright Pages
-=============================
-
- A manual's name and author are usually printed on a title page.
-Sometimes copyright information is printed on the title page as well;
-more often, copyright information is printed on the back of the title
-page.
-
- The title and copyright pages appear in the printed manual, but not
-in the Info file. Because of this, it is possible to use several
-slightly obscure TeX typesetting commands that cannot be used in an
-Info file. In addition, this part of the beginning of a Texinfo file
-contains the text of the copying permissions that will appear in the
-printed manual.
-
- *Note Titlepage Copying Permissions: Titlepage Permissions, for the
-standard text for the copyright permissions.
-
-* Menu:
-
-* titlepage:: Create a title for the printed document.
-* titlefont center sp:: The `@titlefont', `@center',
- and `@sp' commands.
-* title subtitle author:: The `@title', `@subtitle',
- and `@author' commands.
-* Copyright & Permissions:: How to write the copyright notice and
- include copying permissions.
-* end titlepage:: Turn on page headings after the title and
- copyright pages.
-* headings on off:: An option for turning headings on and off
- and double or single sided printing.
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-3 b/gnu/usr.bin/texinfo/info-files/texi.info-3
deleted file mode 100644
index 1058a1a..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-3
+++ /dev/null
@@ -1,1262 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: titlepage, Next: titlefont center sp, Up: Titlepage & Copyright Page
-
-`@titlepage'
-------------
-
- Start the material for the title page and following copyright page
-with `@titlepage' on a line by itself and end it with `@end titlepage'
-on a line by itself.
-
- The `@end titlepage' command starts a new page and turns on page
-numbering. (*Note Page Headings: Headings, for details about how to
-generate of page headings.) All the material that you want to appear
-on unnumbered pages should be put between the `@titlepage' and `@end
-titlepage' commands. By using the `@page' command you can force a page
-break within the region delineated by the `@titlepage' and `@end
-titlepage' commands and thereby create more than one unnumbered page.
-This is how the copyright page is produced. (The `@titlepage' command
-might perhaps have been better named the `@titleandadditionalpages'
-command, but that would have been rather long!)
-
- When you write a manual about a computer program, you should write
-the version of the program to which the manual applies on the title
-page. If the manual changes more frequently than the program or is
-independent of it, you should also include an edition number(1) for the
-manual. This helps readers keep track of which manual is for which
-version of the program. (The `Top' node should also contain this
-information; see *Note `@top': makeinfo top.)
-
- Texinfo provides two methods for creating a title page. One method
-uses the `@titlefont', `@sp', and `@center' commands to generate a
-title page in which the words on the page are centered.
-
- The second method uses the `@title', `@subtitle', and `@author'
-commands to create a title page with black rules under the title and
-author lines and the subtitle text set flush to the right hand side of
-the page. With this method, you do not specify any of the actual
-formatting of the title page. You specify the text you want, and
-Texinfo does the formatting. You may use either method.
-
- ---------- Footnotes ----------
-
- (1) We have found that it is helpful to refer to versions of
-manuals as `editions' and versions of programs as `versions';
-otherwise, we find we are liable to confuse each other in conversation
-by referring to both the documentation and the software with the same
-words.
-
-
-File: texi.info, Node: titlefont center sp, Next: title subtitle author, Prev: titlepage, Up: Titlepage & Copyright Page
-
-`@titlefont', `@center', and `@sp'
-----------------------------------
-
- You can use the `@titlefont', `@sp', and `@center' commands to
-create a title page for a printed document. (This is the first of the
-two methods for creating a title page in Texinfo.)
-
- Use the `@titlefont' command to select a large font suitable for the
-title itself.
-
- For example:
-
- @titlefont{Texinfo}
-
- Use the `@center' command at the beginning of a line to center the
-remaining text on that line. Thus,
-
- @center @titlefont{Texinfo}
-
-centers the title, which in this example is "Texinfo" printed in the
-title font.
-
- Use the `@sp' command to insert vertical space. For example:
-
- @sp 2
-
-This inserts two blank lines on the printed page. (*Note `@sp': sp,
-for more information about the `@sp' command.)
-
- A template for this method looks like this:
-
- @titlepage
- @sp 10
- @center @titlefont{NAME-OF-MANUAL-WHEN-PRINTED}
- @sp 2
- @center SUBTITLE-IF-ANY
- @sp 2
- @center AUTHOR
- ...
- @end titlepage
-
- The spacing of the example fits an 8 1/2 by 11 inch manual.
-
-
-File: texi.info, Node: title subtitle author, Next: Copyright & Permissions, Prev: titlefont center sp, Up: Titlepage & Copyright Page
-
-`@title', `@subtitle', and `@author'
-------------------------------------
-
- You can use the `@title', `@subtitle', and `@author' commands to
-create a title page in which the vertical and horizontal spacing is
-done for you automatically. This contrasts with the method described in
-the previous section, in which the `@sp' command is needed to adjust
-vertical spacing.
-
- Write the `@title', `@subtitle', or `@author' commands at the
-beginning of a line followed by the title, subtitle, or author.
-
- The `@title' command produces a line in which the title is set flush
-to the left-hand side of the page in a larger than normal font. The
-title is underlined with a black rule.
-
- The `@subtitle' command sets subtitles in a normal-sized font flush
-to the right-hand side of the page.
-
- The `@author' command sets the names of the author or authors in a
-middle-sized font flush to the left-hand side of the page on a line
-near the bottom of the title page. The names are underlined with a
-black rule that is thinner than the rule that underlines the title.
-(The black rule only occurs if the `@author' command line is followed
-by an `@page' command line.)
-
- There are two ways to use the `@author' command: you can write the
-name or names on the remaining part of the line that starts with an
-`@author' command:
-
- @author by Jane Smith and John Doe
-
-or you can write the names one above each other by using two (or more)
-`@author' commands:
-
- @author Jane Smith
- @author John Doe
-
-(Only the bottom name is underlined with a black rule.)
-
- A template for this method looks like this:
-
- @titlepage
- @title NAME-OF-MANUAL-WHEN-PRINTED
- @subtitle SUBTITLE-IF-ANY
- @subtitle SECOND-SUBTITLE
- @author AUTHOR
- @page
- ...
- @end titlepage
-
-Contrast this form with the form of a title page written using the
-`@sp', `@center', and `@titlefont' commands:
-
- @titlepage
- @sp 10
- @center @titlefont{Name of Manual When Printed}
- @sp 2
- @center Subtitle, If Any
- @sp 1
- @center Second subtitle
- @sp 2
- @center Author
- @page
- ...
- @end titlepage
-
-
-File: texi.info, Node: Copyright & Permissions, Next: end titlepage, Prev: title subtitle author, Up: Titlepage & Copyright Page
-
-Copyright Page and Permissions
-------------------------------
-
- By international treaty, the copyright notice for a book should be
-either on the title page or on the back of the title page. The
-copyright notice should include the year followed by the name of the
-organization or person who owns the copyright.
-
- When the copyright notice is on the back of the title page, that page
-is customarily not numbered. Therefore, in Texinfo, the information on
-the copyright page should be within `@titlepage' and `@end titlepage'
-commands.
-
- Use the `@page' command to cause a page break. To push the
-copyright notice and the other text on the copyright page towards the
-bottom of the page, you can write a somewhat mysterious line after the
-`@page' command that reads like this:
-
- @vskip 0pt plus 1filll
-
-This is a TeX command that is not supported by the Info formatting
-commands. The `@vskip' command inserts whitespace. The `0pt plus
-1filll' means to put in zero points of mandatory whitespace, and as
-much optional whitespace as needed to push the following text to the
-bottom of the page. Note the use of three `l's in the word `filll';
-this is the correct usage in TeX.
-
- In a printed manual, the `@copyright{}' command generates a `c'
-inside a circle. (In Info, it generates `(C)'.) The copyright notice
-itself has the following legally defined sequence:
-
- Copyright (C) YEAR COPYRIGHT-OWNER
-
- It is customary to put information on how to get a manual after the
-copyright notice, followed by the copying permissions for the manual.
-
- Note that permissions must be given here as well as in the summary
-segment within `@ifinfo' and `@end ifinfo' that immediately follows the
-header since this text appears only in the printed manual and the
-`ifinfo' text appears only in the Info file.
-
- *Note Sample Permissions::, for the standard text.
-
-
-File: texi.info, Node: end titlepage, Next: headings on off, Prev: Copyright & Permissions, Up: Titlepage & Copyright Page
-
-Heading Generation
-------------------
-
- An `@end titlepage' command on a line by itself not only marks the
-end of the title and copyright pages, but also causes TeX to start
-generating page headings and page numbers.
-
- To repeat what is said elsewhere, Texinfo has two standard page
-heading formats, one for documents which are printed on one side of
-each sheet of paper (single-sided printing), and the other for
-documents which are printed on both sides of each sheet (double-sided
-printing). (*Note `@setchapternewpage': setchapternewpage.) You can
-specify these formats in different ways:
-
- * The conventional way is to write an `@setchapternewpage' command
- before the title page commands, and then have the `@end titlepage'
- command start generating page headings in the manner desired.
- (*Note `@setchapternewpage': setchapternewpage.)
-
- * Alternatively, you can use the `@headings' command to prevent page
- headings from being generated or to start them for either single or
- double-sided printing. (Write an `@headings' command immediately
- after the `@end titlepage' command. *Note The `@headings'
- Command: headings on off, for more information.)
-
- * Or, you may specify your own page heading and footing format.
- *Note Page Headings: Headings, for detailed information about page
- headings and footings.
-
- Most documents are formatted with the standard single-sided or
-double-sided format, using `@setchapternewpage odd' for double-sided
-printing and no `@setchapternewpage' command for single-sided printing.
-
-
-File: texi.info, Node: headings on off, Prev: end titlepage, Up: Titlepage & Copyright Page
-
-The `@headings' Command
------------------------
-
- The `@headings' command is rarely used. It specifies what kind of
-page headings and footings to print on each page. Usually, this is
-controlled by the `@setchapternewpage' command. You need the
-`@headings' command only if the `@setchapternewpage' command does not
-do what you want, or if you want to turn off pre-defined page headings
-prior to defining your own. Write an `@headings' command immediately
-after the `@end titlepage' command.
-
- There are four ways to use the `@headings' command:
-
-`@headings off'
- Turn off printing of page headings.
-
-`@headings single'
- Turn on page headings appropriate for single-sided printing.
-
-`@headings double'
-`@headings on'
- Turn on page headings appropriate for double-sided printing. The
- two commands, `@headings on' and `@headings double', are
- synonymous.
-
- For example, suppose you write `@setchapternewpage off' before the
-`@titlepage' command to tell TeX to start a new chapter on the same
-page as the end of the last chapter. This command also causes TeX to
-typeset page headers for single-sided printing. To cause TeX to
-typeset for double sided printing, write `@headings double' after the
-`@end titlepage' command.
-
- You can stop TeX from generating any page headings at all by writing
-`@headings off' on a line of its own immediately after the line
-containing the `@end titlepage' command, like this:
-
- @end titlepage
- @headings off
-
-The `@headings off' command overrides the `@end titlepage' command,
-which would otherwise cause TeX to print page headings.
-
- You can also specify your own style of page heading and footing.
-*Note Page Headings: Headings, for more information.
-
-
-File: texi.info, Node: The Top Node, Next: Software Copying Permissions, Prev: Titlepage & Copyright Page, Up: Beginning a File
-
-The `Top' Node and Master Menu
-==============================
-
- The `Top' node is the node from which you enter an Info file.
-
- A `Top' node should contain a brief description of the Info file and
-an extensive, master menu for the whole Info file. This helps the
-reader understand what the Info file is about. Also, you should write
-the version number of the program to which the Info file applies; or,
-at least, the edition number.
-
- The contents of the `Top' node should appear only in the Info file;
-none of it should appear in printed output, so enclose it between
-`@ifinfo' and `@end ifinfo' commands. (TeX does not print either an
-`@node' line or a menu; they appear only in Info; strictly speaking,
-you are not required to enclose these parts between `@ifinfo' and `@end
-ifinfo', but it is simplest to do so. *Note Conditionally Visible
-Text: Conditionals.)
-
-* Menu:
-
-* Title of Top Node:: Sketch what the file is about.
-* Master Menu Parts:: A master menu has three or more parts.
-
-
-File: texi.info, Node: Title of Top Node, Next: Master Menu Parts, Up: The Top Node
-
-`Top' Node Title
-----------------
-
- Sometimes, you will want to place an `@top' sectioning command line
-containing the title of the document immediately after the `@node Top'
-line (*note The `@top' Sectioning Command: makeinfo top command., for
-more information).
-
- For example, the beginning of the Top node of this manual contains an
-`@top' sectioning command, a short description, and edition and version
-information. It looks like this:
-
- ...
- @end titlepage
-
- @ifinfo
- @node Top, Copying, (dir), (dir)
- @top Texinfo
-
- Texinfo is a documentation system...
-
- This is edition...
- ...
- @end ifinfo
-
- @menu
- * Copying:: Texinfo is freely
- redistributable.
- * Overview:: What is Texinfo?
- ...
- @end menu
-
- In a `Top' node, the `Previous', and `Up' nodes usually refer to the
-top level directory of the whole Info system, which is called `(dir)'.
-The `Next' node refers to the first node that follows the main or master
-menu, which is usually the copying permissions, introduction, or first
-chapter.
-
-
-File: texi.info, Node: Master Menu Parts, Prev: Title of Top Node, Up: The Top Node
-
-Parts of a Master Menu
-----------------------
-
- A "master menu" is a detailed main menu listing all the nodes in a
-file.
-
- A master menu is enclosed in `@menu' and `@end menu' commands and
-does not appear in the printed document.
-
- Generally, a master menu is divided into parts.
-
- * The first part contains the major nodes in the Texinfo file: the
- nodes for the chapters, chapter-like sections, and the appendices.
-
- * The second part contains nodes for the indices.
-
- * The third and subsequent parts contain a listing of the other,
- lower level nodes, often ordered by chapter. This way, rather
- than go through an intermediary menu, an inquirer can go directly
- to a particular node when searching for specific information.
- These menu items are not required; add them if you think they are a
- convenience.
-
- Each section in the menu can be introduced by a descriptive line. So
-long as the line does not begin with an asterisk, it will not be
-treated as a menu entry. (*Note Writing a Menu::, for more
-information.)
-
- For example, the master menu for this manual looks like the following
-(but has many more entries):
-
- @menu
- * Copying:: Texinfo is freely
- redistributable.
- * Overview:: What is Texinfo?
- * Texinfo Mode:: Special features in GNU Emacs.
- ...
- ...
- * Command and Variable Index::
- An entry for each @-command.
- * Concept Index:: An entry for each concept.
-
- --- The Detailed Node Listing ---
-
- Overview of Texinfo
-
- * Info Files:: What is an Info file?
- * Printed Manuals:: Characteristics of
- a printed manual.
- ...
- ...
-
- Using Texinfo Mode
-
- * Info on a Region:: Formatting part of a file
- for Info.
- ...
- ...
- @end menu
-
-
-File: texi.info, Node: Software Copying Permissions, Prev: The Top Node, Up: Beginning a File
-
-Software Copying Permissions
-============================
-
- If the Texinfo file has a section containing the "General Public
-License" and the distribution information and a warranty disclaimer for
-the software that is documented, this section usually follows the `Top'
-node. The General Public License is very important to Project GNU
-software. It ensures that you and others will continue to have a right
-to use and share the software.
-
- The copying and distribution information and the disclaimer are
-followed by an introduction or else by the first chapter of the manual.
-
- Although an introduction is not a required part of a Texinfo file, it
-is very helpful. Ideally, it should state clearly and concisely what
-the file is about and who would be interested in reading it. In
-general, an introduction would follow the licensing and distribution
-information, although sometimes people put it earlier in the document.
-Usually, an introduction is put in an `@unnumbered' section. (*Note
-The `@unnumbered' and `@appendix' Commands: unnumbered & appendix.)
-
-
-File: texi.info, Node: Ending a File, Next: Structuring, Prev: Beginning a File, Up: Top
-
-Ending a Texinfo File
-*********************
-
- The end of a Texinfo file should include the commands that create
-indices and generate detailed and summary tables of contents. And it
-must include the `@bye' command that marks the last line processed by
-TeX.
-
- For example:
-
- @node Concept Index, , Variables Index, Top
- @c node-name, next, previous, up
- @unnumbered Concept Index
-
- @printindex cp
-
- @contents
- @bye
-
-* Menu:
-
-* Printing Indices & Menus:: How to print an index in hardcopy and
- generate index menus in Info.
-* Contents:: How to create a table of contents.
-* File End:: How to mark the end of a file.
-
-
-File: texi.info, Node: Printing Indices & Menus, Next: Contents, Up: Ending a File
-
-Index Menus and Printing an Index
-=================================
-
- To print an index means to include it as part of a manual or Info
-file. This does not happen automatically just because you use
-`@cindex' or other index-entry generating commands in the Texinfo file;
-those just cause the raw data for the index to be accumulated. To
-generate an index, you must include the `@printindex' command at the
-place in the document where you want the index to appear. Also, as
-part of the process of creating a printed manual, you must run a
-program called `texindex' (*note Format/Print Hardcopy::.) to sort the
-raw data to produce a sorted index file. The sorted index file is what
-is actually used to print the index.
-
- Texinfo offers six different types of predefined index: the concept
-index, the function index, the variables index, the keystroke index, the
-program index, and the data type index (*note Predefined Indices::.).
-Each index type has a two-letter name: `cp', `fn', `vr', `ky', `pg',
-and `tp'. You may merge indices, or put them into separate sections
-(*note Combining Indices::.); or you may define your own indices (*note
-Defining New Indices: New Indices.).
-
- The `@printindex' command takes a two-letter index name, reads the
-corresponding sorted index file and formats it appropriately into an
-index.
-
- The `@printindex' command does not generate a chapter heading for
-the index. Consequently, you should precede the `@printindex' command
-with a suitable section or chapter command (usually `@unnumbered') to
-supply the chapter heading and put the index into the table of
-contents. Precede the `@unnumbered' command with an `@node' line.
-
- For example:
-
- @node Variable Index, Concept Index, Function Index, Top
- @comment node-name, next, previous, up
- @unnumbered Variable Index
-
- @printindex vr
-
- @node Concept Index, , Variable Index, Top
- @comment node-name, next, previous, up
- @unnumbered Concept Index
-
- @printindex cp
-
- @summarycontents
- @contents
- @bye
-
-(Readers often prefer that the concept index come last in a book, since
-that makes it easiest to find.)
-
-
-File: texi.info, Node: Contents, Next: File End, Prev: Printing Indices & Menus, Up: Ending a File
-
-Generating a Table of Contents
-==============================
-
- The `@chapter', `@section', and other structuring commands supply
-the information to make up a table of contents, but they do not cause
-an actual table to appear in the manual. To do this, you must use the
-`@contents' and `@summarycontents' commands:
-
-`@contents'
- Generate a table of contents in a printed manual, including all
- chapters, sections, subsections, etc., as well as appendices and
- unnumbered chapters. (Headings generated by the `@heading' series
- of commands do not appear in the table of contents.) The
- `@contents' command should be written on a line by itself.
-
-`@shortcontents'
-`@summarycontents'
- (`@summarycontents' is a synonym for `@shortcontents'; the two
- commands are exactly the same.)
-
- Generate a short or summary table of contents that lists only the
- chapters (and appendices and unnumbered chapters). Omit sections,
- subsections and subsubsections. Only a long manual needs a short
- table of contents in addition to the full table of contents.
-
- Write the `@shortcontents' command on a line by itself right
- *before* the `@contents' command.
-
- The table of contents commands automatically generate a chapter-like
-heading at the top of the first table of contents page. Write the table
-of contents commands at the very end of a Texinfo file, just before the
-`@bye' command, following any index sections--anything in the Texinfo
-file after the table of contents commands will be omitted from the
-table of contents.
-
- When you print a manual with a table of contents, the table of
-contents are printed last and numbered with roman numerals. You need
-to place those pages in their proper place, after the title page,
-yourself. (This is the only collating you need to do for a printed
-manual. The table of contents is printed last because it is generated
-after the rest of the manual is typeset.)
-
- Here is an example of where to write table of contents commands:
-
- INDICES...
- @shortcontents
- @contents
- @bye
-
- Since an Info file uses menus instead of tables of contents, the Info
-formatting commands ignore the `@contents' and `@shortcontents'
-commands.
-
-
-File: texi.info, Node: File End, Prev: Contents, Up: Ending a File
-
-`@bye' File Ending
-==================
-
- An `@bye' command terminates TeX or Info formatting. None of the
-formatting commands see any of the file following `@bye'. The `@bye'
-command should be on a line by itself.
-
- If you wish, you may follow the `@bye' line with notes. These notes
-will not be formatted and will not appear in either Info or a printed
-manual; it is as if text after `@bye' were within `@ignore' ... `@end
-ignore'. Also, you may follow the `@bye' line with a local variables
-list. *Note Using Local Variables and the Compile Command:
-Compile-Command, for more information.
-
-
-File: texi.info, Node: Structuring, Next: Nodes, Prev: Ending a File, Up: Top
-
-Chapter Structuring
-*******************
-
- The "chapter structuring" commands divide a document into a
-hierarchy of chapters, sections, subsections, and subsubsections.
-These commands generate large headings; they also provide information
-for the table of contents of a printed manual (*note Generating a Table
-of Contents: Contents.).
-
- The chapter structuring commands do not create an Info node
-structure, so normally you should put an `@node' command immediately
-before each chapter structuring command (*note Nodes::.). The only
-time you are likely to use the chapter structuring commands without
-using the node structuring commands is if you are writing a document
-that contains no cross references and will never be transformed into
-Info format.
-
- It is unlikely that you will ever write a Texinfo file that is
-intended only as an Info file and not as a printable document. If you
-do, you might still use chapter structuring commands to create a
-heading at the top of each node--but you don't need to.
-
-* Menu:
-
-* Tree Structuring:: A manual is like an upside down tree ...
-* Structuring Command Types:: How to divide a manual into parts.
-* makeinfo top:: The `@top' command, part of the `Top' node.
-* chapter::
-* unnumbered & appendix::
-* majorheading & chapheading::
-* section::
-* unnumberedsec appendixsec heading::
-* subsection::
-* unnumberedsubsec appendixsubsec subheading::
-* subsubsection:: Commands for the lowest level sections.
-
-
-File: texi.info, Node: Tree Structuring, Next: Structuring Command Types, Up: Structuring
-
-Tree Structure of Sections
-==========================
-
- A Texinfo file is usually structured like a book with chapters,
-sections, subsections, and the like. This structure can be visualized
-as a tree (or rather as an upside-down tree) with the root at the top
-and the levels corresponding to chapters, sections, subsection, and
-subsubsections.
-
- Here is a diagram that shows a Texinfo file with three chapters,
-each of which has two sections.
-
- Top
- |
- -------------------------------------
- | | |
- Chapter 1 Chapter 2 Chapter 3
- | | |
- -------- -------- --------
- | | | | | |
- Section Section Section Section Section Section
- 1.1 1.2 2.1 2.2 3.1 3.2
-
- In a Texinfo file that has this structure, the beginning of Chapter 2
-looks like this:
-
- @node Chapter 2, Chapter 3, Chapter 1, top
- @chapter Chapter 2
-
- The chapter structuring commands are described in the sections that
-follow; the `@node' and `@menu' commands are described in following
-chapters. (*Note Nodes::, and see *Note Menus::.)
-
-
-File: texi.info, Node: Structuring Command Types, Next: makeinfo top, Prev: Tree Structuring, Up: Structuring
-
-Types of Structuring Command
-============================
-
- The chapter structuring commands fall into four groups or series,
-each of which contains structuring commands corresponding to the
-hierarchical levels of chapters, sections, subsections, and
-subsubsections.
-
- The four groups are the `@chapter' series, the `@unnumbered' series,
-the `@appendix' series, and the `@heading' series.
-
- Each command produces titles that have a different appearance on the
-printed page or Info file; only some of the commands produce titles
-that are listed in the table of contents of a printed book or manual.
-
- * The `@chapter' and `@appendix' series of commands produce numbered
- or lettered entries both in the body of a printed work and in its
- table of contents.
-
- * The `@unnumbered' series of commands produce unnumbered entries
- both in the body of a printed work and in its table of contents.
- The `@top' command, which has a special use, is a member of this
- series (*note `@top': makeinfo top.).
-
- * The `@heading' series of commands produce unnumbered headings that
- do not appear in a table of contents. The heading commands never
- start a new page.
-
- * The `@majorheading' command produces results similar to using the
- `@chapheading' command but generates a larger vertical whitespace
- before the heading.
-
- * When an `@setchapternewpage' command says to do so, the
- `@chapter', `@unnumbered', and `@appendix' commands start new
- pages in the printed manual; the `@heading' commands do not.
-
- Here are the four groups of chapter structuring commands:
-
- No new pages
- Numbered Unnumbered Lettered and numbered Unnumbered
- In contents In contents In contents Not in contents
-
- @top @majorheading
- @chapter @unnumbered @appendix @chapheading
- @section @unnumberedsec @appendixsec @heading
- @subsection @unnumberedsubsec @appendixsubsec @subheading
- @subsubsection @unnumberedsubsubsec @appendixsubsubsec @subsubheading
-
-
-File: texi.info, Node: makeinfo top, Next: chapter, Prev: Structuring Command Types, Up: Structuring
-
-`@top'
-======
-
- The `@top' command is a special sectioning command that you use only
-after an `@node Top' line at the beginning of a Texinfo file. The
-`@top' command tells the `makeinfo' formatter which node is the `Top'
-node. It has the same typesetting effect as `@unnumbered' (*note
-`@unnumbered': (`@appendix')unnumbered & appendix.). For detailed
-information, see *Note The `@top' Command: makeinfo top command.
-
-
-File: texi.info, Node: chapter, Next: unnumbered & appendix, Prev: makeinfo top, Up: Structuring
-
-`@chapter'
-==========
-
- `@chapter' identifies a chapter in the document. Write the command
-at the beginning of a line and follow it on the same line by the title
-of the chapter.
-
- For example, this chapter in this manual is entitled "Chapter
-Structuring"; the `@chapter' line looks like this:
-
- @chapter Chapter Structuring
-
- In TeX, the `@chapter' command creates a chapter in the document,
-specifying the chapter title. The chapter is numbered automatically.
-
- In Info, the `@chapter' command causes the title to appear on a line
-by itself, with a line of asterisks inserted underneath. Thus, in
-Info, the above example produces the following output:
-
- Chapter Structuring
- *******************
-
-
-File: texi.info, Node: unnumbered & appendix, Next: majorheading & chapheading, Prev: chapter, Up: Structuring
-
-`@unnumbered', `@appendix'
-==========================
-
- Use the `@unnumbered' command to create a chapter that appears in a
-printed manual without chapter numbers of any kind. Use the
-`@appendix' command to create an appendix in a printed manual that is
-labelled by letter instead of by number.
-
- For Info file output, the `@unnumbered' and `@appendix' commands are
-equivalent to `@chapter': the title is printed on a line by itself with
-a line of asterisks underneath. (*Note `@chapter': chapter.)
-
- To create an appendix or an unnumbered chapter, write an `@appendix'
-or `@unnumbered' command at the beginning of a line and follow it on
-the same line by the title, as you would if you were creating a chapter.
-
-
-File: texi.info, Node: majorheading & chapheading, Next: section, Prev: unnumbered & appendix, Up: Structuring
-
-`@majorheading', `@chapheading'
-===============================
-
- The `@majorheading' and `@chapheading' commands put chapter-like
-headings in the body of a document.
-
- However, neither command causes TeX to produce a numbered heading or
-an entry in the table of contents; and neither command causes TeX to
-start a new page in a printed manual.
-
- In TeX, an `@majorheading' command generates a larger vertical
-whitespace before the heading than an `@chapheading' command but is
-otherwise the same.
-
- In Info, the `@majorheading' and `@chapheading' commands are
-equivalent to `@chapter': the title is printed on a line by itself with
-a line of asterisks underneath. (*Note `@chapter': chapter.)
-
-
-File: texi.info, Node: section, Next: unnumberedsec appendixsec heading, Prev: majorheading & chapheading, Up: Structuring
-
-`@section'
-==========
-
- In a printed manual, an `@section' command identifies a numbered
-section within a chapter. The section title appears in the table of
-contents. In Info, an `@section' command provides a title for a
-segment of text, underlined with `='.
-
- This section is headed with an `@section' command and looks like
-this in the Texinfo file:
-
- @section @code{@@section}
-
- To create a section, write the `@section' command at the beginning
-of a line and follow it on the same line by the section title.
-
- Thus,
-
- @section This is a section
-
-produces
-
- This is a section
- =================
-
-in Info.
-
-
-File: texi.info, Node: unnumberedsec appendixsec heading, Next: subsection, Prev: section, Up: Structuring
-
-`@unnumberedsec', `@appendixsec', `@heading'
-============================================
-
- The `@unnumberedsec', `@appendixsec', and `@heading' commands are,
-respectively, the unnumbered, appendix-like, and heading-like
-equivalents of the `@section' command. (*Note `@section': section.)
-
-`@unnumberedsec'
- The `@unnumberedsec' command may be used within an unnumbered
- chapter or within a regular chapter or appendix to provide an
- unnumbered section.
-
-`@appendixsec'
-`@appendixsection'
- `@appendixsection' is a longer spelling of the `@appendixsec'
- command; the two are synonymous.
-
- Conventionally, the `@appendixsec' or `@appendixsection' command
- is used only within appendices.
-
-`@heading'
- You may use the `@heading' command anywhere you wish for a
- section-style heading that will not appear in the table of
- contents.
-
-
-File: texi.info, Node: subsection, Next: unnumberedsubsec appendixsubsec subheading, Prev: unnumberedsec appendixsec heading, Up: Structuring
-
-The `@subsection' Command
-=========================
-
- Subsections are to sections as sections are to chapters. (*Note
-`@section': section.) In Info, subsection titles are underlined with
-`-'. For example,
-
- @subsection This is a subsection
-
-produces
-
- This is a subsection
- --------------------
-
- In a printed manual, subsections are listed in the table of contents
-and are numbered three levels deep.
-
-
-File: texi.info, Node: unnumberedsubsec appendixsubsec subheading, Next: subsubsection, Prev: subsection, Up: Structuring
-
-The `@subsection'-like Commands
-===============================
-
- The `@unnumberedsubsec', `@appendixsubsec', and `@subheading'
-commands are, respectively, the unnumbered, appendix-like, and
-heading-like equivalents of the `@subsection' command. (*Note
-`@subsection': subsection.)
-
- In Info, the `@subsection'-like commands generate a title underlined
-with hyphens. In a printed manual, an `@subheading' command produces a
-heading like that of a subsection except that it is not numbered and
-does not appear in the table of contents. Similarly, an
-`@unnumberedsubsec' command produces an unnumbered heading like that of
-a subsection and an `@appendixsubsec' command produces a
-subsection-like heading labelled with a letter and numbers; both of
-these commands produce headings that appear in the table of contents.
-
-
-File: texi.info, Node: subsubsection, Prev: unnumberedsubsec appendixsubsec subheading, Up: Structuring
-
-The `subsub' Commands
-=====================
-
- The fourth and lowest level sectioning commands in Texinfo are the
-`subsub' commands. They are:
-
-`@subsubsection'
- Subsubsections are to subsections as subsections are to sections.
- (*Note `@subsection': subsection.) In a printed manual,
- subsubsection titles appear in the table of contents and are
- numbered four levels deep.
-
-`@unnumberedsubsubsec'
- Unnumbered subsubsection titles appear in the table of contents of
- a printed manual, but lack numbers. Otherwise, unnumbered
- subsubsections are the same as subsubsections. In Info, unnumbered
- subsubsections look exactly like ordinary subsubsections.
-
-`@appendixsubsubsec'
- Conventionally, appendix commands are used only for appendices and
- are lettered and numbered appropriately in a printed manual. They
- also appear in the table of contents. In Info, appendix
- subsubsections look exactly like ordinary subsubsections.
-
-`@subsubheading'
- The `@subsubheading' command may be used anywhere that you need a
- small heading that will not appear in the table of contents. In
- Info, subsubheadings look exactly like ordinary subsubsection
- headings.
-
- In Info, `subsub' titles are underlined with periods. For example,
-
- @subsubsection This is a subsubsection
-
-produces
-
- This is a subsubsection
- .......................
-
-
-File: texi.info, Node: Nodes, Next: Menus, Prev: Structuring, Up: Top
-
-Nodes
-*****
-
- "Nodes" are the primary segments of a Texinfo file. They do not
-themselves impose a hierarchic or any other kind of structure on a file.
-Nodes contain "node pointers" that name other nodes, and can contain
-"menus" which are lists of nodes. In Info, the movement commands can
-carry you to a pointed-to node or to a node listed in a menu. Node
-pointers and menus provide structure for Info files just as chapters,
-sections, subsections, and the like, provide structure for printed
-books.
-
-* Menu:
-
-* Two Paths:: Different commands to structure
- Info output and printed output.
-* Node Menu Illustration:: A diagram, and sample nodes and menus.
-* node:: How to write a node, in detail.
-* makeinfo Pointer Creation:: How to create node pointers with `makeinfo'.
-
-
-File: texi.info, Node: Two Paths, Next: Node Menu Illustration, Up: Nodes
-
-Two Paths
-=========
-
- The node and menu commands and the chapter structuring commands are
-independent of each other:
-
- * In Info, node and menu commands provide structure. The chapter
- structuring commands generate headings with different kinds of
- underlining--asterisks for chapters, hyphens for sections, and so
- on; they do nothing else.
-
- * In TeX, the chapter structuring commands generate chapter and
- section numbers and tables of contents. The node and menu
- commands provide information for cross references; they do nothing
- else.
-
- You can use node pointers and menus to structure an Info file any way
-you want; and you can write a Texinfo file so that its Info output has a
-different structure than its printed output. However, most Texinfo
-files are written such that the structure for the Info output
-corresponds to the structure for the printed output. It is not
-convenient to do otherwise.
-
- Generally, printed output is structured in a tree-like hierarchy in
-which the chapters are the major limbs from which the sections branch
-out. Similarly, node pointers and menus are organized to create a
-matching structure in the Info output.
-
-
-File: texi.info, Node: Node Menu Illustration, Next: node, Prev: Two Paths, Up: Nodes
-
-Node and Menu Illustration
-==========================
-
- Here is a copy of the diagram shown earlier that illustrates a
-Texinfo file with three chapters, each of which contains two sections.
-
- Note that the "root" is at the top of the diagram and the "leaves"
-are at the bottom. This is how such a diagram is drawn conventionally;
-it illustrates an upside-down tree. For this reason, the root node is
-called the `Top' node, and `Up' node pointers carry you closer to the
-root.
-
- Top
- |
- -------------------------------------
- | | |
- Chapter 1 Chapter 2 Chapter 3
- | | |
- -------- -------- --------
- | | | | | |
- Section Section Section Section Section Section
- 1.1 1.2 2.1 2.2 3.1 3.2
-
- Write the beginning of the node for Chapter 2 like this:
-
- @node Chapter 2, Chapter 3, Chapter 1, top
- @comment node-name, next, previous, up
-
-This `@node' line says that the name of this node is "Chapter 2", the
-name of the `Next' node is "Chapter 3", the name of the `Previous' node
-is "Chapter 1", and the name of the `Up' node is "Top".
-
- *Please Note:* `Next' refers to the next node at the same
- hierarchical level in the manual, not necessarily to the next node
- within the Texinfo file. In the Texinfo file, the subsequent node
- may be at a lower level--a section-level node may follow a
- chapter-level node, and a subsection-level node may follow a
- section-level node. `Next' and `Previous' refer to nodes at the
- *same* hierarchical level. (The `Top' node contains the exception
- to this rule. Since the `Top' node is the only node at that
- level, `Next' refers to the first following node, which is almost
- always a chapter or chapter-level node.)
-
- To go to Sections 2.1 and 2.2 using Info, you need a menu inside
-Chapter 2. (*Note Menus::.) You would write the menu just before the
-beginning of Section 2.1, like this:
-
- @menu
- * Sect. 2.1:: Description of this section.
- * Sect. 2.2::
- @end menu
-
- Write the node for Sect. 2.1 like this:
-
- @node Sect. 2.1, Sect. 2.2, Chapter 2, Chapter 2
- @comment node-name, next, previous, up
-
- In Info format, the `Next' and `Previous' pointers of a node usually
-lead to other nodes at the same level--from chapter to chapter or from
-section to section (sometimes, as shown, the `Previous' pointer points
-up); an `Up' pointer usually leads to a node at the level above (closer
-to the `Top' node); and a `Menu' leads to nodes at a level below (closer
-to `leaves'). (A cross reference can point to a node at any level; see
-*Note Cross References::.)
-
- Usually, an `@node' command and a chapter structuring command are
-used in sequence, along with indexing commands. (You may follow the
-`@node' line with a comment line that reminds you which pointer is
-which.)
-
- Here is the beginning of the chapter in this manual called "Ending a
-Texinfo File". This shows an `@node' line followed by a comment line,
-an `@chapter' line, and then by indexing lines.
-
- @node Ending a File, Structuring, Beginning a File, Top
- @comment node-name, next, previous, up
- @chapter Ending a Texinfo File
- @cindex Ending a Texinfo file
- @cindex Texinfo file ending
- @cindex File ending
-
-
-File: texi.info, Node: node, Next: makeinfo Pointer Creation, Prev: Node Menu Illustration, Up: Nodes
-
-The `@node' Command
-===================
-
- A "node" is a segment of text that begins at an `@node' command and
-continues until the next `@node' command. The definition of node is
-different from that for chapter or section. A chapter may contain
-sections and a section may contain subsections; but a node cannot
-contain subnodes; the text of a node continues only until the next
-`@node' command in the file. A node usually contains only one chapter
-structuring command, the one that follows the `@node' line. On the
-other hand, in printed output nodes are used only for cross references,
-so a chapter or section may contain any number of nodes. Indeed, a
-chapter usually contains several nodes, one for each section,
-subsection, and subsubsection.
-
- To create a node, write an `@node' command at the beginning of a
-line, and follow it with four arguments, separated by commas, on the
-rest of the same line. These arguments are the name of the node, and
-the names of the `Next', `Previous', and `Up' pointers, in that order.
-You may insert spaces before each pointer if you wish; the spaces are
-ignored. You must write the name of the node, and the names of the
-`Next', `Previous', and `Up' pointers, all on the same line. Otherwise,
-the formatters fail. (*note info: (info)Top, for more information
-about nodes in Info.)
-
- Usually, you write one of the chapter-structuring command lines
-immediately after an `@node' line--for example, an `@section' or
-`@subsection' line. (*Note Types of Structuring Command: Structuring
-Command Types.)
-
- *Please note:* The GNU Emacs Texinfo mode updating commands work
- only with Texinfo files in which `@node' lines are followed by
- chapter structuring lines. *Note Updating Requirements::.
-
- TeX uses `@node' lines to identify the names to use for cross
-references. For this reason, you must write `@node' lines in a Texinfo
-file that you intend to format for printing, even if you do not intend
-to format it for Info. (Cross references, such as the one at the end
-of this sentence, are made with `@xref' and its related commands; see
-*Note Cross References::.)
-
-* Menu:
-
-* Node Names:: How to choose node and pointer names.
-* Writing a Node:: How to write an `@node' line.
-* Node Line Tips:: Keep names short.
-* Node Line Requirements:: Keep names unique, without @-commands.
-* First Node:: How to write a `Top' node.
-* makeinfo top command:: How to use the `@top' command.
-* Top Node Summary:: Write a brief description for readers.
-
-
-File: texi.info, Node: Node Names, Next: Writing a Node, Up: node
-
-Choosing Node and Pointer Names
--------------------------------
-
- The name of a node identifies the node. The pointers enable you to
-reach other nodes and consist of the names of those nodes.
-
- Normally, a node's `Up' pointer contains the name of the node whose
-menu mentions that node. The node's `Next' pointer contains the name
-of the node that follows that node in that menu and its `Previous'
-pointer contains the name of the node that precedes it in that menu.
-When a node's `Previous' node is the same as its `Up' node, both node
-pointers name the same node.
-
- Usually, the first node of a Texinfo file is the `Top' node, and its
-`Up' and `Previous' pointers point to the `dir' file, which contains
-the main menu for all of Info.
-
- The `Top' node itself contains the main or master menu for the
-manual. Also, it is helpful to include a brief description of the
-manual in the `Top' node. *Note First Node::, for information on how
-to write the first node of a Texinfo file.
-
-
-File: texi.info, Node: Writing a Node, Next: Node Line Tips, Prev: Node Names, Up: node
-
-How to Write an `@node' Line
-----------------------------
-
- The easiest way to write an `@node' line is to write `@node' at the
-beginning of a line and then the name of the node, like this:
-
- @node NODE-NAME
-
- If you are using GNU Emacs, you can use the update node commands
-provided by Texinfo mode to insert the names of the pointers; or you
-can leave the pointers out of the Texinfo file and let `makeinfo'
-insert node pointers into the Info file it creates. (*Note Texinfo
-Mode::, and *Note makeinfo Pointer Creation::.)
-
- Alternatively, you can insert the `Next', `Previous', and `Up'
-pointers yourself. If you do this, you may find it helpful to use the
-Texinfo mode keyboard command `C-c C-c n'. This command inserts
-`@node' and a comment line listing the names of the pointers in their
-proper order. The comment line helps you keep track of which arguments
-are for which pointers. This comment line is especially useful if you
-are not familiar with Texinfo.
-
- The template for a node line with `Next', `Previous', and `Up'
-pointers looks like this:
-
- @node NODE-NAME, NEXT, PREVIOUS, UP
-
- If you wish, you can ignore `@node' lines altogether in your first
-draft and then use the `texinfo-insert-node-lines' command to create
-`@node' lines for you. However, we do not recommend this practice. It
-is better to name the node itself at the same time that you write a
-segment so you can easily make cross references. A large number of
-cross references are an especially important feature of a good Info
-file.
-
- After you have inserted an `@node' line, you should immediately
-write an @-command for the chapter or section and insert its name.
-Next (and this is important!), put in several index entries. Usually,
-you will find at least two and often as many as four or five ways of
-referring to the node in the index. Use them all. This will make it
-much easier for people to find the node.
-
-
-File: texi.info, Node: Node Line Tips, Next: Node Line Requirements, Prev: Writing a Node, Up: node
-
-`@node' Line Tips
------------------
-
- Here are three suggestions:
-
- * Try to pick node names that are informative but short.
-
- In the Info file, the file name, node name, and pointer names are
- all inserted on one line, which may run into the right edge of the
- window. (This does not cause a problem with Info, but is ugly.)
-
- * Try to pick node names that differ from each other near the
- beginnings of their names. This way, it is easy to use automatic
- name completion in Info.
-
- * By convention, node names are capitalized just as they would be for
- section or chapter titles--initial and significant words are
- capitalized; others are not.
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-4 b/gnu/usr.bin/texinfo/info-files/texi.info-4
deleted file mode 100644
index 8698ab6..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-4
+++ /dev/null
@@ -1,1412 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Node Line Requirements, Next: First Node, Prev: Node Line Tips, Up: node
-
-`@node' Line Requirements
--------------------------
-
- Here are several requirements for `@node' lines:
-
- * All the node names for a single Info file must be unique.
-
- Duplicates confuse the Info movement commands. This means, for
- example, that if you end every chapter with a summary, you must
- name each summary node differently. You cannot just call each one
- "Summary". You may, however, duplicate the titles of chapters,
- sections, and the like. Thus you can end each chapter in a book
- with a section called "Summary", so long as the node names for
- those sections are all different.
-
- * A pointer name must be the name of a node.
-
- The node to which a pointer points may come before or after the
- node containing the pointer.
-
- * You cannot use any of the Texinfo @-commands in a node name;
- @-commands confuse Info.
-
- Thus, the beginning of the section called `@chapter' looks like
- this:
-
- @node chapter, unnumbered & appendix, makeinfo top, Structuring
- @comment node-name, next, previous, up
- @section @code{@@chapter}
- @findex chapter
-
- * You cannot use commas, colons, or apostrophes within a node name;
- these confuse TeX or the Info formatters.
-
- For example, the following is a section title:
-
- @code{@@unnumberedsec}, @code{@@appendixsec}, @code{@@heading}
-
- The corresponding node name is:
-
- unnumberedsec appendixsec heading
-
- * Case is significant.
-
-
-File: texi.info, Node: First Node, Next: makeinfo top command, Prev: Node Line Requirements, Up: node
-
-The First Node
---------------
-
- The first node of a Texinfo file is the `Top' node, except in an
-included file (*note Include Files::.).
-
- The `Top' node (which must be named `top' or `Top') should have as
-its `Up' and `Previous' nodes the name of a node in another file, where
-there is a menu that leads to this file. Specify the file name in
-parentheses. If the file is to be installed directly in the Info
-directory file, use `(dir)' as the parent of the `Top' node; this is
-short for `(dir)top', and specifies the `Top' node in the `dir' file,
-which contains the main menu for Info. For example, the `@node Top'
-line of this manual looks like this:
-
- @node Top, Overview, (dir), (dir)
-
-(You may use the Texinfo updating commands or the `makeinfo' utility to
-insert these `Next' and `(dir)' pointers automatically.)
-
- *Note Install an Info File::, for more information about installing
-an Info file in the `info' directory.
-
- The `Top' node contains the main or master menu for the document.
-
-
-File: texi.info, Node: makeinfo top command, Next: Top Node Summary, Prev: First Node, Up: node
-
-The `@top' Sectioning Command
------------------------------
-
- A special sectioning command, `@top', has been created for use with
-the `@node Top' line. The `@top' sectioning command tells `makeinfo'
-that it marks the `Top' node in the file. It provides the information
-that `makeinfo' needs to insert node pointers automatically. Write the
-`@top' command at the beginning of the line immediately following the
-`@node Top' line. Write the title on the remaining part of the same
-line as the `@top' command.
-
- In Info, the `@top' sectioning command causes the title to appear on
-a line by itself, with a line of asterisks inserted underneath.
-
- In TeX and `texinfo-format-buffer', the `@top' sectioning command is
-merely a synonym for `@unnumbered'. Neither of these formatters
-require an `@top' command, and do nothing special with it. You can use
-`@chapter' or `@unnumbered' after the `@node Top' line when you use
-these formatters. Also, you can use `@chapter' or `@unnumbered' when
-you use the Texinfo updating commands to create or update pointers and
-menus.
-
- Whatever sectioning command follows an `@node Top' line, whether it
-be `@top' or `@chapter', the `@node Top' line and the immediately
-following line and any additional text must be enclosed between
-`@ifinfo' and `@end ifinfo' commands. (*Note Conditionals::.) This
-prevents the title and the accompanying text from appearing in printed
-output. Write the `@ifinfo' command before the `@node' line and write
-the `@end ifinfo' command after the `@top' or other sectioning command
-and after any additional text. (You can write the `@end ifinfo'
-command after the `@end menu' command if you like.)
-
-
-File: texi.info, Node: Top Node Summary, Prev: makeinfo top command, Up: node
-
-The `Top' Node Summary
-----------------------
-
- You can help readers by writing a summary in the `Top' node, after
-the `@top' line, before the main or master menu. The summary should
-briefly describe the Info file. You should also write the version
-number of the program to which the manual applies in this section. This
-helps the reader keep track of which manual is for which version of the
-program. If the manual changes more frequently than the program or is
-independent of it, you should also include an edition number for the
-manual. (The title page should also contain this information: see
-*Note `@titlepage': titlepage.)
-
- Put the whole of the `Top' node, including the `@top' sectioning
-command line if you have one, between `@ifinfo' and `@end ifinfo' so
-none of the text appears in the printed output (*note Conditionally
-Visible Text: Conditionals.). (You may want to repeat the brief
-description from the `Top' node within `@iftex' ... `@end iftex' at the
-beginning of the first chapter, for those who read the printed manual.)
-
-
-File: texi.info, Node: makeinfo Pointer Creation, Prev: node, Up: Nodes
-
-Creating Pointers with `makeinfo'
-=================================
-
- The `makeinfo' program has a feature for automatically creating node
-pointers for a hierarchically organized file that lacks them.
-
- When you take advantage of this feature, you do not need to write the
-`Next', `Previous', and `Up' pointers after the name of a node.
-However, you must write a sectioning command, such as `@chapter' or
-`@section', on the line immediately following each truncated `@node'
-line. You cannot write a comment line after a node line; the section
-line must follow it immediately.
-
- In addition, you must follow the `Top' `@node' line with a line
-beginning with `@top' to mark the `Top' node in the file. *Note `@top':
-makeinfo top.
-
- Finally, you must write the name of each node (except for the `Top'
-node) in a menu that is one or more hierarchical levels above the
-node's hierarchical level.
-
- This node pointer insertion feature in `makeinfo' is an alternative
-to the menu and pointer creation and update commands in Texinfo mode.
-(*Note Updating Nodes and Menus::.) It is especially helpful to people
-who do not use GNU Emacs for writing Texinfo documents.
-
-
-File: texi.info, Node: Menus, Next: Cross References, Prev: Nodes, Up: Top
-
-Menus
-*****
-
- "Menus" contain pointers to subordinate nodes.(1) In Info, you use
-menus to go to such nodes. Menus have no effect in printed manuals and
-do not appear in them.
-
- By convention, a menu is put at the end of a node since a reader who
-uses the menu may not see text that follows it.
-
- A node that has a menu should *not* contain much text. If you have
-a lot of text and a menu, move most of the text into a new subnode--all
-but a few lines.
-
-* Menu:
-
-* Menu Location:: Put a menu in a short node.
-* Writing a Menu:: What is a menu?
-* Menu Parts:: A menu entry has three parts.
-* Less Cluttered Menu Entry:: Two part menu entry.
-* Menu Example:: Two and three part menu entries.
-* Other Info Files:: How to refer to a different Info file.
-
- ---------- Footnotes ----------
-
- (1) Menus can carry you to any node, regardless of the hierarchical
-structure; even to nodes in a different Info file. However, the GNU
-Emacs Texinfo mode updating commands work only to create menus of
-subordinate nodes. Conventionally, cross references are used to refer
-to other nodes.
-
-
-File: texi.info, Node: Menu Location, Next: Writing a Menu, Up: Menus
-
-Menus Need Short Nodes
-======================
-
- A reader can easily see a menu that is close to the beginning of the
-node. The node should be short. As a practical matter, you should
-locate a menu within 20 lines of the beginning of the node. Otherwise,
-a reader with a terminal that displays only a few lines may miss the
-menu and its associated text.
-
- The short text before a menu may look awkward in a printed manual.
-To avoid this, you can write a menu near the beginning of its node and
-follow the menu by an `@node' line, and then an `@heading' line located
-within `@ifinfo' and `@end ifinfo'. This way, the menu, `@node' line,
-and title appear only in the Info file, not the printed document.
-
- For example, the preceding two paragraphs follow an Info-only menu,
-`@node' line, and heading, and look like this:
-
- @menu
- * Menu Location:: Put a menu in a short node.
- * Writing a Menu:: What is a menu?
- * Menu Parts:: A menu entry has three parts.
- * Less Cluttered Menu Entry:: Two part menu entry.
- * Menu Example:: Two and three part entries.
- * Other Info Files:: How to refer to a different
- Info file.
- @end menu
-
- @node Menu Location, Writing a Menu, , Menus
- @ifinfo
- @heading Menus Need Short Nodes
- @end ifinfo
-
- The Texinfo file for this document contains more than a dozen
-examples of this procedure. One is at the beginning of this chapter;
-another is at the beginning of the "Cross References" chapter.
-
-
-File: texi.info, Node: Writing a Menu, Next: Menu Parts, Prev: Menu Location, Up: Menus
-
-Writing a Menu
-==============
-
- A menu consists of an `@menu' command on a line by itself followed
-by menu entry lines or menu comment lines and then by an `@end menu'
-command on a line by itself.
-
- A menu looks like this:
-
- @menu
- Larger Units of Text
-
- * Files:: All about handling files.
- * Multiples: Buffers. Multiple buffers; editing
- several files at once.
- @end menu
-
- In a menu, every line that begins with an `* ' is a "menu entry".
-(Note the space after the asterisk.) A line that does not start with
-an `* ' may also appear in a menu. Such a line is not a menu entry but
-is a menu comment line that appears in the Info file. In the example
-above, the line `Larger Units of Text' is a menu comment line; the two
-lines starting with `* ' are menu entries.
-
-
-File: texi.info, Node: Menu Parts, Next: Less Cluttered Menu Entry, Prev: Writing a Menu, Up: Menus
-
-The Parts of a Menu
-===================
-
- A menu entry has three parts, only the second of which is required:
-
- 1. The menu entry name.
-
- 2. The name of the node (required).
-
- 3. A description of the item.
-
- The template for a menu entry looks like this:
-
- * MENU-ENTRY-NAME: NODE-NAME. DESCRIPTION
-
- Follow the menu entry name with a single colon and follow the node
-name with tab, comma, period, or newline.
-
- In Info, a user selects a node with the `m' (`Info-menu') command.
-The menu entry name is what the user types after the `m' command.
-
- The third part of a menu entry is a descriptive phrase or sentence.
-Menu entry names and node names are often short; the description
-explains to the reader what the node is about. The description, which
-is optional, can spread over two or more lines. A useful description
-complements the node name rather than repeats it.
-
-
-File: texi.info, Node: Less Cluttered Menu Entry, Next: Menu Example, Prev: Menu Parts, Up: Menus
-
-Less Cluttered Menu Entry
-=========================
-
- When the menu entry name and node name are the same, you can write
-the name immediately after the asterisk and space at the beginning of
-the line and follow the name with two colons.
-
- For example, write
-
- * Name:: DESCRIPTION
-
-instead of
-
- * Name: Name. DESCRIPTION
-
- You should use the node name for the menu entry name whenever
-possible, since it reduces visual clutter in the menu.
-
-
-File: texi.info, Node: Menu Example, Next: Other Info Files, Prev: Less Cluttered Menu Entry, Up: Menus
-
-A Menu Example
-==============
-
- A menu looks like this in Texinfo:
-
- @menu
- * menu entry name: Node name. A short description.
- * Node name:: This form is preferred.
- @end menu
-
-This produces:
-
- * menu:
-
- * menu entry name: Node name. A short description.
- * Node name:: This form is preferred.
-
- Here is an example as you might see it in a Texinfo file:
-
- @menu
- Larger Units of Text
-
- * Files:: All about handling files.
- * Multiples: Buffers. Multiple buffers; editing
- several files at once.
- @end menu
-
-This produces:
-
- * menu:
- Larger Units of Text
-
- * Files:: All about handling files.
- * Multiples: Buffers. Multiple buffers; editing
- several files at once.
-
- In this example, the menu has two entries. `Files' is both a menu
-entry name and the name of the node referred to by that name.
-`Multiples' is the menu entry name; it refers to the node named
-`Buffers'. The line `Larger Units of Text' is a comment; it appears in
-the menu, but is not an entry.
-
- Since no file name is specified with either `Files' or `Buffers',
-they must be the names of nodes in the same Info file (*note Referring
-to Other Info Files: Other Info Files.).
-
-
-File: texi.info, Node: Other Info Files, Prev: Menu Example, Up: Menus
-
-Referring to Other Info Files
-=============================
-
- You can create a menu entry that enables a reader in Info to go to a
-node in another Info file by writing the file name in parentheses just
-before the node name. In this case, you should use the three-part menu
-entry format, which saves the reader from having to type the file name.
-
- The format looks like this:
-
- @menu
- * FIRST-ENTRY-NAME:(FILENAME)NODENAME. DESCRIPTION
- * SECOND-ENTRY-NAME:(FILENAME)SECOND-NODE. DESCRIPTION
- @end menu
-
- For example, to refer directly to the `Outlining' and `Rebinding'
-nodes in the `Emacs Manual', you would write a menu like this:
-
- @menu
- * Outlining: (emacs)Outline Mode. The major mode for
- editing outlines.
- * Rebinding: (emacs)Rebinding. How to redefine the
- meaning of a key.
- @end menu
-
- If you do not list the node name, but only name the file, then Info
-presumes that you are referring to the `Top' node.
-
- The `dir' file that contains the main menu for Info has menu entries
-that list only file names. These take you directly to the `Top' nodes
-of each Info document. (*Note Install an Info File::.)
-
- For example:
-
- * Info: (info). Documentation browsing system.
- * Emacs: (emacs). The extensible, self-documenting
- text editor.
-
-(The `dir' top level directory for the Info system is an Info file, not
-a Texinfo file, but a menu entry looks the same in both types of file.)
-
- Note that the GNU Emacs Texinfo mode menu updating commands only work
-with nodes within the current buffer, so you cannot use them to create
-menus that refer to other files. You must write such menus by hand.
-
-
-File: texi.info, Node: Cross References, Next: Marking Text, Prev: Menus, Up: Top
-
-Cross References
-****************
-
- "Cross references" are used to refer the reader to other parts of the
-same or different Texinfo files. In Texinfo, nodes are the places to
-which cross references can refer.
-
-* Menu:
-
-* References:: What cross references are for.
-* Cross Reference Commands:: A summary of the different commands.
-* Cross Reference Parts:: A cross reference has several parts.
-* xref:: Begin a reference with `See' ...
-* Top Node Naming:: How to refer to the beginning of another file.
-* ref:: A reference for the last part of a sentence.
-* pxref:: How to write a parenthetical cross reference.
-* inforef:: How to refer to an Info-only file.
-
-
-File: texi.info, Node: References, Next: Cross Reference Commands, Up: Cross References
-
-What References Are For
-=======================
-
- Often, but not always, a printed document should be designed so that
-it can be read sequentially. People tire of flipping back and forth to
-find information that should be presented to them as they need it.
-
- However, in any document, some information will be too detailed for
-the current context, or incidental to it; use cross references to
-provide access to such information. Also, an on-line help system or a
-reference manual is not like a novel; few read such documents in
-sequence from beginning to end. Instead, people look up what they
-need. For this reason, such creations should contain many cross
-references to help readers find other information that they may not
-have read.
-
- In a printed manual, a cross reference results in a page reference,
-unless it is to another manual altogether, in which case the cross
-reference names that manual.
-
- In Info, a cross reference results in an entry that you can follow
-using the Info `f' command. (*note Some advanced Info commands:
-(info)Help-Adv.)
-
- The various cross reference commands use nodes to define cross
-reference locations. This is evident in Info, in which a cross
-reference takes you to the specified node. TeX also uses nodes to
-define cross reference locations, but the action is less obvious. When
-TeX generates a DVI file, it records nodes' page numbers and uses the
-page numbers in making references. Thus, if you are writing a manual
-that will only be printed, and will not be used on-line, you must
-nonetheless write `@node' lines to name the places to which you make
-cross references.
-
-
-File: texi.info, Node: Cross Reference Commands, Next: Cross Reference Parts, Prev: References, Up: Cross References
-
-Different Cross Reference Commands
-==================================
-
- There are four different cross reference commands:
-
-`@xref'
- Used to start a sentence in the printed manual saying `See ...' or
- an entry in the Info file saying `*Note ...'.
-
-`@ref'
- Used within or, more often, at the end of a sentence; same as
- `@xref' for Info; produces just the reference in the printed
- manual without a preceding `See'.
-
-`@pxref'
- Used within parentheses to make a reference that suits both an Info
- file and a printed book. Starts with a lower case `see' within the
- printed manual. (`p' is for `parenthesis'.)
-
-`@inforef'
- Used to make a reference to an Info file for which there is no
- printed manual.
-
-(The `@cite' command is used to make references to books and manuals
-for which there is no corresponding Info file and, therefore, no node
-to which to point. *Note `@cite': cite.)
-
-
-File: texi.info, Node: Cross Reference Parts, Next: xref, Prev: Cross Reference Commands, Up: Cross References
-
-Parts of a Cross Reference
-==========================
-
- A cross reference command requires only one argument, which is the
-name of the node to which it refers. But a cross reference command may
-contain up to four additional arguments. By using these arguments, you
-can provide a cross reference name for Info, a topic description or
-section title for the printed output, the name of a different Info
-file, and the name of a different printed manual.
-
- Here is a simple cross reference example:
-
- @xref{Node name}.
-
-which produces
-
- *Note Node name::.
-
-and
-
- See Section NNN [Node name], page PPP.
-
- Here is an example of a full five-part cross reference:
-
- @xref{Node name, Cross Reference Name, Particular Topic,
- info-file-name, A Printed Manual}, for details.
-
-which produces
-
- *Note Cross Reference Name: (info-file-name)Node name,
- for details.
-
-in Info and
-
- See section "Particular Topic" in A Printed Manual, for details.
-
-in a printed book.
-
- The five possible arguments for a cross reference are:
-
- 1. The node name (required). This is the node to which the cross
- reference takes you. In a printed document, the location of the
- node provides the page reference only for references within the
- same document.
-
- 2. The cross reference name for the Info reference, if it is to be
- different from the node name. If you include this argument, it
- argument becomes the first part of the cross reference. It is
- usually omitted.
-
- 3. A topic description or section name. Often, this is the title of
- the section. This is used as the name of the reference in the
- printed manual. If omitted, the node name is used.
-
- 4. The name of the Info file in which the reference is located, if it
- is different from the current file.
-
- 5. The name of a printed manual from a different Texinfo file.
-
- The template for a full five argument cross reference looks like
-this:
-
- @xref{NODE-NAME, CROSS-REFERENCE-NAME, TITLE-OR-TOPIC,
- INFO-FILE-NAME, PRINTED-MANUAL-TITLE}.
-
- Cross references with one, two, three, four, and five arguments are
-described separately following the description of `@xref'.
-
- Write a node name in a cross reference in exactly the same way as in
-the `@node' line, including the same capitalization; otherwise, the
-formatters may not find the reference.
-
- You can write cross reference commands within a paragraph, but note
-how Info and TeX format the output of each of the various commands:
-write `@xref' at the beginning of a sentence; write `@pxref' only
-within parentheses, and so on.
-
-
-File: texi.info, Node: xref, Next: Top Node Naming, Prev: Cross Reference Parts, Up: Cross References
-
-`@xref'
-=======
-
- The `@xref' command generates a cross reference for the beginning of
-a sentence. The Info formatting commands convert it into an Info cross
-reference, which the Info `f' command can use to bring you directly to
-another node. The TeX typesetting commands convert it into a page
-reference, or a reference to another book or manual.
-
-* Menu:
-
-* Reference Syntax:: What a reference looks like and requires.
-* One Argument:: `@xref' with one argument.
-* Two Arguments:: `@xref' with two arguments.
-* Three Arguments:: `@xref' with three arguments.
-* Four and Five Arguments:: `@xref' with four and five arguments.
-
-
-File: texi.info, Node: Reference Syntax, Next: One Argument, Up: xref
-
-What a Reference Looks Like and Requires
-----------------------------------------
-
- Most often, an Info cross reference looks like this:
-
- *Note NODE-NAME::.
-
-or like this
-
- *Note CROSS-REFERENCE-NAME: NODE-NAME.
-
-In TeX, a cross reference looks like this:
-
- See Section SECTION-NUMBER [NODE-NAME], page PAGE.
-
-or like this
-
- See Section SECTION-NUMBER [TITLE-OR-TOPIC], page PAGE.
-
- The `@xref' command does not generate a period or comma to end the
-cross reference in either the Info file or the printed output. You
-must write that period or comma yourself; otherwise, Info will not
-recognize the end of the reference. (The `@pxref' command works
-differently. *Note `@pxref': pxref.)
-
- *Please note:* A period or comma *must* follow the closing brace
- of an `@xref'. It is required to terminate the cross reference.
- This period or comma will appear in the output, both in the Info
- file and in the printed manual.
-
- `@xref' must refer to an Info node by name. Use `@node' to define
-the node (*note Writing a Node::.).
-
- `@xref' is followed by several arguments inside braces, separated by
-commas. Whitespace before and after these commas is ignored.
-
- A cross reference requires only the name of a node; but it may
-contain up to four additional arguments. Each of these variations
-produces a cross reference that looks somewhat different.
-
- *Please note:* Commas separate arguments in a cross reference;
- avoid including them in the title or other part lest the formatters
- mistake them for separators.
-
-
-File: texi.info, Node: One Argument, Next: Two Arguments, Prev: Reference Syntax, Up: xref
-
-`@xref' with One Argument
--------------------------
-
- The simplest form of `@xref' takes one argument, the name of another
-node in the same Info file. The Info formatters produce output that
-the Info readers can use to jump to the reference; TeX produces output
-that specifies the page and section number for you.
-
-For example,
-
- @xref{Tropical Storms}.
-
-produces
-
- *Note Tropical Storms::.
-
-and
-
- See Section 3.1 [Tropical Storms], page 24.
-
-(Note that in the preceding example the closing brace is followed by a
-period.)
-
- You can write a clause after the cross reference, like this:
-
- @xref{Tropical Storms}, for more info.
-
-which produces
-
- *Note Tropical Storms::, for more info.
-
- See Section 3.1 [Tropical Storms], page 24, for more info.
-
-(Note that in the preceding example the closing brace is followed by a
-comma, and then by the clause, which is followed by a period.)
-
-
-File: texi.info, Node: Two Arguments, Next: Three Arguments, Prev: One Argument, Up: xref
-
-`@xref' with Two Arguments
---------------------------
-
- With two arguments, the second is used as the name of the Info cross
-reference, while the first is still the name of the node to which the
-cross reference points.
-
-The template is like this:
-
- @xref{NODE-NAME, CROSS-REFERENCE-NAME}.
-
-For example,
-
- @xref{Electrical Effects, Lightning}.
-
-produces:
-
- *Note Lightning: Electrical Effects.
-
-and
-
- See Section 5.2 [Electrical Effects], page 57.
-
-(Note that in the preceding example the closing brace is followed by a
-period; and that the node name is printed, not the cross reference
-name.)
-
- You can write a clause after the cross reference, like this:
-
- @xref{Electrical Effects, Lightning}, for more info.
-
-which produces
- *Note Lightning: Electrical Effects, for more info.
-
-and
-
- See Section 5.2 [Electrical Effects], page 57, for more info.
-
-(Note that in the preceding example the closing brace is followed by a
-comma, and then by the clause, which is followed by a period.)
-
-
-File: texi.info, Node: Three Arguments, Next: Four and Five Arguments, Prev: Two Arguments, Up: xref
-
-`@xref' with Three Arguments
-----------------------------
-
- A third argument replaces the node name in the TeX output. The third
-argument should be the name of the section in the printed output, or
-else state the topic discussed by that section. Often, you will want to
-use initial upper case letters so it will be easier to read when the
-reference is printed. Use a third argument when the node name is
-unsuitable because of syntax or meaning.
-
- Remember to avoid placing a comma within the title or topic section
-of a cross reference, or within any other section. The formatters
-divide cross references into arguments according to the commas; a comma
-within a title or other section will divide it into two arguments. In
-a reference, you need to write a title such as "Clouds, Mist, and Fog"
-without the commas.
-
- Also, remember to write a comma or period after the closing brace of
-a `@xref' to terminate the cross reference. In the following examples,
-a clause follows a terminating comma.
-
-The template is like this:
-
- @xref{NODE-NAME, CROSS-REFERENCE-NAME, TITLE-OR-TOPIC}.
-
-For example,
-
- @xref{Electrical Effects, Lightning, Thunder and Lightning},
- for details.
-
-produces
-
- *Note Lightning: Electrical Effects, for details.
-
-and
-
- See Section 5.2 [Thunder and Lightning], page 57, for details.
-
- If a third argument is given and the second one is empty, then the
-third argument serves both. (Note how two commas, side by side, mark
-the empty second argument.)
-
- @xref{Electrical Effects, , Thunder and Lightning},
- for details.
-
-produces
-
- *Note Thunder and Lightning: Electrical Effects, for details.
-
-and
-
- See Section 5.2 [Thunder and Lightning], page 57, for details.
-
- As a practical matter, it is often best to write cross references
-with just the first argument if the node name and the section title are
-the same, and with the first and third arguments if the node name and
-title are different.
-
- Here are several examples from `The GAWK Manual':
-
- @xref{Sample Program}.
- @xref{Glossary}.
- @xref{Case-sensitivity, ,Case-sensitivity in Matching}.
- @xref{Close Output, , Closing Output Files and Pipes},
- for more information.
- @xref{Regexp, , Regular Expressions as Patterns}.
-
-
-File: texi.info, Node: Four and Five Arguments, Prev: Three Arguments, Up: xref
-
-`@xref' with Four and Five Arguments
-------------------------------------
-
- In a cross reference, a fourth argument specifies the name of another
-Info file, different from the file in which the reference appears, and
-a fifth argument specifies its title as a printed manual.
-
- Remember that a comma or period must follow the closing brace of an
-`@xref' command to terminate the cross reference. In the following
-examples, a clause follows a terminating comma.
-
-The template is:
-
- @xref{NODE-NAME, CROSS-REFERENCE-NAME, TITLE-OR-TOPIC,
- INFO-FILE-NAME, PRINTED-MANUAL-TITLE}.
-
-For example,
-
- @xref{Electrical Effects, Lightning, Thunder and Lightning,
- weather, An Introduction to Meteorology}, for details.
-
-produces
-
- *Note Lightning: (weather)Electrical Effects, for details.
-
-The name of the Info file is enclosed in parentheses and precedes the
-name of the node.
-
-In a printed manual, the reference looks like this:
-
- See section "Thunder and Lightning" in An Introduction to
- Meteorology, for details.
-
-The title of the printed manual is typeset in italics; and the
-reference lacks a page number since TeX cannot know to which page a
-reference refers when that reference is to another manual.
-
- Often, you will leave out the second argument when you use the long
-version of `@xref'. In this case, the third argument, the topic
-description, will be used as the cross reference name in Info.
-
-The template looks like this:
-
- @xref{NODE-NAME, , TITLE-OR-TOPIC, INFO-FILE-NAME,
- PRINTED-MANUAL-TITLE}, for details.
-
-which produces
-
- *Note TITLE-OR-TOPIC: (INFO-FILE-NAME)NODE-NAME, for details.
-
-and
-
- See section TITLE-OR-TOPIC in PRINTED-MANUAL-TITLE, for details.
-
-For example,
-
- @xref{Electrical Effects, , Thunder and Lightning,
- weather, An Introduction to Meteorology}, for details.
-
-produces
-
- *Note Thunder and Lightning: (weather)Electrical Effects,
- for details.
-
-and
-
- See section "Thunder and Lightning" in An Introduction to
- Meteorology, for details.
-
- On rare occasions, you may want to refer to another Info file that
-is within a single printed manual--when multiple Texinfo files are
-incorporated into the same TeX run but make separate Info files. In
-this case, you need to specify only the fourth argument, and not the
-fifth.
-
-
-File: texi.info, Node: Top Node Naming, Next: ref, Prev: xref, Up: Cross References
-
-Naming a `Top' Node
-===================
-
- In a cross reference, you must always name a node. This means that
-in order to refer to a whole manual, you must identify the `Top' node by
-writing it as the first argument to the `@xref' command. (This is
-different from the way you write a menu entry; see *Note Referring to
-Other Info Files: Other Info Files.) At the same time, to provide a
-meaningful section topic or title in the printed cross reference
-(instead of the word `Top'), you must write an appropriate entry for
-the third argument to the `@xref' command.
-
-Thus, to make a cross reference to `The GNU Make Manual', write:
-
- @xref{Top, , Overview, make, The GNU Make Manual}.
-
-which produces
-
- *Note Overview: (make)Top.
-
-and
-
- See section "Overview" in The GNU Make Manual.
-
-In this example, `Top' is the name of the first node, and `Overview' is
-the name of the first section of the manual.
-
-
-File: texi.info, Node: ref, Next: pxref, Prev: Top Node Naming, Up: Cross References
-
-`@ref'
-======
-
- `@ref' is nearly the same as `@xref' except that it does not
-generate a `See' in the printed output, just the reference itself.
-This makes it useful as the last part of a sentence.
-
-For example,
-
- For more information, see @ref{Hurricanes}.
-
-produces
-
- For more information, see *Note Hurricanes.
-
-and
-
- For more information, see Section 8.2 [Hurricanes], page 123.
-
- The `@ref' command sometimes leads writers to express themselves in
-a manner that is suitable for a printed manual but looks awkward in the
-Info format. Bear in mind that your audience will be using both the
-printed and the Info format.
-
-For example,
-
- Sea surges are described in @ref{Hurricanes}.
-
-produces
-
- Sea surges are described in Section 6.7 [Hurricanes], page 72.
-
-in a printed document, and the following in Info:
-
- Sea surges are described in *Note Hurricanes::.
-
- *Caution:* You *must* write a period or comma immediately after an
- `@ref' command with two or more arguments. Otherwise, Info will
- not find the end of the cross reference entry and its attempt to
- follow the cross reference will fail. As a general rule, you
- should write a period or comma after every `@ref' command. This
- looks best in both the printed and the Info output.
-
-
-File: texi.info, Node: pxref, Next: inforef, Prev: ref, Up: Cross References
-
-`@pxref'
-========
-
- The parenthetical reference command, `@pxref', is nearly the same as
-`@xref', but you use it *only* inside parentheses and you do *not* type
-a comma or period after the command's closing brace. The command
-differs from `@xref' in two ways:
-
- 1. TeX typesets the reference for the printed manual with a lower case
- `see' rather than an upper case `See'.
-
- 2. The Info formatting commands automatically end the reference with a
- closing colon or period.
-
- Because one type of formatting automatically inserts closing
-punctuation and the other does not, you should use `@pxref' *only*
-inside parentheses as part of another sentence. Also, you yourself
-should not insert punctuation after the reference, as you do with
-`@xref'.
-
- `@pxref' is designed so that the output looks right and works right
-between parentheses both in printed output and in an Info file. In a
-printed manual, a closing comma or period should not follow a cross
-reference within parentheses; such punctuation is wrong. But in an
-Info file, suitable closing punctuation must follow the cross reference
-so Info can recognize its end. `@pxref' spares you the need to use
-complicated methods to put a terminator into one form of the output and
-not the other.
-
-With one argument, a parenthetical cross reference looks like this:
-
- ... storms cause flooding (@pxref{Hurricanes}) ...
-
-which produces
-
- ... storms cause flooding (*Note Hurricanes::) ...
-
-and
-
- ... storms cause flooding (see Section 6.7 [Hurricanes], page 72)
- ...
-
- With two arguments, a parenthetical cross reference has this
-template:
-
- ... (@pxref{NODE-NAME, CROSS-REFERENCE-NAME}) ...
-
-which produces
-
- ... (*Note CROSS-REFERENCE-NAME: NODE-NAME.) ...
-
-and
-
- ... (see Section NNN [NODE-NAME], page PPP) ...
-
- `@pxref' can be used with up to five arguments just like `@xref'
-(*note `@xref': xref.).
-
- *Please note:* Use `@pxref' only as a parenthetical reference. Do
- not try to use `@pxref' as a clause in a sentence. It will look
- bad in either the Info file, the printed output, or both.
-
- Also, parenthetical cross references look best at the ends of
- sentences. Although you may write them in the middle of a
- sentence, that location breaks up the flow of text.
-
-
-File: texi.info, Node: inforef, Prev: pxref, Up: Cross References
-
-`@inforef'
-==========
-
- `@inforef' is used for cross references to Info files for which
-there are no printed manuals. Even in a printed manual, `@inforef'
-generates a reference directing the user to look in an Info file.
-
- The command takes either two or three arguments, in the following
-order:
-
- 1. The node name.
-
- 2. The cross reference name (optional).
-
- 3. The Info file name.
-
-Separate the arguments with commas, as with `@xref'. Also, you must
-terminate the reference with a comma or period after the `}', as you do
-with `@xref'.
-
-The template is:
-
- @inforef{NODE-NAME, CROSS-REFERENCE-NAME, INFO-FILE-NAME},
-
-Thus,
-
- @inforef{Expert, Advanced Info commands, info},
- for more information.
-
-produces
-
- *Note Advanced Info commands: (info)Expert,
- for more information.
-
-and
-
- See Info file `info', node `Expert', for more information.
-
-Similarly,
-
- @inforef{Expert, , info}, for more information.
-
-produces
-
- *Note (info)Expert::, for more information.
-
-and
-
- See Info file `info', node `Expert', for more information.
-
- The converse of `@inforef' is `@cite', which is used to refer to
-printed works for which no Info form exists. *Note `@cite': cite.
-
-
-File: texi.info, Node: Marking Text, Next: Quotations and Examples, Prev: Cross References, Up: Top
-
-Marking Words and Phrases
-*************************
-
- In Texinfo, you can mark words and phrases in a variety of ways.
-The Texinfo formatters use this information to determine how to
-highlight the text. You can specify, for example, whether a word or
-phrase is a defining occurrence, a metasyntactic variable, or a symbol
-used in a program. Also, you can emphasize text.
-
-* Menu:
-
-* Indicating:: How to indicate definitions, files, etc.
-* Emphasis:: How to emphasize text.
-
-
-File: texi.info, Node: Indicating, Next: Emphasis, Up: Marking Text
-
-Indicating Definitions, Commands, etc.
-======================================
-
- Texinfo has commands for indicating just what kind of object a piece
-of text refers to. For example, metasyntactic variables are marked by
-`@var', and code by `@code'. Since the pieces of text are labelled by
-commands that tell what kind of object they are, it is easy to change
-the way the Texinfo formatters prepare such text. (Texinfo is an
-*intentional* formatting language rather than a *typesetting*
-formatting language.)
-
- For example, in a printed manual, code is usually illustrated in a
-typewriter font; `@code' tells TeX to typeset this text in this font.
-But it would be easy to change the way TeX highlights code to use
-another font, and this change would not effect how keystroke examples
-are highlighted. If straight typesetting commands were used in the body
-of the file and you wanted to make a change, you would need to check
-every single occurrence to make sure that you were changing code and
-not something else that should not be changed.
-
-* Menu:
-
-* Useful Highlighting:: Highlighting provides useful information.
-* code:: How to indicate code.
-* kbd:: How to show keyboard input.
-* key:: How to specify keys.
-* samp:: How to show a literal sequence of characters.
-* var:: How to indicate a metasyntactic variable.
-* file:: How to indicate the name of a file.
-* dfn:: How to specify a definition.
-* cite:: How to refer to a book that is not in Info.
-
-
-File: texi.info, Node: Useful Highlighting, Next: code, Up: Indicating
-
-Highlighting Commands are Useful
---------------------------------
-
- The highlighting commands can be used to generate useful information
-from the file, such as lists of functions or file names. It is
-possible, for example, to write a program in Emacs Lisp (or a keyboard
-macro) to insert an index entry after every paragraph that contains
-words or phrases marked by a specified command. You could do this to
-construct an index of functions if you had not already made the entries.
-
- The commands serve a variety of purposes:
-
-`@code{SAMPLE-CODE}'
- Indicate text that is a literal example of a piece of a program.
-
-`@kbd{KEYBOARD-CHARACTERS}'
- Indicate keyboard input.
-
-`@key{KEY-NAME}'
- Indicate the conventional name for a key on a keyboard.
-
-`@samp{TEXT}'
- Indicate text that is a literal example of a sequence of
- characters.
-
-`@var{METASYNTACTIC-VARIABLE}'
- Indicate a metasyntactic variable.
-
-`@file{FILE-NAME}'
- Indicate the name of a file.
-
-`@dfn{TERM}'
- Indicate the introductory or defining use of a term.
-
-`@cite{REFERENCE}'
- Indicate the name of a book.
-
-
-File: texi.info, Node: code, Next: kbd, Prev: Useful Highlighting, Up: Indicating
-
-`@code'{SAMPLE-CODE}
---------------------
-
- Use the `@code' command to indicate text that is a piece of a
-program and which consists of entire syntactic tokens. Enclose the
-text in braces.
-
- Thus, you should use `@code' for an expression in a program, for the
-name of a variable or function used in a program, or for a keyword.
-Also, you should use `@code' for the name of a program, such as `diff',
-that is a name used in the machine. (You should write the name of a
-program in the ordinary text font if you regard it as a new English
-word, such as `Emacs' or `Bison'.)
-
- Use `@code' for environment variables such as `TEXINPUTS', and other
-variables.
-
- Use `@code' for command names in command languages that resemble
-programming languages, such as Texinfo or the shell. For example,
-`@code' and `@samp' are produced by writing `@code{@@code}' and
-`@code{@@samp}' in the Texinfo source, respectively.
-
- Note, however, that you should not use `@code' for shell options
-such as `-c' when such options stand alone. (Use `@samp'.) Also, an
-entire shell command often looks better if written using `@samp' rather
-than `@code'. In this case, the rule is to choose the more pleasing
-format.
-
- It is incorrect to alter the case of a word inside an `@code'
-command when it appears at the beginning of a sentence. Most computer
-languages are case sensitive. In C, for example, `Printf' is different
-from the identifier `printf', and most likely is a misspelling of it.
-Even in languages which are not case sensitive, it is confusing to a
-human reader to see identifiers spelled in different ways. Pick one
-spelling and always use that. If you do not want to start a sentence
-with a command written all in lower case, you should rearrange the
-sentence.
-
- Do not use the `@code' command for a string of characters shorter
-than a syntactic token. If you are writing about `TEXINPU', which is
-just a part of the name for the `TEXINPUTS' environment variable, you
-should use `@samp'.
-
- In particular, you should not use the `@code' command when writing
-about the characters used in a token; do not, for example, use `@code'
-when you are explaining what letters or printable symbols can be used
-in the names of functions. (Use `@samp'.) Also, you should not use
-`@code' to mark text that is considered input to programs unless the
-input is written in a language that is like a programming language.
-For example, you should not use `@code' for the keystroke commands of
-GNU Emacs (use `@kbd' instead) although you may use `@code' for the
-names of the Emacs Lisp functions that the keystroke commands invoke.
-
- In the printed manual, `@code' causes TeX to typeset the argument in
-a typewriter face. In the Info file, it causes the Info formatting
-commands to use single quotation marks around the text.
-
- For example,
-
- Use @code{diff} to compare two files.
-
-produces this in the printed manual:
-
- Use `diff' to compare two files.
-
-
-File: texi.info, Node: kbd, Next: key, Prev: code, Up: Indicating
-
-`@kbd'{KEYBOARD-CHARACTERS}
----------------------------
-
- Use the `@kbd' command for characters of input to be typed by users.
-For example, to refer to the characters `M-a', write
-
- @kbd{M-a}
-
-and to refer to the characters `M-x shell', write
-
- @kbd{M-x shell}
-
- The `@kbd' command has the same effect as `@code' in Info, but may
-produce a different font in a printed manual.
-
- You can embed another @-command inside the braces of an `@kbd'
-command. Here, for example, is the way to describe a command that
-would be described more verbosely as "press an `r' and then press the
-RET key":
-
- @kbd{r @key{RET}}
-
-This produces: `r RET'
-
- You also use the `@kbd' command if you are spelling out the letters
-you type; for example:
-
- To give the @code{logout} command,
- type the characters @kbd{l o g o u t @key{RET}}.
-
-This produces:
-
- To give the `logout' command, type the characters `l o g o u t
- RET'.
-
- (Also, this example shows that you can add spaces for clarity. If
-you really want to mention a space character as one of the characters of
-input, write `@key{SPC}' for it.)
-
-
-File: texi.info, Node: key, Next: samp, Prev: kbd, Up: Indicating
-
-`@key'{KEY-NAME}
-----------------
-
- Use the `@key' command for the conventional name for a key on a
-keyboard, as in:
-
- @key{RET}
-
- You can use the `@key' command within the argument of an `@kbd'
-command when the sequence of characters to be typed includes one or
-more keys that are described by name.
-
- For example, to produce `C-x ESC' you would type:
-
- @kbd{C-x @key{ESC}}
-
- Here is a list of the recommended names for keys; they are all in
-upper case:
-
- SPC
- Space
-
- RET
- Return
-
- LFD
- Linefeed
-
- TAB
- Tab
-
- BS
- Backspace
-
- ESC
- Escape
-
- DEL
- Delete
-
- SFT
- Shift
-
- CTL
- Control
-
- META
- Meta
-
- There are subtleties to handling words like `meta' or `ctl' that are
-names of shift keys. When mentioning a character in which the shift
-key is used, such as `Meta-a', use the `@kbd' command alone; do not use
-the `@key' command; but when you are referring to the shift key in
-isolation, use the `@key' command. For example, write `@kbd{Meta-a}'
-to produce `Meta-a' and `@key{META}' to produce META. This is because
-`Meta-a' refers to keys that you press on a keyboard, but META refers
-to a key without implying that you press it. In short, use `@kbd' for
-what you do, and use `@key' for what you talk about: "Press `@kbd{M-a}'
-to move point to the beginning of the sentence. The `@key{META}' key
-is often in the lower left of the keyboard."
-
-
-File: texi.info, Node: samp, Next: var, Prev: key, Up: Indicating
-
-`@samp'{TEXT}
--------------
-
- Use the `@samp' command to indicate text that is a literal example
-or `sample' of a sequence of characters in a file, string, pattern, etc.
-Enclose the text in braces. The argument appears within single
-quotation marks in both the Info file and the printed manual; in
-addition, it is printed in a fixed-width font.
-
- To match @samp{foo} at the end of the line,
- use the regexp @samp{foo$}.
-
-produces
-
- To match `foo' at the end of the line, use the regexp `foo$'.
-
- Any time you are referring to single characters, you should use
-`@samp' unless `@kbd' is more appropriate. Use `@samp' for the names
-of command-line options. Also, you may use `@samp' for entire
-statements in C and for entire shell commands--in this case, `@samp'
-often looks better than `@code'. Basically, `@samp' is a catchall for
-whatever is not covered by `@code', `@kbd', or `@key'.
-
- Only include punctuation marks within braces if they are part of the
-string you are specifying. Write punctuation marks outside the braces
-if those punctuation marks are part of the English text that surrounds
-the string. In the following sentence, for example, the commas and
-period are outside of the braces:
-
- In English, the vowels are @samp{a}, @samp{e},
- @samp{i}, @samp{o}, @samp{u}, and sometimes
- @samp{y}.
-
-This produces:
-
- In English, the vowels are `a', `e', `i', `o', `u', and sometimes
- `y'.
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-5 b/gnu/usr.bin/texinfo/info-files/texi.info-5
deleted file mode 100644
index 84b7295..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-5
+++ /dev/null
@@ -1,1433 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: var, Next: file, Prev: samp, Up: Indicating
-
-`@var'{METASYNTACTIC-VARIABLE}
-------------------------------
-
- Use the `@var' command to indicate metasyntactic variables. A
-"metasyntactic variable" is something that stands for another piece of
-text. For example, you should use a metasyntactic variable in the
-documentation of a function to describe the arguments that are passed
-to that function.
-
- Do not use `@var' for the names of particular variables in
-programming languages. These are specific names from a program, so
-`@code' is correct for them. For example, the Lisp variable
-`texinfo-tex-command' is not a metasyntactic variable; it is properly
-formatted using `@code'.
-
- The effect of `@var' in the Info file is to change the case of the
-argument to all upper case; in the printed manual, to italicize it.
-
- For example,
-
- To delete file @var{filename},
- type @code{rm @var{filename}}.
-
-produces
-
- To delete file FILENAME, type `rm FILENAME'.
-
-(Note that `@var' may appear inside `@code', `@samp', `@file', etc.)
-
- Write a metasyntactic variable all in lower case without spaces, and
-use hyphens to make it more readable. Thus, the Texinfo source for the
-illustration of how to begin a Texinfo manual looks like this:
-
- \input texinfo
- @@setfilename @var{info-file-name}
- @@settitle @var{name-of-manual}
-
-This produces:
-
- \input texinfo
- @setfilename INFO-FILE-NAME
- @settitle NAME-OF-MANUAL
-
- In some documentation styles, metasyntactic variables are shown with
-angle brackets, for example:
-
- ..., type rm <filename>
-
-However, that is not the style that Texinfo uses. (You can, of course,
-modify the sources to TeX and the Info formatting commands to output
-the `<...>' format if you wish.)
-
-
-File: texi.info, Node: file, Next: dfn, Prev: var, Up: Indicating
-
-`@file'{FILE-NAME}
-------------------
-
- Use the `@file' command to indicate text that is the name of a file,
-buffer, or directory, or is the name of a node in Info. You can also
-use the command for file name suffixes. Do not use `@file' for symbols
-in a programming language; use `@code'.
-
- Currently, `@file' is equivalent to `@samp' in its effects. For
-example,
-
- The @file{.el} files are in
- the @file{/usr/local/emacs/lisp} directory.
-
-produces
-
- The `.el' files are in the `/usr/local/emacs/lisp' directory.
-
-
-File: texi.info, Node: dfn, Next: cite, Prev: file, Up: Indicating
-
-`@dfn'{TERM}
-------------
-
- Use the `@dfn' command to identify the introductory or defining use
-of a technical term. Use the command only in passages whose purpose is
-to introduce a term which will be used again or which the reader ought
-to know. Mere passing mention of a term for the first time does not
-deserve `@dfn'. The command generates italics in the printed manual,
-and double quotation marks in the Info file. For example:
-
- Getting rid of a file is called @dfn{deleting} it.
-
-produces
-
- Getting rid of a file is called "deleting" it.
-
- As a general rule, a sentence containing the defining occurrence of a
-term should be a definition of the term. The sentence does not need to
-say explicitly that it is a definition, but it should contain the
-information of a definition--it should make the meaning clear.
-
-
-File: texi.info, Node: cite, Prev: dfn, Up: Indicating
-
-`@cite'{REFERENCE}
-------------------
-
- Use the `@cite' command for the name of a book that lacks a
-companion Info file. The command produces italics in the printed
-manual, and quotation marks in the Info file.
-
- (If a book is written in Texinfo, it is better to use a cross
-reference command since a reader can easily follow such a reference in
-Info. *Note `@xref': xref.)
-
-
-File: texi.info, Node: Emphasis, Prev: Indicating, Up: Marking Text
-
-Emphasizing Text
-================
-
- Usually, Texinfo changes the font to mark words in the text
-according to what category the words belong to; an example is the
-`@code' command. Most often, this is the best way to mark words.
-However, sometimes you will want to emphasize text without indicating a
-category. Texinfo has two commands to do this. Also, Texinfo has
-several commands that specify the font in which TeX will typeset text.
-These commands have no affect on Info and only one of them, the `@r'
-command, has any regular use.
-
-* Menu:
-
-* emph & strong:: How to emphasize text in Texinfo.
-* Smallcaps:: How to use the small caps font.
-* Fonts:: Various font commands for printed output.
-
-
-File: texi.info, Node: emph & strong, Next: Smallcaps, Up: Emphasis
-
-`@emph'{TEXT} and `@strong'{TEXT}
----------------------------------
-
- The `@emph' and `@strong' commands are for emphasis; `@strong' is
-stronger. In printed output, `@emph' produces *italics* and `@strong'
-produces *bold*.
-
- For example,
-
- @quotation
- @strong{Caution:} @code{rm * .[^.]*} removes @emph{all}
- files in the directory.
- @end quotation
-
-produces:
-
- *Caution*: `rm * .[^.]*' removes *all*
- files in the directory.
-
- The `@strong' command is seldom used except to mark what is, in
-effect, a typographical element, such as the word `Caution' in the
-preceding example.
-
- In the Info file, both `@emph' and `@strong' put asterisks around
-the text.
-
- *Caution:* Do not use `@emph' or `@strong' with the word `Note';
- Info will mistake the combination for a cross reference. Use a
- phrase such as *Please note* or *Caution* instead.
-
-
-File: texi.info, Node: Smallcaps, Next: Fonts, Prev: emph & strong, Up: Emphasis
-
-`@sc'{TEXT}: The Small Caps Font
---------------------------------
-
- Use the `@sc' command to set text in the printed output in a small
-caps font and set text in the Info file in upper case letters.
-
- Write the text between braces in lower case, like this:
-
- The @sc{acm} and @sc{ieee} are technical societies.
-
-This produces:
-
- The ACM and IEEE are technical societies.
-
- TeX typesets the small caps font in a manner that prevents the
-letters from `jumping out at you on the page'. This makes small caps
-text easier to read than text in all upper case. The Info formatting
-commands set all small caps text in upper case.
-
- If the text between the braces of an `@sc' command is upper case,
-TeX typesets in full-size capitals. Use full-size capitals sparingly.
-
- You may also use the small caps font for a jargon word such as ATO
-(a NASA word meaning `abort to orbit').
-
- There are subtleties to using the small caps font with a jargon word
-such as CDR, a word used in Lisp programming. In this case, you should
-use the small caps font when the word refers to the second and
-subsequent elements of a list (the CDR of the list), but you should use
-`@code' when the word refers to the Lisp function of the same spelling.
-
-
-File: texi.info, Node: Fonts, Prev: Smallcaps, Up: Emphasis
-
-Fonts for Printing, Not Info
-----------------------------
-
- Texinfo provides four font commands that specify font changes in the
-printed manual but have no effect in the Info file. `@i' requests
-italic font (in some versions of TeX, a slanted font is used), `@b'
-requests bold face, `@t' requests the fixed-width, typewriter-style
-font used by `@code', and `@r' requests a roman font, which is the
-usual font in which text is printed. All four commands apply to an
-argument that follows, surrounded by braces.
-
- Only the `@r' command has much use: in example programs, you can use
-the `@r' command to convert code comments from the fixed-width font to
-a roman font. This looks better in printed output.
-
- For example,
-
- @lisp
- (+ 2 2) ; @r{Add two plus two.}
- @end lisp
-
-produces
-
- (+ 2 2) ; Add two plus two.
-
- If possible, you should avoid using the other three font commands.
-If you need to use one, it probably indicates a gap in the Texinfo
-language.
-
-
-File: texi.info, Node: Quotations and Examples, Next: Lists and Tables, Prev: Marking Text, Up: Top
-
-Quotations and Examples
-***********************
-
- Quotations and examples are blocks of text consisting of one or more
-whole paragraphs that are set off from the bulk of the text and treated
-differently. They are usually indented.
-
- In Texinfo, you always begin a quotation or example by writing an
-@-command at the beginning of a line by itself, and end it by writing
-an `@end' command that is also at the beginning of a line by itself.
-For instance, you begin an example by writing `@example' by itself at
-the beginning of a line and end the example by writing `@end example'
-on a line by itself, at the beginning of that line.
-
-* Menu:
-
-* Block Enclosing Commands:: Use different constructs for
- different purposes.
-* quotation:: How to write a quotation.
-* example:: How to write an example in a fixed-width font.
-* noindent:: How to prevent paragraph indentation.
-* Lisp Example:: How to illustrate Lisp code.
-* smallexample & smalllisp:: Forms for the `@smallbook' option.
-* display:: How to write an example in the current font.
-* format:: How to write an example that does not narrow
- the margins.
-* exdent:: How to undo the indentation of a line.
-* flushleft & flushright:: How to push text flushleft or flushright.
-* cartouche:: How to draw cartouches around examples.
-
-
-File: texi.info, Node: Block Enclosing Commands, Next: quotation, Up: Quotations and Examples
-
-The Block Enclosing Commands
-============================
-
- Here are commands for quotations and examples:
-
-`@quotation'
- Indicate text that is quoted. The text is filled, indented, and
- printed in a roman font by default.
-
-`@example'
- Illustrate code, commands, and the like. The text is printed in a
- fixed-width font, and indented but not filled.
-
-`@lisp'
- Illustrate Lisp code. The text is printed in a fixed-width font,
- and indented but not filled.
-
-`@smallexample'
- Illustrate code, commands, and the like. Similar to `@example',
- except that in TeX this command typesets text in a smaller font
- for the smaller `@smallbook' format than for the 8.5 by 11 inch
- format.
-
-`@smalllisp'
- Illustrate Lisp code. Similar to `@lisp', except that in TeX this
- command typesets text in a smaller font for the smaller
- `@smallbook' format than for the 8.5 by 11 inch format.
-
-`@display'
- Display illustrative text. The text is indented but not filled,
- and no font is specified (so, by default, the font is roman).
-
-`@format'
- Print illustrative text. The text is not indented and not filled
- and no font is specified (so, by default, the font is roman).
-
- The `@exdent' command is used within the above constructs to undo
-the indentation of a line.
-
- The `@flushleft' and `@flushright' commands are used to line up the
-left or right margins of unfilled text.
-
- The `@noindent' command may be used after one of the above
-constructs to prevent the following text from being indented as a new
-paragraph.
-
- You can use the `@cartouche' command within one of the above
-constructs to highlight the example or quotation by drawing a box with
-rounded corners around it. (The `@cartouche' command affects only the
-printed manual; it has no effect in the Info file; see *Note Drawing
-Cartouches Around Examples: cartouche.)
-
-
-File: texi.info, Node: quotation, Next: example, Prev: Block Enclosing Commands, Up: Quotations and Examples
-
-`@quotation'
-============
-
- The text of a quotation is processed normally except that:
-
- * the margins are closer to the center of the page, so the whole of
- the quotation is indented;
-
- * the first lines of paragraphs are indented no more than other
- lines;
-
- * in the printed output, interparagraph spacing is reduced.
-
- This is an example of text written between an `@quotation' command
- and an `@end quotation' command. An `@quotation' command is most
- often used to indicate text that is excerpted from another (real
- or hypothetical) printed work.
-
- Write an `@quotation' command as text on a line by itself. This
-line will disappear from the output. Mark the end of the quotation
-with a line beginning with and containing only `@end quotation'. The
-`@end quotation' line will likewise disappear from the output. Thus,
-the following,
-
- @quotation
- This is
- a foo.
- @end quotation
-
-produces
-
- This is a foo.
-
-
-File: texi.info, Node: example, Next: noindent, Prev: quotation, Up: Quotations and Examples
-
-`@example'
-==========
-
- The `@example' command is used to indicate an example that is not
-part of the running text, such as computer input or output.
-
- This is an example of text written between an
- `@example' command
- and an `@end example' command.
- The text is indented but not filled.
-
- In the printed manual, the text is typeset in a
- fixed-width font, and extra spaces and blank lines are
- significant. In the Info file, an analogous result is
- obtained by indenting each line with five spaces.
-
- Write an `@example' command at the beginning of a line by itself.
-This line will disappear from the output. Mark the end of the example
-with an `@end example' command, also written at the beginning of a line
-by itself. The `@end example' will disappear from the output.
-
- For example,
-
- @example
- mv foo bar
- @end example
-
-produces
-
- mv foo bar
-
- Since the lines containing `@example' and `@end example' will
-disappear, you should put a blank line before the `@example' and
-another blank line after the `@end example'. (Remember that blank
-lines between the beginning `@example' and the ending `@end example'
-will appear in the output.)
-
- *Caution:* Do not use tabs in the lines of an example (or anywhere
- else in Texinfo, for that matter)! TeX treats tabs as single
- spaces, and that is not what they look like. This is a problem
- with TeX. (If necessary, in Emacs, you can use `M-x untabify' to
- convert tabs in a region to multiple spaces.)
-
- Examples are often, logically speaking, "in the middle" of a
-paragraph, and the text continues after an example should not be
-indented. The `@noindent' command prevents a piece of text from being
-indented as if it were a new paragraph. (*Note noindent::.)
-
- (The `@code' command is used for examples of code that are embedded
-within sentences, not set off from preceding and following text. *Note
-`@code': code.)
-
-
-File: texi.info, Node: noindent, Next: Lisp Example, Prev: example, Up: Quotations and Examples
-
-`@noindent'
-===========
-
- An example or other inclusion can break a paragraph into segments.
-Ordinarily, the formatters indent text that follows an example as a new
-paragraph. However, you can prevent this by writing `@noindent' at the
-beginning of a line by itself preceding the continuation text.
-
- For example:
-
- @example
- This is an example
- @end example
-
- @noindent
- This line is not indented. As you can see, the
- beginning of the line is fully flush left with the line
- that follows after it. (This whole example is between
- @code{@@display} and @code{@@end display}.)
-
-produces
-
- This is an example
-
-
- This line is not indented. As you can see, the
- beginning of the line is fully flush left with the line
- that follows after it. (This whole example is between
- `@display' and `@end display'.)
-
- To adjust the number of blank lines properly in the Info file output,
-remember that the line containing `@noindent' does not generate a blank
-line, and neither does the `@end example' line.
-
- In the Texinfo source file for this manual, each line that says
-`produces' is preceded by a line containing `@noindent'.
-
- Do not put braces after an `@noindent' command; they are not
-necessary, since `@noindent' is a command used outside of paragraphs
-(*note Command Syntax::.).
-
-
-File: texi.info, Node: Lisp Example, Next: smallexample & smalllisp, Prev: noindent, Up: Quotations and Examples
-
-`@lisp'
-=======
-
- The `@lisp' command is used for Lisp code. It is synonymous with
-the `@example' command.
-
- This is an example of text written between an
- `@lisp' command and an `@end lisp' command.
-
- Use `@lisp' instead of `@example' so as to preserve information
-regarding the nature of the example. This is useful, for example, if
-you write a function that evaluates only and all the Lisp code in a
-Texinfo file. Then you can use the Texinfo file as a Lisp library.(1)
-
- Mark the end of `@lisp' with `@end lisp' on a line by itself.
-
- ---------- Footnotes ----------
-
- (1) It would be straightforward to extend Texinfo to work in a
-similar fashion for C, FORTRAN, or other languages.
-
-
-File: texi.info, Node: smallexample & smalllisp, Next: display, Prev: Lisp Example, Up: Quotations and Examples
-
-`@smallexample' and `@smalllisp'
-================================
-
- In addition to the regular `@example' and `@lisp' commands, Texinfo
-has two other "example-style" commands. These are the `@smallexample'
-and `@smalllisp' commands. Both these commands are designed for use
-with the `@smallbook' command that causes TeX to produce a printed
-manual in a 7 by 9.25 inch format rather than the regular 8.5 by 11
-inch format.
-
- In TeX, the `@smallexample' and `@smalllisp' commands typeset text
-in a smaller font for the smaller `@smallbook' format than for the 8.5
-by 11 inch format. Consequently, many examples containing long lines
-fit in a narrower, `@smallbook' page without needing to be shortened.
-Both commands typeset in the normal font size when you format for the
-8.5 by 11 inch size; indeed, in this situation, the `@smallexample' and
-`@smalllisp' commands are defined to be the `@example' and `@lisp'
-commands.
-
- In Info, the `@smallexample' and `@smalllisp' commands are
-equivalent to the `@example' and `@lisp' commands, and work exactly the
-same.
-
- Mark the end of `@smallexample' or `@smalllisp' with `@end
-smallexample' or `@end smalllisp', respectively.
-
- This is an example of text written between `@smallexample' and
- `@end smallexample'. In Info and in an 8.5 by 11 inch manual,
- this text appears in its normal size; but in a 7 by 9.25 inch manual,
- this text appears in a smaller font.
-
- The `@smallexample' and `@smalllisp' commands make it easier to
-prepare smaller format manuals without forcing you to edit examples by
-hand to fit them onto narrower pages.
-
- As a general rule, a printed document looks better if you write all
-the examples in a chapter consistently in `@example' or in
-`@smallexample'. Only occasionally should you mix the two formats.
-
- *Note Printing "Small" Books: smallbook, for more information about
-the `@smallbook' command.
-
-
-File: texi.info, Node: display, Next: format, Prev: smallexample & smalllisp, Up: Quotations and Examples
-
-`@display'
-==========
-
- The `@display' command begins a kind of example. It is like the
-`@example' command except that, in a printed manual, `@display' does
-not select the fixed-width font. In fact, it does not specify the font
-at all, so that the text appears in the same font it would have
-appeared in without the `@display' command.
-
- This is an example of text written between an `@display' command
- and an `@end display' command. The `@display' command
- indents the text, but does not fill it.
-
-
-File: texi.info, Node: format, Next: exdent, Prev: display, Up: Quotations and Examples
-
-`@format'
-=========
-
- The `@format' command is similar to `@example' except that, in the
-printed manual, `@format' does not select the fixed-width font and does
-not narrow the margins.
-
-This is an example of text written between an `@format' command
-and an `@end format' command. As you can see
-from this example,
-the `@format' command does not fill the text.
-
-
-File: texi.info, Node: exdent, Next: flushleft & flushright, Prev: format, Up: Quotations and Examples
-
-`@exdent': Undoing a Line's Indentation
-=======================================
-
- The `@exdent' command removes any indentation a line might have.
-The command is written at the beginning of a line and applies only to
-the text that follows the command that is on the same line. Do not use
-braces around the text. In a printed manual, the text on an `@exdent'
-line is printed in the roman font.
-
- `@exdent' is usually used within examples. Thus,
-
- @example
- This line follows an @@example command.
- @exdent This line is exdented.
- This line follows the exdented line.
- The @@end example comes on the next line.
- @end group
-
-produces
-
- This line follows an @example command.
-This line is exdented.
- This line follows the exdented line.
- The @end example comes on the next line.
-
- In practice, the `@exdent' command is rarely used. Usually, you
-un-indent text by ending the example and returning the page to its
-normal width.
-
-
-File: texi.info, Node: flushleft & flushright, Next: cartouche, Prev: exdent, Up: Quotations and Examples
-
-`@flushleft' and `@flushright'
-==============================
-
- The `@flushleft' and `@flushright' commands line up the ends of
-lines on the left and right margins of a page, but do not fill the
-text. The commands are written on lines of their own, without braces.
-The `@flushleft' and `@flushright' commands are ended by `@end
-flushleft' and `@end flushright' commands on lines of their own.
-
- For example,
-
- @flushleft
- This text is
- written flushleft.
- @end flushleft
-
-produces
-
- This text is
- written flushleft.
-
- Flushright produces the type of indentation often used in the return
-address of letters.
-
-For example,
-
- @flushright
- Here is an example of text written
- flushright. The @code{@flushright} command
- right justifies every line but leaves the
- left end ragged.
- @end flushright
-
-produces
-
- Here is an example of text written
- flushright. The `@flushright' command
- right justifies every line but leaves the
- left end ragged.
-
-
-File: texi.info, Node: cartouche, Prev: flushleft & flushright, Up: Quotations and Examples
-
-Drawing Cartouches Around Examples
-==================================
-
- In a printed manual, the `@cartouche' command draws a box with
-rounded corners around its contents. You can use this command to
-further highlight an example or quotation. For instance, you could
-write a manual in which one type of example is surrounded by a cartouche
-for emphasis.
-
- The `@cartouche' command affects only the printed manual; it has no
-effect in the Info file.
-
- For example,
-
- @example
- @cartouche
- % pwd
- /usr/local/lib/emacs/info
- @end cartouche
- @end example
-
-surrounds the two-line example with a box with rounded corners, in the
-printed manual.
-
-
-File: texi.info, Node: Lists and Tables, Next: Indices, Prev: Quotations and Examples, Up: Top
-
-Making Lists and Tables
-***********************
-
- Texinfo has several ways of making lists and two-column tables.
-Lists can be bulleted or numbered, while two-column tables can
-highlight the items in the first column.
-
-* Menu:
-
-* Introducing Lists:: Texinfo formats lists for you.
-* itemize:: How to construct a simple list.
-* enumerate:: How to construct a numbered list.
-* Two-column Tables:: How to construct a two-column table.
-
-
-File: texi.info, Node: Introducing Lists, Next: itemize, Up: Lists and Tables
-
-Introducing Lists
-=================
-
- Texinfo automatically indents the text in lists or tables, and
-numbers an enumerated list. This last feature is useful if you modify
-the list, since you do not need to renumber it yourself.
-
- Numbered lists and tables begin with the appropriate @-command at the
-beginning of a line, and end with the corresponding `@end' command on a
-line by itself. The table and itemized-list commands also require that
-you write formatting information on the same line as the beginning
-@-command.
-
- Begin an enumerated list, for example, with an `@enumerate' command
-and end the list with an `@end enumerate' command. Begin an itemized
-list with an `@itemize' command, followed on the same line by a
-formatting command such as `@bullet', and end the list with an `@end
-itemize' command.
-
- Precede each element of a list with an `@item' or `@itemx' command.
-
-Here is an itemized list of the different kinds of table and lists:
-
- * Itemized lists with and without bullets.
-
- * Enumerated lists, using numbers or letters.
-
- * Two-column tables with highlighting.
-
-Here is an enumerated list with the same items:
-
- 1. Itemized lists with and without bullets.
-
- 2. Enumerated lists, using numbers or letters.
-
- 3. Two-column tables with highlighting.
-
-And here is a two-column table with the same items and their @-commands:
-
-`@itemize'
- Itemized lists with and without bullets.
-
-`@enumerate'
- Enumerated lists, using numbers or letters.
-
-`@table'
-`@ftable'
-`@vtable'
- Two-column tables with highlighting.
-
-
-File: texi.info, Node: itemize, Next: enumerate, Prev: Introducing Lists, Up: Lists and Tables
-
-Making an Itemized List
-=======================
-
- The `@itemize' command produces sequences of indented paragraphs,
-with a bullet or other mark inside the left margin at the beginning of
-each paragraph for which such a mark is desired.
-
- Begin an itemized list by writing `@itemize' at the beginning of a
-line. Follow the command, on the same line, with a character or a
-Texinfo command that generates a mark. Usually, you will write
-`@bullet' after `@itemize', but you can use `@minus', or any character
-or any special symbol that results in a single character in the Info
-file. (When you write `@bullet' or `@minus' after an `@itemize'
-command, you may omit the `{}'.)
-
- Write the text of the indented paragraphs themselves after the
-`@itemize', up to another line that says `@end itemize'.
-
- Before each paragraph for which a mark in the margin is desired,
-write a line that says just `@item'. Do not write any other text on
-this line.
-
- Usually, you should put a blank line before an `@item'. This puts a
-blank line in the Info file. (TeX inserts the proper interline
-whitespace in either case.) Except when the entries are very brief,
-these blank lines make the list look better.
-
- Here is an example of the use of `@itemize', followed by the output
-it produces. Note that `@bullet' produces an `*' in Info and a round
-dot in TeX.
-
- @itemize @bullet
- @item
- Some text for foo.
-
- @item
- Some text
- for bar.
- @end itemize
-
-This produces:
-
- * Some text for foo.
-
- * Some text for bar.
-
- Itemized lists may be embedded within other itemized lists. Here is
-a list marked with dashes embedded in a list marked with bullets:
-
- @itemize @bullet
- @item
- First item.
-
- @itemize @minus
- @item
- Inner item.
-
- @item
- Second inner item.
- @end itemize
-
- @item
- Second outer item.
- @end itemize
-
-This produces:
-
- * First item.
-
- - Inner item.
-
- - Second inner item.
-
- * Second outer item.
-
-
-File: texi.info, Node: enumerate, Next: Two-column Tables, Prev: itemize, Up: Lists and Tables
-
-Making a Numbered or Lettered List
-==================================
-
- `@enumerate' is like `@itemize' except that the marks in the left
-margin contain successive integers or letters. (*Note `@itemize':
-itemize.)
-
- Write the `@enumerate' command at the beginning of a line. The
-command does not require an argument, but accepts either a number or a
-letter as an option. Without an argument, `@enumerate' starts the list
-with the number 1. With a numeric argument, such as 3, the command
-starts the list with that number. With an upper or lower case letter,
-such as `a' or `A', the command starts the list with that letter.
-
- Write the text of the enumerated list in the same way you write an
-itemized list: put `@item' on a line of its own before the start of
-each paragraph that you want enumerated. Do not write any other text on
-the line beginning with `@item'.
-
- You should put a blank line between entries in the list. This
-generally makes it easier to read the Info file.
-
- Here is an example of `@enumerate' without an argument:
-
- @enumerate
- @item
- Underlying causes.
-
- @item
- Proximate causes.
- @end enumerate
-
-This produces:
-
- 1. Underlying causes.
-
- 2. Proximate causes.
-
- Here is an example with an argument of `3':
-
- @enumerate 3
- @item
- Predisposing causes.
-
- @item
- Precipitating causes.
-
- @item
- Perpetuating causes.
- @end enumerate
-
-This produces:
-
- 3. Predisposing causes.
-
- 4. Precipitating causes.
-
- 5. Perpetuating causes.
-
- Here is a brief summary of the alternatives. The summary is
-constructed using `@enumerate' with an argument of `a'.
-
- a. `@enumerate'
-
- Without an argument, produce a numbered list, starting with the
- number 1.
-
- b. `@enumerate POSITIVE-INTEGER'
-
- With a (positive) numeric argument, start a numbered list with that
- number. You can use this to continue a list that you interrupted
- with other text.
-
- c. `@enumerate UPPER-CASE-LETTER'
-
- With an upper case letter as argument, start a list in which each
- item is marked by a letter, beginning with that upper case letter.
-
- d. `@enumerate LOWER-CASE-LETTER'
-
- With a lower case letter as argument, start a list in which each
- item is marked by a letter, beginning with that lower case letter.
-
- You can also nest enumerated lists, as in an outline.
-
-
-File: texi.info, Node: Two-column Tables, Prev: enumerate, Up: Lists and Tables
-
-Making a Two-column Table
-=========================
-
- `@table' is similar to `@itemize', but the command allows you to
-specify a name or heading line for each item. (*Note `@itemize':
-itemize.) The `@table' command is used to produce two-column tables,
-and is especially useful for glossaries and explanatory exhibits.
-
-* Menu:
-
-* table:: How to construct a two-column table.
-* ftable vtable:: How to construct a two-column table
- with automatic indexing.
-* itemx:: How to put more entries in the first column.
-
-
-File: texi.info, Node: table, Next: ftable vtable, Up: Two-column Tables
-
-Using the `@table' Command
---------------------------
-
- Use the `@table' command to produce two-column tables.
-
- Write the `@table' command at the beginning of a line and follow it
-on the same line with an argument that is a Texinfo command such as
-`@code', `@samp', `@var', or `@kbd'. Although these commands are
-usually followed by arguments in braces, in this case you use the
-command name without an argument because `@item' will supply the
-argument. This command will be applied to the text that goes into the
-first column of each item and determines how it will be highlighted.
-For example, `@samp' will cause the text in the first column to be
-highlighted with an `@samp' command.
-
- You may also choose to use the `@asis' command as an argument to
-`@table'. `@asis' is a command that does nothing; if you use this
-command after `@table', TeX and the Info formatting commands output the
-first column entries without added highlighting (`as is').
-
- (The `@table' command may work with other commands besides those
-listed here. However, you can only use commands that normally take
-arguments in braces.)
-
- Begin each table entry with an `@item' command at the beginning of a
-line. Write the first column text on the same line as the `@item'
-command. Write the second column text on the line following the
-`@item' line and on subsequent lines. (You do not need to type
-anything for an empty second column entry.) You may write as many
-lines of supporting text as you wish, even several paragraphs. But
-only text on the same line as the `@item' will be placed in the first
-column.
-
- Normally, you should put a blank line before an `@item' line. This
-puts a blank like in the Info file. Except when the entries are very
-brief, a blank line looks better.
-
- The following table, for example, highlights the text in the first
-column with an `@samp' command:
-
- @table @samp
- @item foo
- This is the text for
- @samp{foo}.
-
- @item bar
- Text for @samp{bar}.
- @end table
-
-This produces:
-
-`foo'
- This is the text for `foo'.
-
-`bar'
- Text for `bar'.
-
- If you want to list two or more named items with a single block of
-text, use the `@itemx' command. (*Note `@itemx': itemx.)
-
-
-File: texi.info, Node: ftable vtable, Next: itemx, Prev: table, Up: Two-column Tables
-
-`@ftable' and `@vtable'
------------------------
-
- The `@ftable' and `@vtable' commands are the same as the `@table'
-command except that `@ftable' automatically enters each of the items in
-the first column of the table into the index of functions and `@vtable'
-automatically enters each of the items in the first column of the table
-into the index of variables. This simplifies the task of creating
-indices. Only the items on the same line as the `@item' commands are
-indexed, and they are indexed in exactly the form that they appear on
-that line. *Note Creating Indices: Indices, for more information about
-indices.
-
- Begin a two-column table using `@ftable' or `@vtable' by writing the
-@-command at the beginning of a line, followed on the same line by an
-argument that is a Texinfo command such as `@code', exactly as you
-would for an `@table' command; and end the table with an `@end ftable'
-or `@end vtable' command on a line by itself.
-
-
-File: texi.info, Node: itemx, Prev: ftable vtable, Up: Two-column Tables
-
-`@itemx'
---------
-
- Use the `@itemx' command inside a table when you have two or more
-first column entries for the same item, each of which should appear on
-a line of its own. Use `@itemx' for all but the first entry. The
-`@itemx' command works exactly like `@item' except that it does not
-generate extra vertical space above the first column text.
-
- For example,
-
- @table @code
- @item upcase
- @itemx downcase
- These two functions accept a character or a string as
- argument, and return the corresponding upper case (lower
- case) character or string.
- @end table
-
-This produces:
-
-`upcase'
-`downcase'
- These two functions accept a character or a string as argument,
- and return the corresponding upper case (lower case) character or
- string.
-
-(Note also that this example illustrates multi-line supporting text in
-a two-column table.)
-
-
-File: texi.info, Node: Indices, Next: Insertions, Prev: Lists and Tables, Up: Top
-
-Creating Indices
-****************
-
- Using Texinfo, you can generate indices without having to sort and
-collate entries manually. In an index, the entries are listed in
-alphabetical order, together with information on how to find the
-discussion of each entry. In a printed manual, this information
-consists of page numbers. In an Info file, this information is a menu
-entry leading to the first node referenced.
-
- Texinfo provides several predefined kinds of index: an index for
-functions, an index for variables, an index for concepts, and so on.
-You can combine indices or use them for other than their canonical
-purpose. If you wish, you can define your own indices.
-
-* Menu:
-
-* Index Entries:: Choose different words for index entries.
-* Predefined Indices:: Use different indices for different kinds
- of entry.
-* Indexing Commands:: How to make an index entry.
-* Combining Indices:: How to combine indices.
-* New Indices:: How to define your own indices.
-
-
-File: texi.info, Node: Index Entries, Next: Predefined Indices, Up: Indices
-
-Making Index Entries
-====================
-
- When you are making index entries, it is good practice to think of
-the different ways people may look for something. Different people *do
-not* think of the same words when they look something up. A helpful
-index will have items indexed under all the different words that people
-may use. For example, one reader may think it obvious that the
-two-letter names for indices should be listed under "Indices,
-two-letter names", since the word "Index" is the general concept. But
-another reader may remember the specific concept of two-letter names
-and search for the entry listed as "Two letter names for indices". A
-good index will have both entries and will help both readers.
-
- Like typesetting, the construction of an index is a highly skilled,
-professional art, the subtleties of which are not appreciated until you
-need to do it yourself.
-
- *Note Printing Indices & Menus::, for information about printing an
-index at the end of a book or creating an index menu in an Info file.
-
-
-File: texi.info, Node: Predefined Indices, Next: Indexing Commands, Prev: Index Entries, Up: Indices
-
-Predefined Indices
-==================
-
- Texinfo provides six predefined indices:
-
- * A "concept index" listing concepts that are discussed.
-
- * A "function index" listing functions (such as entry points of
- libraries).
-
- * A "variables index" listing variables (such as global variables of
- libraries).
-
- * A "keystroke index" listing keyboard commands.
-
- * A "program index" listing names of programs.
-
- * A "data type index" listing data types (such as structures defined
- in header files).
-
-Not every manual needs all of these, and most manuals use two or three
-of them. This manual has two indices: a concept index and an @-command
-index (that is actually the function index but is called a command
-index in the chapter heading). Two or more indices can be combined
-into one using the `@synindex' or `@syncodeindex' commands. *Note
-Combining Indices::.
-
-
-File: texi.info, Node: Indexing Commands, Next: Combining Indices, Prev: Predefined Indices, Up: Indices
-
-Defining the Entries of an Index
-================================
-
- The data to make an index come from many individual indexing commands
-scattered throughout the Texinfo source file. Each command says to add
-one entry to a particular index; after formatting, the index will give
-the current page number or node name as the reference.
-
- An index entry consists of an indexing command at the beginning of a
-line followed, on the rest of the line, by the entry.
-
- For example, this section begins with the following five entries for
-the concept index:
-
- @cindex Defining indexing entries
- @cindex Index entries
- @cindex Entries for an index
- @cindex Specifying index entries
- @cindex Creating index entries
-
- Each predefined index has its own indexing command--`@cindex' for
-the concept index, `@findex' for the function index, and so on.
-
- The usual convention is to capitalize the first word of each index
-entry, unless that word is the name of a function, variable, or other
-such entity that should not be capitalized. Thus, if you are
-documenting Emacs Lisp, you should usually capitalize entries in the
-concept index, but not those in the function index. However, if your
-concept index entries are consistently short (one or two words each) it
-may look better for each regular entry to start with a lower case
-letter. Whichever convention you adapt, please be consistent!
-
- By default, entries for a concept index are printed in a small roman
-font and entries for the other indices are printed in a small `@code'
-font. You may change the way part of an entry is printed with the
-usual Texinfo commands, such as `@file' for file names and `@emph' for
-emphasis (*note Marking Text::.).
-
- The six indexing commands for predefined indices are:
-
-`@cindex CONCEPT'
- Make an entry in the concept index for CONCEPT.
-
-`@findex FUNCTION'
- Make an entry in the function index for FUNCTION.
-
-`@vindex VARIABLE'
- Make an entry in the variable index for VARIABLE.
-
-`@kindex KEYSTROKE'
- Make an entry in the key index for KEYSTROKE.
-
-`@pindex PROGRAM'
- Make an entry in the program index for PROGRAM.
-
-`@tindex DATA TYPE'
- Make an entry in the data type index for DATA TYPE.
-
- *Caution:* Do not use a colon in an index entry. In Info, a colon
- separates the menu entry name from the node name. An extra colon
- confuses Info. *Note The Parts of a Menu: Menu Parts, for more
- information about the structure of a menu entry.
-
- If you write several identical index entries in different places in a
-Texinfo file, the index in the printed manual will list all the pages to
-which those entries refer. However, the index in the Info file will
-list *only* the node that references the *first* of those index
-entries. Therefore, it is best to write indices in which each entry
-refers to only one place in the Texinfo file. Fortunately, this
-constraint is a feature rather than a loss since it means that the index
-will be easy to use. Otherwise, you could create an index that lists
-several pages for one entry and your reader would not know to which page
-to turn. If you have two identical entries for one topic, change the
-topics slightly, or qualify them to indicate the difference.
-
- You are not actually required to use the predefined indices for their
-canonical purposes. For example, suppose you wish to index some C
-preprocessor macros. You could put them in the function index along
-with actual functions, just by writing `@findex' commands for them;
-then, when you print the "Function Index" as an unnumbered chapter, you
-could give it the title `Function and Macro Index' and all will be
-consistent for the reader. Or you could put the macros in with the
-data types by writing `@tindex' commands for them, and give that index
-a suitable title so the reader will understand. (*Note Printing
-Indices & Menus::.)
-
-
-File: texi.info, Node: Combining Indices, Next: New Indices, Prev: Indexing Commands, Up: Indices
-
-Combining Indices
-=================
-
- Sometimes you will want to combine two disparate indices such as
-functions and concepts, perhaps because you have few enough of one of
-them that a separate index for them would look silly.
-
- You could put functions into the concept index by writing `@cindex'
-commands for them instead of `@findex' commands, and produce a
-consistent manual by printing the concept index with the title
-`Function and Concept Index' and not printing the `Function Index' at
-all; but this is not a robust procedure. It works only if your
-document is never included as part of another document that is designed
-to have a separate function index; if your document were to be included
-with such a document, the functions from your document and those from
-the other would not end up together. Also, to make your function names
-appear in the right font in the concept index, you would need to
-enclose every one of them between the braces of `@code'.
-
-* Menu:
-
-* syncodeindex:: How to merge two indices, using `@code'
- font for the merged-from index.
-* synindex:: How to merge two indices, using the
- default font of the merged-to index.
-
-
-File: texi.info, Node: syncodeindex, Next: synindex, Up: Combining Indices
-
-`@syncodeindex'
-...............
-
- When you want to combine functions and concepts into one index, you
-should index the functions with `@findex' and index the concepts with
-`@cindex', and use the `@syncodeindex' command to redirect the function
-index entries into the concept index.
-
- The `@syncodeindex' command takes two arguments; they are the name
-of the index to redirect, and the name of the index to redirect it to.
-The template looks like this:
-
- @syncodeindex FROM TO
-
- For this purpose, the indices are given two-letter names:
-
-`cp'
- concept index
-
-`fn'
- function index
-
-`vr'
- variable index
-
-`ky'
- key index
-
-`pg'
- program index
-
-`tp'
- data type index
-
- Write an `@syncodeindex' command before or shortly after the
-end-of-header line at the beginning of a Texinfo file. For example, to
-merge a function index with a concept index, write the following:
-
- @syncodeindex fn cp
-
-This will cause all entries designated for the function index to merge
-in with the concept index instead.
-
- To merge both a variables index and a function index into a concept
-index, write the following:
-
- @syncodeindex vr cp
- @syncodeindex fn cp
-
- The `@syncodeindex' command puts all the entries from the `from'
-index (the redirected index) into the `@code' font, overriding whatever
-default font is used by the index to which the entries are now
-directed. This way, if you direct function names from a function index
-into a concept index, all the function names are printed in the `@code'
-font as you would expect.
-
-
-File: texi.info, Node: synindex, Prev: syncodeindex, Up: Combining Indices
-
-`@synindex'
-...........
-
- The `@synindex' command is nearly the same as the `@syncodeindex'
-command, except that it does not put the `from' index entries into the
-`@code' font; rather it puts them in the roman font. Thus, you use
-`@synindex' when you merge a concept index into a function index.
-
- *Note Printing Indices & Menus::, for information about printing an
-index at the end of a book or creating an index menu in an Info file.
-
-
-File: texi.info, Node: New Indices, Prev: Combining Indices, Up: Indices
-
-Defining New Indices
-====================
-
- In addition to the predefined indices, you may use the `@defindex'
-and `@defcodeindex' commands to define new indices. These commands
-create new indexing @-commands with which you mark index entries. The
-`@defindex 'command is used like this:
-
- @defindex NAME
-
- The name of an index should be a two letter word, such as `au'. For
-example:
-
- @defindex au
-
- This defines a new index, called the `au' index. At the same time,
-it creates a new indexing command, `@auindex', that you can use to make
-index entries. Use the new indexing command just as you would use a
-predefined indexing command.
-
- For example, here is a section heading followed by a concept index
-entry and two `au' index entries.
-
- @section Cognitive Semantics
- @cindex kinesthetic image schemas
- @auindex Johnson, Mark
- @auindex Lakoff, George
-
-(Evidently, `au' serves here as an abbreviation for "author".) Texinfo
-constructs the new indexing command by concatenating the name of the
-index with `index'; thus, defining an `au' index leads to the automatic
-creation of an `@auindex' command.
-
- Use the `@printindex' command to print the index, as you do with the
-predefined indices. For example:
-
- @node Author Index, Subject Index, , Top
- @unnumbered Author Index
-
- @printindex au
-
- The `@defcodeindex' is like the `@defindex' command, except that, in
-the printed output, it prints entries in an `@code' font instead of a
-roman font. Thus, it parallels the `@findex' command rather than the
-`@cindex' command.
-
- You should define new indices within or right after the end-of-header
-line of a Texinfo file, before any `@synindex' or `@syncodeindex'
-commands (*note Header::.).
-
-
-File: texi.info, Node: Insertions, Next: Glyphs, Prev: Indices, Up: Top
-
-Special Insertions
-******************
-
- Texinfo provides several commands for formatting dimensions, for
-inserting single characters that have special meaning in Texinfo, such
-as braces, and for inserting special graphic symbols that do not
-correspond to characters, such as dots and bullets.
-
-* Menu:
-
-* Braces Atsigns Periods:: How to insert braces, `@' and periods.
-* dmn:: How to format a dimension.
-* Dots Bullets:: How to insert dots and bullets.
-* TeX and copyright:: How to insert the TeX logo
- and the copyright symbol.
-* minus:: How to insert a minus sign.
-
-
-File: texi.info, Node: Braces Atsigns Periods, Next: dmn, Up: Insertions
-
-Inserting `@', Braces, and Periods
-==================================
-
- `@' and curly braces are special characters in Texinfo. To insert
-these characters so they appear in text, you must put an `@' in front
-of these characters to prevent Texinfo from misinterpreting them.
-
- Periods are also special. Depending on whether the period is inside
-or at the end of a sentence, less or more space is inserted after a
-period in a typeset manual. Since it is not always possible for
-Texinfo to determine when a period ends a sentence and when it is used
-in an abbreviation, special commands are needed in some circumstances.
-(Usually, Texinfo can guess how to handle periods, so you do not need
-to use the special commands; you just enter a period as you would if
-you were using a typewriter, which means you put two spaces after the
-period, question mark, or exclamation mark that ends a sentence.)
-
- Do not put braces after any of these commands; they are not
-necessary.
-
-* Menu:
-
-* Inserting An Atsign::
-* Inserting Braces:: How to insert `{' and `}'
-* Controlling Spacing:: How to insert the right amount of space
- after punctuation within a sentence.
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-6 b/gnu/usr.bin/texinfo/info-files/texi.info-6
deleted file mode 100644
index cac7b3a..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-6
+++ /dev/null
@@ -1,1461 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Inserting An Atsign, Next: Inserting Braces, Up: Braces Atsigns Periods
-
-Inserting `@' with @@
----------------------
-
- `@@' stands for a single `@' in either printed or Info output.
-
- Do not put braces after an `@@' command.
-
-
-File: texi.info, Node: Inserting Braces, Next: Controlling Spacing, Prev: Inserting An Atsign, Up: Braces Atsigns Periods
-
-Inserting `{' and `}'with @{ and @}
------------------------------------
-
- `@{' stands for a single `{' in either printed or Info output.
-
- `@}' stands for a single `}' in either printed or Info output.
-
- Do not put braces after either an `@{' or an `@}' command.
-
-
-File: texi.info, Node: Controlling Spacing, Prev: Inserting Braces, Up: Braces Atsigns Periods
-
-Spacing After Colons and Periods
---------------------------------
-
- Use the `@:' command after a period, question mark, exclamation
-mark, or colon that should not be followed by extra space. For
-example, use `@:' after periods that end abbreviations which are not at
-the ends of sentences. `@:' has no effect on the Info file output.
-
- For example,
-
- The s.o.p.@: has three parts ...
- The s.o.p. has three parts ...
-
-produces
-
- The s.o.p. has three parts ...
- The s.o.p. has three parts ...
-
-`@:' has no effect on the Info output. (`s.o.p' is an acronym for
-"Standard Operating Procedure".)
-
- Use `@.' instead of a period at the end of a sentence that ends with
-a single capital letter. Otherwise, TeX will think the letter is an
-abbreviation and will not insert the correct end-of-sentence spacing.
-Here is an example:
-
- Give it to M.I.B. and to M.E.W@. Also, give it to R.J.C@.
- Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
-
-produces
-
- Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
- Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
-
- In the Info file output, `@.' is equivalent to a simple `.'.
-
- The meanings of `@:' and `@.' in Texinfo are designed to work well
-with the Emacs sentence motion commands. This made it necessary for
-them to be incompatible with some other formatting systems that use
-@-commands.
-
- Do not put braces after either an `@:' or an `@.' command.
-
-
-File: texi.info, Node: dmn, Next: Dots Bullets, Prev: Braces Atsigns Periods, Up: Insertions
-
-`@dmn'{DIMENSION}: Format a Dimension
-=====================================
-
- At times, you may want to write `12pt' or `8.5in' with little or no
-space between the number and the abbreviation for the dimension. You
-can use the `@dmn' command to do this. On seeing the command, TeX
-inserts just enough space for proper typesetting; the Info formatting
-commands insert no space at all, since the Info file does not require
-it.
-
- To use the `@dmn' command, write the number and then follow it
-immediately, with no intervening space, by `@dmn', and then by the
-dimension within braces.
-
-For example,
-
- A4 paper is 8.27@dmn{in} wide.
-
-produces
-
- A4 paper is 8.27in wide.
-
- Not everyone uses this style. Instead of writing `8.27@dmn{in}' in
-the Texinfo file, you may write `8.27 in.' or `8.27 inches'. (In these
-cases, the formatters may insert a line break between the number and the
-dimension. Also, if you write a period after an abbreviation within a
-sentence, you should write `@:' after the period to prevent TeX from
-inserting extra whitespace. *Note Spacing After Colons and Periods:
-Controlling Spacing.)
-
-
-File: texi.info, Node: Dots Bullets, Next: TeX and copyright, Prev: dmn, Up: Insertions
-
-Inserting Ellipsis, Dots, and Bullets
-=====================================
-
- An "ellipsis" (a line of dots) is not typeset as a string of
-periods, so a special command is used for ellipsis in Texinfo. The
-`@bullet' command is special, too. Each of these commands is followed
-by a pair of braces, `{}', without any whitespace between the name of
-the command and the braces. (You need to use braces with these
-commands because you can use them next to other text; without the
-braces, the formatters would be confused. *Note @-Command Syntax:
-Command Syntax, for further information.)
-
-* Menu:
-
-* dots:: How to insert dots ...
-* bullet:: How to insert a bullet.
-
-
-File: texi.info, Node: dots, Next: bullet, Up: Dots Bullets
-
-`@dots'{}
----------
-
- Use the `@dots{}' command to generate an ellipsis, which is three
-dots in a row, appropriately spaced, like this: `...'. Do not simply
-write three periods in the input file; that would work for the Info
-file output, but would produce the wrong amount of space between the
-periods in the printed manual.
-
-
-File: texi.info, Node: bullet, Prev: dots, Up: Dots Bullets
-
-`@bullet'{}
------------
-
- Use the `@bullet{}' command to generate a large round dot, or the
-closest possible thing to one. In Info, an asterisk is used.
-
- Here is a bullet: *
-
- When you use `@bullet' in `@itemize', you do not need to type the
-braces, because `@itemize' supplies them. *Note itemize::.
-
-
-File: texi.info, Node: TeX and copyright, Next: minus, Prev: Dots Bullets, Up: Insertions
-
-Inserting TeX and the Copyright Symbol
-======================================
-
- The logo `TeX' is typeset in a special fashion and it needs an
-@-command. The copyright symbol, `(C)', is also special. Each of
-these commands is followed by a pair of braces, `{}', without any
-whitespace between the name of the command and the braces.
-
-* Menu:
-
-* tex:: How to insert the TeX logo.
-* copyright symbol:: How to use `@copyright'{}.
-
-
-File: texi.info, Node: tex, Next: copyright symbol, Up: TeX and copyright
-
-`@TeX'{}
---------
-
- Use the `@TeX{}' command to generate `TeX'. In a printed manual,
-this is a special logo that is different from three ordinary letters.
-In Info, it just looks like `TeX'. The `@TeX{}' command is unique
-among Texinfo commands in that the T and the X are in upper case.
-
-
-File: texi.info, Node: copyright symbol, Prev: tex, Up: TeX and copyright
-
-`@copyright'{}
---------------
-
- Use the `@copyright{}' command to generate `(C)'. In a printed
-manual, this is a `c' inside a circle, and in Info, this is `(C)'.
-
-
-File: texi.info, Node: minus, Prev: TeX and copyright, Up: Insertions
-
-`@minus'{}: Inserting a Minus Sign
-==================================
-
- Use the `@minus{}' command to generate a minus sign. In a
-fixed-width font, this is a single hyphen, but in a proportional font,
-the symbol is the customary length for a minus sign--a little longer
-than a hyphen.
-
- You can compare the two forms:
-
- `-' is a minus sign generated with `@minus{}',
-
- `-' is a hyphen generated with the character `-'.
-
-In the fixed-width font used by Info, `@minus{}' is the same as a
-hyphen.
-
- You should not use `@minus{}' inside `@code' or `@example' because
-the width distinction is not made in the fixed-width font they use.
-
- When you use `@minus' to specify the mark beginning each entry in an
-itemized list, you do not need to type the braces (*note itemize::.).
-
-
-File: texi.info, Node: Glyphs, Next: Breaks, Prev: Insertions, Up: Top
-
-Glyphs for Examples
-*******************
-
- In Texinfo, code is often illustrated in examples that are delimited
-by `@example' and `@end example', or by `@lisp' and `@end lisp'. In
-such examples, you can indicate the results of evaluation or an
-expansion using `=>' or `==>'. Likewise, there are commands to insert
-glyphs to indicate printed output, error messages, equivalence of
-expressions, and the location of point.
-
- The glyph-insertion commands do not need to be used within an
-example, but most often they are. Every glyph-insertion command is
-followed by a pair of left- and right-hand braces.
-
-* Menu:
-
-* Glyphs Summary::
-* result:: How to show the result of expression.
-* expansion:: How to indicate an expansion.
-* Print Glyph:: How to indicate printed output.
-* Error Glyph:: How to indicate an error message.
-* Equivalence:: How to indicate equivalence.
-* Point Glyph:: How to indicate the location of point.
-
-
-File: texi.info, Node: Glyphs Summary, Next: result, Up: Glyphs
-
-Glyphs Summary
-==============
-
- Here are the different glyph commands:
-
-=>
- `@result{}' points to the result of an expression.
-
-==>
- `@expansion{}' shows the results of a macro expansion.
-
--|
- `@print{}' indicates printed output.
-
-error-->
- `@error{}' indicates that the following text is an error message.
-
-==
- `@equiv{}' indicates the exact equivalence of two forms.
-
--!-
- `@point{}' shows the location of point.
-
-
-File: texi.info, Node: result, Next: expansion, Prev: Glyphs Summary, Up: Glyphs
-
-=>: Indicating Evaluation
-=========================
-
- Use the `@result{}' command to indicate the result of evaluating an
-expression.
-
- The `@result{}' command is displayed as `=>' in Info and as a double
-stemmed arrow in the printed output.
-
- Thus, the following,
-
- (cdr '(1 2 3))
- => (2 3)
-
-may be read as "`(cdr '(1 2 3))' evaluates to `(2 3)'".
-
-
-File: texi.info, Node: expansion, Next: Print Glyph, Prev: result, Up: Glyphs
-
-==>: Indicating an Expansion
-============================
-
- When an expression is a macro call, it expands into a new expression.
-You can indicate the result of the expansion with the `@expansion{}'
-command.
-
- The `@expansion{}' command is displayed as `==>' in Info and as a
-long arrow with a flat base in the printed output.
-
- For example, the following
-
- @lisp
- (third '(a b c))
- @expansion{} (car (cdr (cdr '(a b c))))
- @result{} c
- @end lisp
-
-produces
-
- (third '(a b c))
- ==> (car (cdr (cdr '(a b c))))
- => c
-
-which may be read as:
-
- `(third '(a b c))' expands to `(car (cdr (cdr '(a b c))))'; the
- result of evaluating the expression is `c'.
-
-Often, as in this case, an example looks better if the `@expansion{}'
-and `@result{}' commands are indented five spaces.
-
-
-File: texi.info, Node: Print Glyph, Next: Error Glyph, Prev: expansion, Up: Glyphs
-
--|: Indicating Printed Output
-=============================
-
- Sometimes an expression will print output during its execution. You
-can indicate the printed output with the `@print{}' command.
-
- The `@print{}' command is displayed as `-|' in Info and similarly,
-as a horizontal dash butting against a vertical bar, in the printed
-output.
-
- In the following example, the printed text is indicated with `-|',
-and the value of the expression follows on the last line.
-
- (progn (print 'foo) (print 'bar))
- -| foo
- -| bar
- => bar
-
-In a Texinfo source file, this example is written as follows:
-
- @lisp
- (progn (print 'foo) (print 'bar))
- @print{} foo
- @print{} bar
- @result{} bar
- @end lisp
-
-
-File: texi.info, Node: Error Glyph, Next: Equivalence, Prev: Print Glyph, Up: Glyphs
-
-error-->: Indicating an Error Message
-=====================================
-
- A piece of code may cause an error when you evaluate it. You can
-designate the error message with the `@error{}' command.
-
- The `@error{}' command is displayed as `error-->' in Info and as the
-word `error' in a box in the printed output.
-
- Thus,
-
- @lisp
- (+ 23 'x)
- @error{} Wrong type argument: integer-or-marker-p, x
- @end lisp
-
-produces
-
- (+ 23 'x)
- error--> Wrong type argument: integer-or-marker-p, x
-
-This indicates that the following error message is printed when you
-evaluate the expression:
-
- Wrong type argument: integer-or-marker-p, x
-
- Note that `error-->' itself is not part of the error message.
-
-
-File: texi.info, Node: Equivalence, Next: Point Glyph, Prev: Error Glyph, Up: Glyphs
-
-==: Indicating Equivalence
-==========================
-
- Sometimes two expressions produce identical results. You can
-indicate the exact equivalence of two forms with the `@equiv{}' command.
-
- The `@equiv{}' command is displayed as `==' in Info and as a three
-parallel horizontal lines in the printed output.
-
- Thus,
-
- @lisp
- (make-sparse-keymap) @equiv{} (list 'keymap)
- @end lisp
-
-produces
-
- (make-sparse-keymap) == (list 'keymap)
-
-This indicates that evaluating `(make-sparse-keymap)' produces
-identical results to evaluating `(list 'keymap)'.
-
-
-File: texi.info, Node: Point Glyph, Prev: Equivalence, Up: Glyphs
-
-Indicating Point in a Buffer
-============================
-
- Sometimes you need to show an example of text in an Emacs buffer. In
-such examples, the convention is to include the entire contents of the
-buffer in question between two lines of dashes containing the buffer
-name.
-
- You can use the `@point{}' command to show the location of point in
-the text in the buffer. (The symbol for point, of course, is not part
-of the text in the buffer; it indicates the place *between* two
-characters where point is located.)
-
- The `@point{}' command is displayed as `-!-' in Info and as a small
-five pointed star in the printed output.
-
- The following example shows the contents of buffer `foo' before and
-after evaluating a Lisp command to insert the word `changed'.
-
- ---------- Buffer: foo ----------
- This is the -!-contents of foo.
- ---------- Buffer: foo ----------
-
- (insert "changed ")
- => nil
- ---------- Buffer: foo ----------
- This is the changed -!-contents of foo.
- ---------- Buffer: foo ----------
-
- In a Texinfo source file, the example is written like this:
-
- @example
- ---------- Buffer: foo ----------
- This is the @point{}contents of foo.
- ---------- Buffer: foo ----------
-
- (insert "changed ")
- @result{} nil
- ---------- Buffer: foo ----------
- This is the changed @point{}contents of foo.
- ---------- Buffer: foo ----------
- @end example
-
-
-File: texi.info, Node: Breaks, Next: Definition Commands, Prev: Glyphs, Up: Top
-
-Making and Preventing Breaks
-****************************
-
- Usually, a Texinfo file is processed both by TeX and by one of the
-Info formatting commands. Line, paragraph, or page breaks sometimes
-occur in the `wrong' place in one or other form of output. You must
-ensure that text looks right both in the printed manual and in the Info
-file.
-
- For example, in a printed manual, page breaks may occur awkwardly in
-the middle of an example; to prevent this, you can hold text together
-using a grouping command that keeps the text from being split across
-two pages. Conversely, you may want to force a page break where none
-would occur normally. Fortunately, problems like these do not often
-arise. When they do, use the break, break prevention, or pagination
-commands.
-
-* Menu:
-
-* Break Commands:: Cause and prevent splits.
-* Line Breaks:: How to force a single line to use two lines.
-* w:: How to prevent unwanted line breaks.
-* sp:: How to insert blank lines.
-* page:: How to force the start of a new page.
-* group:: How to prevent unwanted page breaks.
-* need:: Another way to prevent unwanted page breaks.
-
-
-File: texi.info, Node: Break Commands, Next: Line Breaks, Up: Breaks
-
-The Break Commands
-==================
-
- The break commands create line and paragraph breaks:
-
-`@*'
- Force a line break.
-
-`@sp N'
- Skip N blank lines.
-
- The line-break-prevention command holds text together all on one
-line:
-
-`@w{TEXT}'
- Prevent TEXT from being split and hyphenated across two lines.
-
- The pagination commands apply only to printed output, since Info
-files do not have pages.
-
-`@page'
- Start a new page in the printed manual.
-
-`@group'
- Hold text together that must appear on one printed page.
-
-`@need MILS'
- Start a new printed page if not enough space on this one.
-
-
-File: texi.info, Node: Line Breaks, Next: w, Prev: Break Commands, Up: Breaks
-
-`@*': Generate Line Breaks
-==========================
-
- The `@*' command forces a line break in both the printed manual and
-in Info.
-
- For example,
-
- This line @* is broken @*in two places.
-
-produces
-
- This line
- is broken
- in two places.
-
-(Note that the space after the first `@*' command is faithfully carried
-down to the next line.)
-
- The `@*' command is often used in a file's copyright page:
-
- This is edition 2.0 of the Texinfo documentation,@*
- and is for ...
-
-In this case, the `@*' command keeps TeX from stretching the line
-across the whole page in an ugly manner.
-
- *Please note:* Do not write braces after an `@*' command; they are
- not needed.
-
- Do not write an `@refill' command at the end of a paragraph
- containing an `@*' command; it will cause the paragraph to be
- refilled after the line break occurs, negating the effect of the
- line break.
-
-
-File: texi.info, Node: w, Next: sp, Prev: Line Breaks, Up: Breaks
-
-`@w'{TEXT}: Prevent Line Breaks
-===============================
-
- `@w{TEXT}' outputs TEXT and prohibits line breaks within TEXT.
-
- You can use the `@w' command to prevent TeX from automatically
-hyphenating a long name or phrase that accidentally falls near the end
-of a line.
-
- You can copy GNU software from @w{@file{prep.ai.mit.edu}}.
-
-produces
-
- You can copy GNU software from `prep.ai.mit.edu'.
-
- In the Texinfo file, you must write the `@w' command and its
-argument (all the affected text) all on one line.
-
- *Caution:* Do not write an `@refill' command at the end of a
- paragraph containing an `@w' command; it will cause the paragraph
- to be refilled and may thereby negate the effect of the `@w'
- command.
-
-
-File: texi.info, Node: sp, Next: page, Prev: w, Up: Breaks
-
-`@sp' N: Insert Blank Lines
-===========================
-
- A line beginning with and containing only `@sp N' generates N blank
-lines of space in both the printed manual and the Info file. `@sp'
-also forces a paragraph break. For example,
-
- @sp 2
-
-generates two blank lines.
-
- The `@sp' command is most often used in the title page.
-
-
-File: texi.info, Node: page, Next: group, Prev: sp, Up: Breaks
-
-`@page': Start a New Page
-=========================
-
- A line containing only `@page' starts a new page in a printed
-manual. The command has no effect on Info files since they are not
-paginated. An `@page' command is often used in the `@titlepage'
-section of a Texinfo file to start the copyright page.
-
-
-File: texi.info, Node: group, Next: need, Prev: page, Up: Breaks
-
-`@group': Prevent Page Breaks
-=============================
-
- The `@group' command (on a line by itself) is used inside an
-`@example' or similar construct to begin an unsplittable vertical
-group, which will appear entirely on one page in the printed output.
-The group is terminated by a line containing only `@end group'. These
-two lines produce no output of their own, and in the Info file output
-they have no effect at all.
-
- Although `@group' would make sense conceptually in a wide variety of
-contexts, its current implementation works reliably only within
-`@example' and variants, and within `@display', `@format', `@flushleft'
-and `@flushright'. *Note Quotations and Examples::. (What all these
-commands have in common is that each line of input produces a line of
-output.) In other contexts, `@group' can cause anomalous vertical
-spacing.
-
- This formatting requirement means that you should write:
-
- @example
- @group
- ...
- @end group
- @end example
-
-with the `@group' and `@end group' commands inside the `@example' and
-`@end example' commands.
-
- The `@group' command is most often used to hold an example together
-on one page. In this Texinfo manual, more than 100 examples contain
-text that is enclosed between `@group' and `@end group'.
-
- If you forget to end a group, you may get strange and unfathomable
-error messages when you run TeX. This is because TeX keeps trying to
-put the rest of the Texinfo file onto the one page and does not start
-to generate error messages until it has processed considerable text.
-It is a good rule of thumb to look for a missing `@end group' if you
-get incomprehensible error messages in TeX.
-
-
-File: texi.info, Node: need, Prev: group, Up: Breaks
-
-`@need MILS': Prevent Page Breaks
-=================================
-
- A line containing only `@need N' starts a new page in a printed
-manual if fewer than N mils (thousandths of an inch) remain on the
-current page. Do not use braces around the argument N. The `@need'
-command has no effect on Info files since they are not paginated.
-
- This paragraph is preceded by an `@need' command that tells TeX to
-start a new page if fewer than 800 mils (eight-tenths inch) remain on
-the page. It looks like this:
-
- @need 800
- This paragraph is preceded by ...
-
- The `@need' command is useful for preventing orphans (single lines
-at the bottoms of printed pages).
-
-
-File: texi.info, Node: Definition Commands, Next: Footnotes, Prev: Breaks, Up: Top
-
-Definition Commands
-*******************
-
- The `@deffn' command and the other "definition commands" enable you
-to describe functions, variables, macros, commands, user options,
-special forms and other such artifacts in a uniform format.
-
- In the Info file, a definition causes the entity
-category--`Function', `Variable', or whatever--to appear at the
-beginning of the first line of the definition, followed by the entity's
-name and arguments. In the printed manual, the command causes TeX to
-print the entity's name and its arguments on the left margin and print
-the category next to the right margin. In both output formats, the
-body of the definition is indented. Also, the name of the entity is
-entered into the appropriate index: `@deffn' enters the name into the
-index of functions, `@defvr' enters it into the index of variables, and
-so on.
-
- A manual need not and should not contain more than one definition for
-a given name. An appendix containing a summary should use `@table'
-rather than the definition commands.
-
-* Menu:
-
-* Def Cmd Template:: How to structure a description using a
- definition command.
-* Optional Arguments:: How to handle optional and repeated arguments.
-* deffnx:: How to group two or more `first' lines.
-* Def Cmds in Detail:: All the definition commands.
-* Def Cmd Conventions:: Conventions for writing definitions.
-* Sample Function Definition::
-
-
-File: texi.info, Node: Def Cmd Template, Next: Optional Arguments, Up: Definition Commands
-
-The Template for a Definition
-=============================
-
- The `@deffn' command is used for definitions of entities that
-resemble functions. To write a definition using the `@deffn' command,
-write the `@deffn' command at the beginning of a line and follow it on
-the same line by the category of the entity, the name of the entity
-itself, and its arguments (if any). Then write the body of the
-definition on succeeding lines. (You may embed examples in the body.)
-Finally, end the definition with an `@end deffn' command written on a
-line of its own. (The other definition commands follow the same
-format.)
-
- The template for a definition looks like this:
-
- @deffn CATEGORY NAME ARGUMENTS...
- BODY-OF-DEFINITION
- @end deffn
-
-For example,
-
- @deffn Command forward-word count
- This command moves point forward @var{count} words
- (or backward if @var{count} is negative). ...
- @end deffn
-
-produces
-
- - Command: forward-word COUNT
- This function moves point forward COUNT words (or backward if
- COUNT is negative). ...
-
- Capitalize the category name like a title. If the name of the
-category contains spaces, as in the phrase `Interactive Command', write
-braces around it. For example:
-
- @deffn {Interactive Command} isearch-forward
- ...
- @end deffn
-
-Otherwise, the second word will be mistaken for the name of the entity.
-
- Some of the definition commands are more general than others. The
-`@deffn' command, for example, is the general definition command for
-functions and the like--for entities that may take arguments. When you
-use this command, you specify the category to which the entity belongs.
-The `@deffn' command possesses three predefined, specialized
-variations, `@defun', `@defmac', and `@defspec', that specify the
-category for you: "Function", "Macro", and "Special Form" respectively.
-The `@defvr' command also is accompanied by several predefined,
-specialized variations for describing particular kinds of variables.
-
- The template for a specialized definition, such as `@defun', is
-similar to the template for a generalized definition, except that you
-do not need to specify the category:
-
- @defun NAME ARGUMENTS...
- BODY-OF-DEFINITION
- @end defun
-
-Thus,
-
- @defun buffer-end flag
- This function returns @code{(point-min)} if @var{flag}
- is less than 1, @code{(point-max)} otherwise.
- ...
- @end defun
-
-produces
-
- - Function: buffer-end FLAG
- This function returns `(point-min)' if FLAG is less than 1,
- `(point-max)' otherwise. ...
-
-*Note Sample Function Definition: Sample Function Definition, for a
-more detailed example of a function definition, including the use of
-`@example' inside the definition.
-
- The other specialized commands work like `@defun'.
-
-
-File: texi.info, Node: Optional Arguments, Next: deffnx, Prev: Def Cmd Template, Up: Definition Commands
-
-Optional and Repeated Arguments
-===============================
-
- Some entities take optional or repeated arguments, which may be
-specified by a distinctive glyph that uses square brackets and
-ellipses. For example, a special form often breaks its argument list
-into separate arguments in more complicated ways than a straightforward
-function.
-
- An argument enclosed within square brackets is optional. Thus,
-[OPTIONAL-ARG] means that OPTIONAL-ARG is optional. An argument
-followed by an ellipsis is optional and may be repeated more than once.
-Thus, REPEATED-ARGS... stands for zero or more arguments. Parentheses
-are used when several arguments are grouped into additional levels of
-list structure in Lisp.
-
- Here is the `@defspec' line of an example of an imaginary special
-form:
-
- - Special Form: foobar (VAR [FROM TO [INC]]) BODY...
-
-In this example, the arguments FROM and TO are optional, but must both
-be present or both absent. If they are present, INC may optionally be
-specified as well. These arguments are grouped with the argument VAR
-into a list, to distinguish them from BODY, which includes all
-remaining elements of the form.
-
- In a Texinfo source file, this `@defspec' line is written like this
-(except it would not be split over two lines, as it is in this example).
-
- @defspec foobar (@var{var} [@var{from} @var{to}
- [@var{inc}]]) @var{body}@dots{}
-
-The function is listed in the Command and Variable Index under `foobar'.
-
-
-File: texi.info, Node: deffnx, Next: Def Cmds in Detail, Prev: Optional Arguments, Up: Definition Commands
-
-Two or More `First' Lines
-=========================
-
- To create two or more `first' or header lines for a definition,
-follow the first `@deffn' line by a line beginning with `@deffnx'. The
-`@deffnx' command works exactly like `@deffn' except that it does not
-generate extra vertical white space between it and the preceding line.
-
- For example,
-
- @deffn {Interactive Command} isearch-forward
- @deffnx {Interactive Command} isearch-backward
- These two search commands are similar except ...
- @end deffn
-
-produces
-
- - Interactive Command: isearch-forward
- - Interactive Command: isearch-backward
- These two search commands are similar except ...
-
- Each of the other definition commands has an `x' form: `@defunx',
-`@defvrx', `@deftypefunx', etc.
-
- The `x' forms work just like `@itemx'; see *Note `@itemx': itemx.
-
-
-File: texi.info, Node: Def Cmds in Detail, Next: Def Cmd Conventions, Prev: deffnx, Up: Definition Commands
-
-The Definition Commands
-=======================
-
- Texinfo provides more than a dozen definition commands, all of which
-are described in this section.
-
- The definition commands automatically enter the name of the entity in
-the appropriate index: for example, `@deffn', `@defun', and `@defmac'
-enter function names in the index of functions; `@defvr' and `@defvar'
-enter variable names in the index of variables.
-
- Although the examples that follow mostly illustrate Lisp, the
-commands can be used for other programming languages.
-
-* Menu:
-
-* Functions Commands:: Commands for functions and similar entities.
-* Variables Commands:: Commands for variables and similar entities.
-* Typed Functions:: Commands for functions in typed languages.
-* Typed Variables:: Commands for variables in typed languages.
-* Abstract Objects:: Commands for object-oriented programming.
-* Data Types:: The definition command for data types.
-
-
-File: texi.info, Node: Functions Commands, Next: Variables Commands, Up: Def Cmds in Detail
-
-Functions and Similar Entities
-------------------------------
-
- This section describes the commands for describing functions and
-similar entities:
-
-`@deffn CATEGORY NAME ARGUMENTS...'
- The `@deffn' command is the general definition command for
- functions, interactive commands, and similar entities that may take
- arguments. You must choose a term to describe the category of
- entity being defined; for example, "Function" could be used if the
- entity is a function. The `@deffn' command is written at the
- beginning of a line and is followed on the same line by the
- category of entity being described, the name of this particular
- entity, and its arguments, if any. Terminate the definition with
- `@end deffn' on a line of its own.
-
- For example, here is a definition:
-
- @deffn Command forward-char nchars
- Move point forward @var{nchars} characters.
- @end deffn
-
- This shows a rather terse definition for a "command" named
- `forward-char' with one argument, NCHARS.
-
- `@deffn' prints argument names such as NCHARS in italics or upper
- case, as if `@var' had been used, because we think of these names
- as metasyntactic variables--they stand for the actual argument
- values. Within the text of the description, write an argument name
- explicitly with `@var' to refer to the value of the argument. In
- the example above, we used `@var{nchars}' in this way.
-
- The template for `@deffn' is:
-
- @deffn CATEGORY NAME ARGUMENTS...
- BODY-OF-DEFINITION
- @end deffn
-
-`@defun NAME ARGUMENTS...'
- The `@defun' command is the definition command for functions.
- `@defun' is equivalent to `@deffn Function ...'.
-
- For example,
-
- @defun set symbol new-value
- Change the value of the symbol @var{symbol}
- to @var{new-value}.
- @end defun
-
- shows a rather terse definition for a function `set' whose
- arguments are SYMBOL and NEW-VALUE. The argument names on the
- `@defun' line automatically appear in italics or upper case as if
- they were enclosed in `@var'. Terminate the definition with `@end
- defun' on a line of its own.
-
- The template is:
-
- @defun FUNCTION-NAME ARGUMENTS...
- BODY-OF-DEFINITION
- @end defun
-
- `@defun' creates an entry in the index of functions.
-
-`@defmac NAME ARGUMENTS...'
- The `@defmac' command is the definition command for macros.
- `@defmac' is equivalent to `@deffn Macro ...' and works like
- `@defun'.
-
-`@defspec NAME ARGUMENTS...'
- The `@defspec' command is the definition command for special
- forms. (In Lisp, a special form is an entity much like a
- function.) `@defspec' is equivalent to `@deffn {Special Form} ...'
- and works like `@defun'.
-
-
-File: texi.info, Node: Variables Commands, Next: Typed Functions, Prev: Functions Commands, Up: Def Cmds in Detail
-
-Variables and Similar Entities
-------------------------------
-
- Here are the commands for defining variables and similar entities:
-
-`@defvr CATEGORY NAME'
- The `@defvr' command is a general definition command for something
- like a variable--an entity that records a value. You must choose
- a term to describe the category of entity being defined; for
- example, "Variable" could be used if the entity is a variable.
- Write the `@defvr' command at the beginning of a line and followed
- it on the same line by the category of the entity and the name of
- the entity.
-
- Capitalize the category name like a title. If the name of the
- category contains spaces, as in the name `User Option', write
- braces around it. Otherwise, the second word will be mistaken for
- the name of the entity, for example:
-
- @defvr {User Option} fill-column
- This buffer-local variable specifies
- the maximum width of filled lines.
- ...
- @end defvr
-
- Terminate the definition with `@end defvr' on a line of its own.
-
- The template is:
-
- @defvr CATEGORY NAME
- BODY-OF-DEFINITION
- @end defvr
-
- `@defvr' creates an entry in the index of variables for NAME.
-
-`@defvar NAME'
- The `@defvar' command is the definition command for variables.
- `@defvar' is equivalent to `@defvr Variable ...'.
-
- For example:
-
- @defvar kill-ring
- ...
- @end defvar
-
- The template is:
-
- @defvar NAME
- BODY-OF-DEFINITION
- @end defvar
-
- `@defvar' creates an entry in the index of variables for NAME.
-
-`@defopt NAME'
- The `@defopt' command is the definition command for user options.
- `@defopt' is equivalent to `@defvr {User Option} ...' and works
- like `@defvar'.
-
-
-File: texi.info, Node: Typed Functions, Next: Typed Variables, Prev: Variables Commands, Up: Def Cmds in Detail
-
-Functions in Typed Languages
-----------------------------
-
- The `@deftypefn' command and its variations are for describing
-functions in C or any other language in which you must declare types of
-variables and functions.
-
-`@deftypefn CATEGORY DATA-TYPE NAME ARGUMENTS...'
- The `@deftypefn' command is the general definition command for
- functions and similar entities that may take arguments and that are
- typed. The `@deftypefn' command is written at the beginning of a
- line and is followed on the same line by the category of entity
- being described, the type of the returned value, the name of this
- particular entity, and its arguments, if any.
-
- For example,
-
- @deftypefn {Library Function} int foobar
- (int @var{foo}, float @var{bar})
- ...
- @end deftypefn
-
- (where the text before the "...", shown above as two lines, would
- actually be a single line in a real Texinfo file) produces the
- following in Info:
-
- -- Library Function: int foobar (int FOO, float BAR)
- ...
-
- This means that `foobar' is a "library function" that returns an
- `int', and its arguments are FOO (an `int') and BAR (a `float').
-
- The argument names that you write in `@deftypefn' are not subject
- to an implicit `@var'--since the actual names of the arguments in
- `@deftypefn' are typically scattered among data type names and
- keywords, Texinfo cannot find them without help. Instead, you
- must write `@var' explicitly around the argument names. In the
- example above, the argument names are `foo' and `bar'.
-
- The template for `@deftypefn' is:
-
- @deftypefn CATEGORY DATA-TYPE NAME ARGUMENTS ...
- BODY-OF-DESCRIPTION
- @end deftypefn
-
- Note that if the CATEGORY or DATA TYPE is more than one word then
- it must be enclosed in braces to make it a single argument.
-
- If you are describing a procedure in a language that has packages,
- such as Ada, you might consider using `@deftypefn' in a manner
- somewhat contrary to the convention described in the preceding
- paragraphs.
-
- For example:
-
- @deftypefn stacks private push
- (@var{s}:in out stack;
- @var{n}:in integer)
- ...
- @end deftypefn
-
- (The `@deftypefn' arguments are shown split into three lines, but
- would be a single line in a real Texinfo file.)
-
- In this instance, the procedure is classified as belonging to the
- package `stacks' rather than classified as a `procedure' and its
- data type is described as `private'. (The name of the procedure
- is `push', and its arguments are S and N.)
-
- `@deftypefn' creates an entry in the index of functions for NAME.
-
-`@deftypefun DATA-TYPE NAME ARGUMENTS...'
- The `@deftypefun' command is the specialized definition command
- for functions in typed languages. The command is equivalent to
- `@deftypefn Function ...'.
-
- Thus,
-
- @deftypefun int foobar (int @var{foo}, float @var{bar})
- ...
- @end deftypefun
-
- produces the following in Info:
-
- -- Function: int foobar (int FOO, float BAR)
- ...
-
- The template is:
-
- @deftypefun TYPE NAME ARGUMENTS...
- BODY-OF-DESCRIPTION
- @end deftypefun
-
- `@deftypefun' creates an entry in the index of functions for NAME.
-
-
-File: texi.info, Node: Typed Variables, Next: Abstract Objects, Prev: Typed Functions, Up: Def Cmds in Detail
-
-Variables in Typed Languages
-----------------------------
-
- Variables in typed languages are handled in a manner similar to
-functions in typed languages. *Note Typed Functions::. The general
-definition command `@deftypevr' corresponds to `@deftypefn' and the
-specialized definition command `@deftypevar' corresponds to
-`@deftypefun'.
-
-`@deftypevr CATEGORY DATA-TYPE NAME'
- The `@deftypevr' command is the general definition command for
- something like a variable in a typed language--an entity that
- records a value. You must choose a term to describe the category
- of the entity being defined; for example, "Variable" could be used
- if the entity is a variable.
-
- The `@deftypevr' command is written at the beginning of a line and
- is followed on the same line by the category of the entity being
- described, the data type, and the name of this particular entity.
-
- For example:
-
- @deftypevr {Global Flag} int enable
- ...
- @end deftypevr
-
- produces the following in Info:
-
- -- Global Flag: int enable
- ...
-
- The template is:
-
- @deftypevr CATEGORY DATA-TYPE NAME
- BODY-OF-DESCRIPTION
- @end deftypevr
-
- `@deftypevr' creates an entry in the index of variables for NAME.
-
-`@deftypevar DATA-TYPE NAME'
- The `@deftypevar' command is the specialized definition command
- for variables in typed languages. `@deftypevar' is equivalent to
- `@deftypevr Variable ...'.
-
- For example:
-
- @deftypevar int fubar
- ...
- @end deftypevar
-
- produces the following in Info:
-
- -- Variable: int fubar
- ...
-
- The template is:
-
- @deftypevar DATA-TYPE NAME
- BODY-OF-DESCRIPTION
- @end deftypevar
-
- `@deftypevar' creates an entry in the index of variables for NAME.
-
-
-File: texi.info, Node: Abstract Objects, Next: Data Types, Prev: Typed Variables, Up: Def Cmds in Detail
-
-Object-Oriented Programming
----------------------------
-
- Here are the commands for formatting descriptions about abstract
-objects, such as are used in object-oriented programming. A class is a
-defined type of abstract object. An instance of a class is a
-particular object that has the type of the class. An instance variable
-is a variable that belongs to the class but for which each instance has
-its own value.
-
- In a definition, if the name of a class is truly a name defined in
-the programming system for a class, then you should write an `@code'
-around it. Otherwise, it is printed in the usual text font.
-
-`@defcv CATEGORY CLASS NAME'
- The `@defcv' command is the general definition command for
- variables associated with classes in object-oriented programming.
- The `@defcv' command is followed by three arguments: the category
- of thing being defined, the class to which it belongs, and its
- name. Thus,
-
- @defcv {Class Option} Window border-pattern
- ...
- @end defcv
-
- illustrates how you would write the first line of a definition of
- the `border-pattern' class option of the class `Window'.
-
- The template is
-
- @defcv CATEGORY CLASS NAME
- ...
- @end defcv
-
- `@defcv' creates an entry in the index of variables.
-
-`@defivar CLASS NAME'
- The `@defivar' command is the definition command for instance
- variables in object-oriented programming. `@defivar' is
- equivalent to `@defcv {Instance Variable} ...'
-
- The template is:
-
- @defivar CLASS INSTANCE-VARIABLE-NAME
- BODY-OF-DEFINITION
- @end defivar
-
- `@defivar' creates an entry in the index of variables.
-
-`@defop CATEGORY CLASS NAME ARGUMENTS...'
- The `@defop' command is the general definition command for
- entities that may resemble methods in object-oriented programming.
- These entities take arguments, as functions do, but are associated
- with particular classes of objects.
-
- For example, some systems have constructs called "wrappers" that
- are associated with classes as methods are, but that act more like
- macros than like functions. You could use `@defop Wrapper' to
- describe one of these.
-
- Sometimes it is useful to distinguish methods and "operations".
- You can think of an operation as the specification for a method.
- Thus, a window system might specify that all window classes have a
- method named `expose'; we would say that this window system
- defines an `expose' operation on windows in general. Typically,
- the operation has a name and also specifies the pattern of
- arguments; all methods that implement the operation must accept
- the same arguments, since applications that use the operation do
- so without knowing which method will implement it.
-
- Often it makes more sense to document operations than methods. For
- example, window application developers need to know about the
- `expose' operation, but need not be concerned with whether a given
- class of windows has its own method to implement this operation.
- To describe this operation, you would write:
-
- @defop Operation windows expose
-
- The `@defop' command is written at the beginning of a line and is
- followed on the same line by the overall name of the category of
- operation, the name of the class of the operation, the name of the
- operation, and its arguments, if any.
-
- The template is:
-
- @defop CATEGORY CLASS NAME ARGUMENTS...
- BODY-OF-DEFINITION
- @end defop
-
- `@defop' creates an entry, such as ``expose' on `windows'', in the
- index of functions.
-
-`@defmethod CLASS NAME ARGUMENTS...'
- The `@defmethod' command is the definition command for methods in
- object-oriented programming. A method is a kind of function that
- implements an operation for a particular class of objects and its
- subclasses. In the Lisp Machine, methods actually were functions,
- but they were usually defined with `defmethod'.
-
- `@defmethod' is equivalent to `@defop Method ...'. The command is
- written at the beginning of a line and is followed by the name of
- the class of the method, the name of the method, and its
- arguments, if any.
-
- For example,
-
- @defmethod `bar-class' bar-method argument
- ...
- @end defmethod
-
- illustrates the definition for a method called `bar-method' of the
- class `bar-class'. The method takes an argument.
-
- The template is:
-
- @defmethod CLASS METHOD-NAME ARGUMENTS...
- BODY-OF-DEFINITION
- @end defmethod
-
- `@defmethod' creates an entry in the index of functions, such as
- ``bar-method' on `bar-class''.
-
-
-File: texi.info, Node: Data Types, Prev: Abstract Objects, Up: Def Cmds in Detail
-
-Data Types
-----------
-
- Here is the command for data types:
-
-`@deftp CATEGORY NAME ATTRIBUTES...'
- The `@deftp' command is the generic definition command for data
- types. The command is written at the beginning of a line and is
- followed on the same line by the category, by the name of the type
- (which is a word like `int' or `float'), and then by names of
- attributes of objects of that type. Thus, you could use this
- command for describing `int' or `float', in which case you could
- use `data type' as the category. (A data type is a category of
- certain objects for purposes of deciding which operations can be
- performed on them.)
-
- In Lisp, for example, "pair" names a particular data type, and an
- object of that type has two slots called the CAR and the CDR.
- Here is how you would write the first line of a definition of
- `pair'.
-
- @deftp {Data type} pair car cdr
- ...
- @end deftp
-
- The template is:
-
- @deftp CATEGORY NAME-OF-TYPE ATTRIBUTES...
- BODY-OF-DEFINITION
- @end deftp
-
- `@deftp' creates an entry in the index of data types.
-
-
-File: texi.info, Node: Def Cmd Conventions, Next: Sample Function Definition, Prev: Def Cmds in Detail, Up: Definition Commands
-
-Conventions for Writing Definitions
-===================================
-
- When you write a definition using `@deffn', `@defun', or one of the
-other definition commands, please take care to use arguments that
-indicate the meaning, as with the COUNT argument to the `forward-word'
-function. Also, if the name of an argument contains the name of a
-type, such as INTEGER, take care that the argument actually is of that
-type.
-
-
-File: texi.info, Node: Sample Function Definition, Prev: Def Cmd Conventions, Up: Definition Commands
-
-A Sample Function Definition
-============================
-
- A function definition uses the `@defun' and `@end defun' commands.
-The name of the function follows immediately after the `@defun' command
-and it is followed, on the same line, by the parameter list.
-
- Here is a definition from `The GNU Emacs Lisp Reference Manual'.
-(*Note Calling Functions: (elisp)Calling Functions.)
-
- - Function: apply FUNCTION &rest ARGUMENTS
- `apply' calls FUNCTION with ARGUMENTS, just like `funcall'
- but with one difference: the last of ARGUMENTS is a list of
- arguments to give to FUNCTION, rather than a single argument.
- We also say that this list is "appended" to the other
- arguments.
-
- `apply' returns the result of calling FUNCTION. As with
- `funcall', FUNCTION must either be a Lisp function or a
- primitive function; special forms and macros do not make
- sense in `apply'.
-
- (setq f 'list)
- => list
- (apply f 'x 'y 'z)
- error--> Wrong type argument: listp, z
- (apply '+ 1 2 '(3 4))
- => 10
- (apply '+ '(1 2 3 4))
- => 10
-
- (apply 'append '((a b c) nil (x y z) nil))
- => (a b c x y z)
-
- An interesting example of using `apply' is found in the
- description of `mapcar'.
-
- In the Texinfo source file, this example looks like this:
-
- @defun apply function &rest arguments
-
- @code{apply} calls @var{function} with
- @var{arguments}, just like @code{funcall} but with one
- difference: the last of @var{arguments} is a list of
- arguments to give to @var{function}, rather than a single
- argument. We also say that this list is @dfn{appended}
- to the other arguments.
-
- @code{apply} returns the result of calling
- @var{function}. As with @code{funcall},
- @var{function} must either be a Lisp function or a
- primitive function; special forms and macros do not make
- sense in @code{apply}.
-
- @example
- (setq f 'list)
- @result{} list
- (apply f 'x 'y 'z)
- @error{} Wrong type argument: listp, z
- (apply '+ 1 2 '(3 4))
- @result{} 10
- (apply '+ '(1 2 3 4))
- @result{} 10
-
- (apply 'append '((a b c) nil (x y z) nil))
- @result{} (a b c x y z)
- @end example
-
- An interesting example of using @code{apply} is found
- in the description of @code{mapcar}.@refill
- @end defun
-
-In this manual, this function is listed in the Command and Variable
-Index under `apply'.
-
- Ordinary variables and user options are described using a format like
-that for functions except that variables do not take arguments.
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-7 b/gnu/usr.bin/texinfo/info-files/texi.info-7
deleted file mode 100644
index 3ea85ee..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-7
+++ /dev/null
@@ -1,1307 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Footnotes, Next: Conditionals, Prev: Definition Commands, Up: Top
-
-Footnotes
-*********
-
- A "footnote" is for a reference that documents or elucidates the
-primary text.(1)
-
- In Texinfo, footnotes are created with the `@footnote' command.
-This command is followed immediately by a left brace, then by the text
-of the footnote, and then by a terminating right brace. The template
-is:
-
- @footnote{TEXT}
-
- Footnotes may be of any length, but are usually short.
-
- For example, this clause is followed by a sample footnote(2); in the
-Texinfo source, it looks like this:
-
- ...a sample footnote @footnote{Here is the sample
- footnote.}; in the Texinfo source...
-
- In a printed manual or book, the reference mark for a footnote is a
-small, superscripted number; the text of the footnote is written at the
-bottom of the page, below a horizontal line.
-
- In Info, the reference mark for a footnote is a pair of parentheses
-with the footnote number between them, like this: `(1)'.
-
- Info has two footnote styles, which determine where the text of the
-footnote is located:
-
- * In the `End' node style, all the footnotes for a single node are
- placed at the end of that node. The footnotes are separated from
- the rest of the node by a line of dashes with the word `Footnotes'
- within it. Each footnote begins with an `(N)' reference mark.
-
- Here is an example of a single footnote in the end of node style:
-
- --------- Footnotes ---------
-
- (1) Here is a sample footnote.
-
- * In the `Separate' node style, all the footnotes for a single node
- are placed in an automatically constructed node of their own. In
- this style, a "footnote reference" follows each `(N)' reference
- mark in the body of the node. The footnote reference is actually
- a cross reference which you use to reach the footnote node.
-
- The name of the node containing the footnotes is constructed by
- appending `-Footnotes' to the name of the node that contains the
- footnotes. (Consequently, the footnotes' node for the `Footnotes'
- node is `Footnotes-Footnotes'!) The footnotes' node has an `Up'
- node pointer that leads back to its parent node.
-
- Here is how the first footnote in this manual looks after being
- formatted for Info in the separate node style:
-
- File: texinfo.info Node: Overview-Footnotes, Up: Overview
-
- (1) Note that the first syllable of "Texinfo" is
- pronounced like "speck", not "hex". ...
-
- A Texinfo file may be formatted into an Info file with either
-footnote style.
-
- Use the `@footnotestyle' command to specify an Info file's footnote
-style. Write this command at the beginning of a line followed by an
-argument, either `end' for the end node style or `separate' for the
-separate node style.
-
- For example,
-
- @footnotestyle end
-
-or
- @footnotestyle separate
-
- Write an `@footnotestyle' command before or shortly after the
-end-of-header line at the beginning of a Texinfo file. (If you include
-the `@footnotestyle' command between the start-of-header and
-end-of-header lines, the region formatting commands will format
-footnotes as specified.)
-
- If you do not specify a footnote style, the formatting commands use
-their default style. Currently, `makeinfo' uses the `end' style, while
-`texinfo-format-buffer' and `texinfo-format-region' use the `separate'
-style.
-
- This chapter contains two footnotes.
-
- ---------- Footnotes ----------
-
- (1) A footnote should complement or expand upon the primary text,
-but a reader should not need to read a footnote to understand the
-primary text. For a thorough discussion of footnotes, see `The Chicago
-Manual of Style', which is published by the University of Chicago Press.
-
- (2) Here is the sample footnote.
-
-
-File: texi.info, Node: Conditionals, Next: Format/Print Hardcopy, Prev: Footnotes, Up: Top
-
-Conditionally Visible Text
-**************************
-
- Sometimes it is good to use different text for a printed manual and
-its corresponding Info file. In this case, you can use the
-"conditional commands" to specify which text is for the printed manual
-and which is for the Info file.
-
-* Menu:
-
-* Conditional Commands:: How to specify text for Info or TeX.
-* Using Ordinary TeX Commands:: You can use any and all TeX commands.
-* set clear value:: How to designate which text to format (for
- both Info and TeX); and how to set a
- flag to a string that you can insert.
-
-
-File: texi.info, Node: Conditional Commands, Next: Using Ordinary TeX Commands, Up: Conditionals
-
-Using `@ifinfo' and `@iftex'
-============================
-
- `@ifinfo' begins segments of text that should be ignored by TeX when
-it typesets the printed manual. The segment of text appears only in
-the Info file. The `@ifinfo' command should appear on a line by
-itself; end the Info-only text with a line containing `@end ifinfo' by
-itself. At the beginning of a Texinfo file, the Info permissions are
-contained within a region marked by `@ifinfo' and `@end ifinfo'. (*Note
-Info Summary and Permissions::.)
-
- The `@iftex' and `@end iftex' commands are similar to the `@ifinfo'
-and `@end ifinfo' commands, except that they specify text that will
-appear in the printed manual but not in the Info file.
-
- For example,
-
- @iftex
- This text will appear only in the printed manual.
- @end iftex
-
- @ifinfo
- However, this text will appear only in Info.
- @end ifinfo
-
-The preceding example produces the following line:
-
- However, this text will appear only in Info.
-
-Note how you only see one of the two lines, depending on whether you
-are reading the Info version or the printed version of this manual.
-
- The `@titlepage' command is a special variant of `@iftex' that is
-used for making the title and copyright pages of the printed manual.
-(*Note `@titlepage': titlepage.)
-
-
-File: texi.info, Node: Using Ordinary TeX Commands, Next: set clear value, Prev: Conditional Commands, Up: Conditionals
-
-Using Ordinary TeX Commands
-===========================
-
- Inside a region delineated by `@iftex' and `@end iftex', you can
-embed some PlainTeX commands. Info will ignore these commands since
-they are only in that part of the file which is seen by TeX. You can
-write the TeX commands as you would write them in a normal TeX file,
-except that you must replace the `\' used by TeX with an `@'. For
-example, in the `@titlepage' section of a Texinfo file, you can use the
-TeX command `@vskip' to format the copyright page. (The `@titlepage'
-command causes Info to ignore the region automatically, as it does with
-the `@iftex' command.)
-
- However, many features of PlainTeX will not work, as they are
-overridden by features of Texinfo.
-
- You can enter PlainTeX completely, and use `\' in the TeX commands,
-by delineating a region with the `@tex' and `@end tex' commands. (The
-`@tex' command also causes Info to ignore the region, like the `@iftex'
-command.)
-
- For example, here is a mathematical expression written in PlainTeX:
-
- @tex
- $$ \chi^2 = \sum_{i=1}^N
- \left (y_i - (a + b x_i)
- \over \sigma_i\right)^2 $$
- @end tex
-
-The output of this example will appear only in a printed manual. If
-you are reading this in Info, you will not see anything after this
-paragraph.
-
-
-File: texi.info, Node: set clear value, Prev: Using Ordinary TeX Commands, Up: Conditionals
-
-`@set', `@clear', and `@value'
-==============================
-
- You can direct the Texinfo formatting commands to format or ignore
-parts of a Texinfo file with the `@set', `@clear', `@ifset', and
-`@ifclear' commands.
-
- In addition, you can use the `@set FLAG' command to set the value of
-FLAG to a string of characters; and use `@value{FLAG}' to insert that
-string. You can use `@set', for example, to set a date and use
-`@value' to insert the date in several places in the Texinfo file.
-
-* Menu:
-
-* ifset ifclear:: Format a region if a flag is set.
-* value:: Replace a flag with a string.
-* value Example:: An easy way to update edition information.
-
-
-File: texi.info, Node: ifset ifclear, Next: value, Up: set clear value
-
-`@ifset' and `@ifclear'
------------------------
-
- When a FLAG is set, the Texinfo formatting commands format text
-between subsequent pairs of `@ifset FLAG' and `@end ifset' commands.
-When the FLAG is cleared, the Texinfo formatting commands do *not*
-format the text.
-
- Use the `@set FLAG' command to turn on, or "set", a FLAG; a "flag"
-can be any single word. The format for the command looks like this:
-
- @set FLAG
-
- Write the conditionally formatted text between `@ifset FLAG' and
-`@end ifset' commands, like this:
-
- @ifset FLAG
- CONDITIONAL-TEXT
- @end ifset
-
- For example, you can create one document that has two variants, such
-as a manual for a `large' and `small' model:
-
- You can use this machine to dig up shrubs
- without hurting them.
-
- @set large
-
- @ifset large
- It can also dig up fully grown trees.
- @end ifset
-
- Remember to replant promptly ...
-
-In the example, the formatting commands will format the text between
-`@ifset large' and `@end ifset' because the `large' flag is set.
-
- Use the `@clear FLAG' command to turn off, or "clear", a flag.
-Clearing a flag is the opposite of setting a flag. The command looks
-like this:
-
- @clear FLAG
-
-Write the command on a line of its own.
-
- When FLAG is cleared, the Texinfo formatting commands do *not*
-format the text between `@ifset FLAG' and `@end ifset'; that text is
-ignored and does not appear in either printed or Info output.
-
- For example, if you clear the flag of the preceding example by
-writing an `@clear large' command after the `@set large' command (but
-before the conditional text), then the Texinfo formatting commands
-ignore the text between the `@ifset large' and `@end ifset' commands.
-In the formatted output, that text does not appear; in both printed and
-Info output, you see only the lines that say, "You can use this machine
-to dig up shrubs without hurting them. Remember to replant promptly
-...".
-
- If a flag is cleared with an `@clear FLAG' command, then the
-formatting commands format text between subsequent pairs of `@ifclear'
-and `@end ifclear' commands. But if the flag is set with `@set FLAG',
-then the formatting commands do *not* format text between an `@ifclear'
-and an `@end ifclear' command; rather, they ignore that text. An
-`@ifclear' command looks like this:
-
- @ifclear FLAG
-
- In brief, the commands are:
-
-`@set FLAG'
- Tell the Texinfo formatting commands that FLAG is set.
-
-`@clear FLAG'
- Tell the Texinfo formatting commands that FLAG is cleared.
-
-`@ifset FLAG'
- If FLAG is set, tell the Texinfo formatting commands to format the
- text up to the following `@end ifset' command.
-
- If FLAG is cleared, tell the Texinfo formatting commands to ignore
- text up to the following `@end ifset' command.
-
-`@ifclear FLAG'
- If FLAG is set, tell the Texinfo formatting commands to ignore the
- text up to the following `@end ifclear' command.
-
- If FLAG is cleared, tell the Texinfo formatting commands to format
- the text up to the following `@end ifclear' command.
-
-
-File: texi.info, Node: value, Next: value Example, Prev: ifset ifclear, Up: set clear value
-
-`@value'
---------
-
- You can use the `@set' command to specify a value for a flag, which
-is expanded by the `@value' command. The value is a string a
-characters.
-
- Write the `@set' command like this:
-
- @set foo This is a string.
-
-This sets the value of `foo' to "This is a string."
-
- The Texinfo formatters replace an `@value{FLAG}' command with the
-string to which FLAG is set.
-
- Thus, when `foo' is set as shown above, the Texinfo formatters
-convert
-
- @value{foo}
-to
- This is a string.
-
- You can write an `@value' command within a paragraph; but you must
-write an `@set' command on a line of its own.
-
- If you write the `@set' command like this:
-
- @set foo
-
-without specifying a string, the value of `foo' is an empty string.
-
- If you clear a previously set flag with an `@clear FLAG' command, a
-subsequent `@value{flag}' command is invalid and the string is replaced
-with an error message that says `{No value for "FLAG"}'.
-
- For example, if you set `foo' as follows:
-
- @set how-much very, very, very
-
-then the formatters transform
-
- It is a @value{how-much} wet day.
-into
- It is a very, very, very wet day.
-
- If you write
-
- @clear how-much
-
-then the formatters transform
-
- It is a @value{how-much} wet day.
-into
- It is a {No value for "how-much"} wet day.
-
-
-File: texi.info, Node: value Example, Prev: value, Up: set clear value
-
-`@value' Example
-----------------
-
- You can use the `@value' command to limit the number of places you
-need to change when you record an update to a manual. Here is how it
-is done in `The GNU Make Manual':
-
-Set the flags:
-
- @set EDITION 0.35 Beta
- @set VERSION 3.63 Beta
- @set UPDATED 14 August 1992
- @set UPDATE-MONTH August 1992
-
-Write text for the first `@ifinfo' section, for people reading the
-Texinfo file:
-
- This is Edition @value{EDITION},
- last updated @value{UPDATED},
- of @cite{The GNU Make Manual},
- for @code{make}, Version @value{VERSION}.
-
-Write text for the title page, for people reading the printed manual:
-
- @title GNU Make
- @subtitle A Program for Directing Recompilation
- @subtitle Edition @value{EDITION}, ...
- @subtitle @value{UPDATE-MONTH}
-
-(On a printed cover, a date listing the month and the year looks less
-fussy than a date listing the day as well as the month and year.)
-
-Write text for the Top node, for people reading the Info file:
-
- This is Edition @value{EDITION}
- of the @cite{GNU Make Manual},
- last updated @value{UPDATED}
- for @code{make} Version @value{VERSION}.
-
- After you format the manual, the text in the first `@ifinfo' section
-looks like this:
-
- This is Edition 0.35 Beta, last updated 14 August 1992,
- of `The GNU Make Manual', for `make', Version 3.63 Beta.
-
- When you update the manual, change only the values of the flags; you
-do not need to rewrite the three sections.
-
-
-File: texi.info, Node: Format/Print Hardcopy, Next: Create an Info File, Prev: Conditionals, Up: Top
-
-Format and Print Hardcopy
-*************************
-
- There are three major shell commands for making a printed manual
-from a Texinfo file: one for converting the Texinfo file into a file
-that will be printed, a second for sorting indices, and a third for
-printing the formatted document. When you use the shell commands, you
-can either work directly in the operating system shell or work within a
-shell inside GNU Emacs.
-
- If you are using GNU Emacs, you can use commands provided by Texinfo
-mode instead of shell commands. In addition to the three commands to
-format a file, sort the indices, and print the result, Texinfo mode
-offers key bindings for commands to recenter the output buffer, show the
-print queue, and delete a job from the print queue.
-
-* Menu:
-
-* Use TeX:: Use TeX to format for hardcopy.
-* Shell Format & Print:: How to format and print a hardcopy manual
- with shell commands.
-* Within Emacs:: How to format and print from an Emacs shell.
-* Texinfo Mode Printing:: How to format and print in Texinfo mode.
-* Compile-Command:: How to print using Emacs's compile command.
-* Requirements Summary:: TeX formatting requirements summary.
-* Preparing for TeX:: What you need to do to use TeX.
-* Overfull hboxes:: What are and what to do with overfull hboxes.
-* smallbook:: How to print small format books and manuals.
-* A4 Paper:: How to print on European A4 paper.
-* Cropmarks and Magnification:: How to print marks to indicate the size
- of pages and how to print scaled up output.
-
-
-File: texi.info, Node: Use TeX, Next: Shell Format & Print, Up: Format/Print Hardcopy
-
-Use TeX
-=======
-
- The typesetting program called TeX is used for formatting a Texinfo
-file. TeX is a very powerful typesetting program and, if used right,
-does an exceptionally good job. *Note How to Obtain TeX: Obtaining
-TeX, for information on how to obtain TeX.
-
- The `makeinfo', `texinfo-format-region', and `texinfo-format-buffer'
-commands read the very same @-commands in the Texinfo file as does TeX,
-but process them differently to make an Info file; see *Note Create an
-Info File::.
-
-
-File: texi.info, Node: Shell Format & Print, Next: Within Emacs, Prev: Use TeX, Up: Format/Print Hardcopy
-
-Format and Print Using Shell Commands
-=====================================
-
- Format the Texinfo file with the shell command `tex' followed by the
-name of the Texinfo file. This produces a formatted DVI file as well
-as several auxiliary files containing indices, cross references, etc.
-The DVI file (for "DeVice Independent" file) can be printed on a wide
-variety of printers.
-
- The `tex' formatting command itself does not sort the indices; it
-writes an output file of unsorted index data. This is a misfeature of
-TeX. Hence, to generate a printed index, you first need a sorted index
-to work from. The `texindex' command sorts indices. (The source file
-`texindex.c' comes as part of the standard GNU distribution and is
-usually installed when Emacs is installed.)
-
- The `tex' formatting command outputs unsorted index files under
-names that obey a standard convention. These names are the name of
-your main input file to the `tex' formatting command, with everything
-after the first period thrown away, and the two letter names of indices
-added at the end. For example, the raw index output files for the
-input file `foo.texinfo' would be `foo.cp', `foo.vr', `foo.fn',
-`foo.tp', `foo.pg' and `foo.ky'. Those are exactly the arguments to
-give to `texindex'.
-
- Or else, you can use `??' as "wild-cards" and give the command in
-this form:
-
- texindex foo.??
-
-This command will run `texindex' on all the unsorted index files,
-including any that you have defined yourself using `@defindex' or
-`@defcodeindex'. (You may execute `texindex foo.??' even if there are
-similarly named files with two letter extensions that are not index
-files, such as `foo.el'. The `texindex' command reports but otherwise
-ignores such files.)
-
- For each file specified, `texindex' generates a sorted index file
-whose name is made by appending `s' to the input file name. The
-`@printindex' command knows to look for a file of that name.
-`texindex' does not alter the raw index output file.
-
- After you have sorted the indices, you need to rerun the `tex'
-formatting command on the Texinfo file. This regenerates a formatted
-DVI file with up-to-date index entries.(1)
-
- To summarize, this is a three step process:
-
- 1. Run the `tex' formatting command on the Texinfo file. This
- generates the formatted DVI file as well as the raw index files
- with two letter extensions.
-
- 2. Run the shell command `texindex' on the raw index files to sort
- them. This creates the corresponding sorted index files.
-
- 3. Rerun the `tex' formatting command on the Texinfo file. This
- regenerates a formatted DVI file with the index entries in the
- correct order. This second run also corrects the page numbers for
- the cross references. (The tables of contents are always correct.)
-
- You need not run `texindex' each time after you run the `tex'
-formatting. If you do not, on the next run, the `tex' formatting
-command will use whatever sorted index files happen to exist from the
-previous use of `texindex'. This is usually OK while you are debugging.
-
- Rather than type the `tex' and `texindex' commands yourself, you can
-use `texi2dvi'. This shell script is designed to simplify the
-`tex'--`texindex'--`tex' sequence by figuring out whether index files
-and DVI files are up-to-date. It runs `texindex' and `tex' only when
-necessary.
-
- The syntax for `texi2dvi' is like this (where `%' is the shell
-prompt):
-
- % texi2dvi FILENAME...
-
- Finally, you can print the DVI file with the DVI print command. The
-precise command to use depends on the system; `lpr -d' is common. The
-DVI print command may require a file name without any extension or with
-a `.dvi' extension.
-
- The following commands, for example, sort the indices, format, and
-print the `Bison Manual' (where `%' is the shell prompt):
-
- % tex bison.texinfo
- % texindex bison.??
- % tex bison.texinfo
- % lpr -d bison.dvi
-
-(Remember that the shell commands may be different at your site; but
-these are commonly used versions.)
-
- ---------- Footnotes ----------
-
- (1) If you use more than one index and have cross references to an
-index other than the first, you must run `tex' *three times* to get
-correct output: once to generate raw index data; again (after
-`texindex') to output the text of the indices and determine their true
-page numbers; and a third time to output correct page numbers in cross
-references to them. However, cross references to indices are rare.
-
-
-File: texi.info, Node: Within Emacs, Next: Texinfo Mode Printing, Prev: Shell Format & Print, Up: Format/Print Hardcopy
-
-From an Emacs Shell ...
-=======================
-
- You can give formatting and printing commands from a shell within GNU
-Emacs. To create a shell within Emacs, type `M-x shell'. In this
-shell, you can format and print the document. *Note How to Format and
-Print Using Shell Commands: Shell Format & Print, for details.
-
- You can switch to and from the shell buffer while `tex' is running
-and do other editing. If you are formatting a long document on a slow
-machine, this can be very convenient.
-
- You can also use `texi2dvi' from an Emacs shell. For example, here
-is how to use `texi2dvi' to format and print `Using and Porting GNU CC'
-from a shell within Emacs (where `%' is the shell prompt):
-
- % texi2dvi gcc.texinfo
- % lpr -d gcc.dvi
-
- *Note Texinfo Mode Printing::, for more information about formatting
-and printing in Texinfo mode.
-
-
-File: texi.info, Node: Texinfo Mode Printing, Next: Compile-Command, Prev: Within Emacs, Up: Format/Print Hardcopy
-
-Formatting and Printing in Texinfo Mode
-=======================================
-
- Texinfo mode provides several predefined key commands for TeX
-formatting and printing. These include commands for sorting indices,
-looking at the printer queue, killing the formatting job, and
-recentering the display of the buffer in which the operations occur.
-
-`C-c C-t C-r'
-`M-x texinfo-tex-region'
- Run TeX on the current region.
-
-`C-c C-t C-b'
-`M-x texinfo-tex-buffer'
- Run TeX on the current buffer.
-
-`C-c C-t C-i'
-`M-x texinfo-texindex'
- Sort the indices of a Texinfo file that have been formatted with
- `texinfo-tex-region' or `texinfo-tex-buffer'.
-
-`C-c C-t C-p'
-`M-x texinfo-tex-print'
- Print a DVI file that was made with `texinfo-tex-region' or
- `texinfo-tex-buffer'.
-
-`C-c C-t C-q'
-`M-x texinfo-show-tex-print-queue'
- Show the print queue.
-
-`C-c C-t C-d'
-`M-x texinfo-delete-from-tex-print-queue'
- Delete a job from the print queue; you will be prompted for the job
- number shown by a preceding `C-c C-t C-q' command
- (`texinfo-show-tex-print-queue').
-
-`C-c C-t C-k'
-`M-x texinfo-kill-tex-job'
- Kill either the currently running TeX job that has been started by
- `texinfo-tex-region' or `texinfo-tex-buffer', or any other process
- running in the Texinfo shell buffer.
-
-`C-c C-t C-x'
-`M-x texinfo-quit-tex-job'
- Quit a TeX formatting job that has stopped because of an error by
- sending an x to it. When you do this, TeX preserves a record of
- what it did in a `.log' file.
-
-`C-c C-t C-l'
-`M-x texinfo-recenter-tex-output-buffer'
- Redisplay the shell buffer in which the TeX printing and formatting
- commands are run to show its most recent output.
-
- Thus, the usual sequence of commands for formatting a buffer is as
-follows (with comments to the right):
-
- C-c C-t C-b Run TeX on the buffer.
- C-c C-t C-i Sort the indices.
- C-c C-t C-b Rerun TeX to regenerate indices.
- C-c C-t C-p Print the DVI file.
- C-c C-t C-q Display the printer queue.
-
- The Texinfo mode TeX formatting commands start a subshell in Emacs
-called the `*texinfo-tex-shell*'. The `texinfo-tex-command',
-`texinfo-texindex-command', and `tex-dvi-print-command' commands are
-all run in this shell.
-
- You can watch the commands operate in the `*texinfo-tex-shell*'
-buffer, and you can switch to and from and use the
-`*texinfo-tex-shell*' buffer as you would any other shell buffer.
-
- The formatting and print commands depend on the values of several
-variables. The default values are:
-
- Variable Default value
-
- texinfo-tex-command "tex"
- texinfo-texindex-command "texindex"
- texinfo-tex-shell-cd-command "cd"
- texinfo-tex-dvi-print-command "lpr -d"
- texinfo-show-tex-queue-command "lpq"
- texinfo-delete-from-print-queue-command "lprm"
- texinfo-start-of-header "%**start"
- texinfo-end-of-header "%**end"
- texinfo-tex-trailer "@bye"
-
- The default values of both the `texinfo-tex-command' and the
-`texinfo-texindex-command' variables are set in the `texnfo-tex.el'
-file.
-
- You can change the values of these variables with the `M-x
-edit-options' command (*note Editing Variable Values: (emacs)Edit
-Options.), with the `M-x set-variable' command (*note Examining and
-Setting Variables: (emacs)Examining.), or with your `.emacs'
-initialization file (*note Init File: (emacs)Init File.).
-
-
-File: texi.info, Node: Compile-Command, Next: Requirements Summary, Prev: Texinfo Mode Printing, Up: Format/Print Hardcopy
-
-Using the Local Variables List
-==============================
-
- Yet another way to apply the TeX formatting command to a Texinfo
-file is to put that command in a "local variables list" at the end of
-the Texinfo file. You can then specify the TeX formatting command as a
-`compile-command' and have Emacs run the TeX formatting command by
-typing `M-x compile'. This creates a special shell called the
-`*compilation buffer*' in which Emacs runs the compile command. For
-example, at the end of the `gdb.texinfo' file, after the `@bye', you
-would put the following:
-
- @c Local Variables:
- @c compile-command: "tex gdb.texinfo"
- @c End:
-
-This technique is most often used by programmers who also compile
-programs this way; see *Note Compilation: (emacs)Compilation.
-
-
-File: texi.info, Node: Requirements Summary, Next: Preparing for TeX, Prev: Compile-Command, Up: Format/Print Hardcopy
-
-TeX Formatting Requirements Summary
-===================================
-
- Every Texinfo file that is to be input to TeX must begin with a
-`\input' command and contain an `@settitle' command:
-
- \input texinfo
- @settitle NAME-OF-MANUAL
-
-The first command instructs TeX to load the macros it needs to process
-a Texinfo file and the second command specifies the title of printed
-manual.
-
- Every Texinfo file must end with a line that terminates TeX
-processing and forces out unfinished pages:
-
- @bye
-
- Strictly speaking, these three lines are all a Texinfo file needs for
-TeX, besides the body. (The `@setfilename' line is the only line that
-a Texinfo file needs for Info formatting.)
-
- Usually, the file's first line contains an `@c -*-texinfo-*-'
-comment that causes Emacs to switch to Texinfo mode when you edit the
-file. In addition, the beginning usually includes an `@setfilename'
-for Info formatting, an `@setchapternewpage' command, a title page, a
-copyright page, and permissions. Besides an `@bye', the end of a file
-usually includes indices and a table of contents.
-
-For more information, see
-*Note `@setchapternewpage': setchapternewpage,
-*Note Page Headings: Headings,
-*Note Titlepage & Copyright Page::,
-*Note Printing Indices & Menus::, and
-*Note Contents::.
-
-
-File: texi.info, Node: Preparing for TeX, Next: Overfull hboxes, Prev: Requirements Summary, Up: Format/Print Hardcopy
-
-Preparing to Use TeX
-====================
-
-TeX needs to know where to find the `texinfo.tex' file that you have
-told it to input with the `\input texinfo' command at the beginning of
-the first line. The `texinfo.tex' file tells TeX how to handle
-@-commands. (`texinfo.tex' is included in the standard GNU
-distributions.)
-
- Usually, the `texinfo.tex' file is put in the default directory that
-contains TeX macros (the `/usr/lib/tex/macros' directory) when GNU
-Emacs or other GNU software is installed. In this case, TeX will find
-the file and you do not need to do anything special. Alternatively,
-you can put `texinfo.tex' in the directory in which the Texinfo source
-file is located, and TeX will find it there.
-
- However, you may want to specify the location of the `\input' file
-yourself. One way to do this is to write the complete path for the file
-after the `\input' command. Another way is to set the `TEXINPUTS'
-environment variable in your `.cshrc' or `.profile' file. The
-`TEXINPUTS' environment variable will tell TeX where to find the
-`texinfo.tex' file and any other file that you might want TeX to use.
-
- Whether you use a `.cshrc' or `.profile' file depends on whether you
-use `csh', `sh', or `bash' for your shell command interpreter. When
-you use `csh', it looks to the `.cshrc' file for initialization
-information, and when you use `sh' or `bash', it looks to the
-`.profile' file.
-
- In a `.cshrc' file, you could use the following `csh' command
-sequence:
-
- setenv TEXINPUTS .:/usr/me/mylib:/usr/lib/tex/macros
-
- In a `.profile' file, you could use the following `sh' command
-sequence:
-
- TEXINPUTS=.:/usr/me/mylib:/usr/lib/tex/macros
- export TEXINPUTS
-
-This would cause TeX to look for `\input' file first in the current
-directory, indicated by the `.', then in a hypothetical user's
-`me/mylib' directory, and finally in the system library.
-
-
-File: texi.info, Node: Overfull hboxes, Next: smallbook, Prev: Preparing for TeX, Up: Format/Print Hardcopy
-
-Overfull "hboxes"
-=================
-
- TeX is sometimes unable to typeset a line without extending it into
-the right margin. This can occur when TeX comes upon what it
-interprets as a long word that it cannot hyphenate, such as an
-electronic mail network address or a very long title. When this
-happens, TeX prints an error message like this:
-
- Overfull \hbox (20.76302pt too wide)
-
-(In TeX, lines are in "horizontal boxes", hence the term, "hbox". The
-backslash, `\', is the TeX equivalent of `@'.)
-
- TeX also provides the line number in the Texinfo source file and the
-text of the offending line, which is marked at all the places that TeX
-knows how to hyphenate words. *Note Catching Errors with TeX
-Formatting: Debugging with TeX, for more information about typesetting
-errors.
-
- If the Texinfo file has an overfull hbox, you can rewrite the
-sentence so the overfull hbox does not occur, or you can decide to
-leave it. A small excursion into the right margin often does not
-matter and may not even be noticeable.
-
- However, unless told otherwise, TeX will print a large, ugly, black
-rectangle beside the line that contains the overful hbox. This is so
-you will notice the location of the problem if you are correcting a
-draft.
-
- To prevent such a monstrosity from marring your final printout, write
-the following in the beginning of the Texinfo file on a line of its own,
-before the `@titlepage' command:
-
- @finalout
-
-
-File: texi.info, Node: smallbook, Next: A4 Paper, Prev: Overfull hboxes, Up: Format/Print Hardcopy
-
-Printing "Small" Books
-======================
-
- By default, TeX typesets pages for printing in an 8.5 by 11 inch
-format. However, you can direct TeX to typeset a document in a 7 by
-9.25 inch format that is suitable for bound books by inserting the
-following command on a line by itself at the beginning of the Texinfo
-file, before the title page:
-
- @smallbook
-
-(Since regular sized books are often about 7 by 9.25 inches, this
-command might better have been called the `@regularbooksize' command,
-but it came to be called the `@smallbook' command by comparison to the
-8.5 by 11 inch format.)
-
- If you write the `@smallbook' command between the start-of-header
-and end-of-header lines, the Texinfo mode TeX region formatting
-command, `texinfo-tex-region', will format the region in "small" book
-size (*note Start of Header::.).
-
- The Free Software Foundation distributes printed copies of `The GNU
-Emacs Manual' and other manuals in the "small" book size. *Note
-`@smallexample' and `@smalllisp': smallexample & smalllisp, for
-information about commands that make it easier to produce examples for
-a smaller manual.
-
-
-File: texi.info, Node: A4 Paper, Next: Cropmarks and Magnification, Prev: smallbook, Up: Format/Print Hardcopy
-
-Printing on A4 Paper
-====================
-
- You can tell TeX to typeset a document for printing on European size
-A4 paper with the `@afourpaper' command. Write the command on a line
-by itself between `@iftex' and `@end iftex' lines near the beginning of
-the Texinfo file, before the title page:
-
- For example, this is how you would write the header for this manual:
-
- \input texinfo @c -*-texinfo-*-
- @c %**start of header
- @setfilename texinfo
- @settitle Texinfo
- @syncodeindex vr fn
- @iftex
- @afourpaper
- @end iftex
- @c %**end of header
-
-
-File: texi.info, Node: Cropmarks and Magnification, Prev: A4 Paper, Up: Format/Print Hardcopy
-
-Cropmarks and Magnification
-===========================
-
- You can attempt to direct TeX to print cropmarks at the corners of
-pages with the `@cropmarks' command. Write the `@cropmarks' command on
-a line by itself between `@iftex' and `@end iftex' lines near the
-beginning of the Texinfo file, before the title page, like this:
-
- @iftex
- @cropmarks
- @end iftex
-
- This command is mainly for printers that typeset several pages on one
-sheet of film; but you can attempt to use it to mark the corners of a
-book set to 7 by 9.25 inches with the `@smallbook' command. (Printers
-will not produce cropmarks for regular sized output that is printed on
-regular sized paper.) Since different printing machines work in
-different ways, you should explore the use of this command with a
-spirit of adventure. You may have to redefine the command in the
-`texinfo.tex' definitions file.
-
- You can attempt to direct TeX to typeset pages larger or smaller than
-usual with the `\mag' TeX command. Everything that is typeset is
-scaled proportionally larger or smaller. (`\mag' stands for
-"magnification".) This is *not* a Texinfo @-command, but is a PlainTeX
-command that is prefixed with a backslash. You have to write this
-command between `@tex' and `@end tex' (*note Using Ordinary TeX
-Commands: Using Ordinary TeX Commands.).
-
- Follow the `\mag' command with an `=' and then a number that is 1000
-times the magnification you desire. For example, to print pages at 1.2
-normal size, write the following near the beginning of the Texinfo
-file, before the title page:
-
- @tex
- \mag=1200
- @end tex
-
- With some printing technologies, you can print normal-sized copies
-that look better than usual by using a larger-than-normal master.
-
- Depending on your system, `\mag' may not work or may work only at
-certain magnifications. Be prepared to experiment.
-
-
-File: texi.info, Node: Create an Info File, Next: Install an Info File, Prev: Format/Print Hardcopy, Up: Top
-
-Creating an Info File
-*********************
-
- `makeinfo' is a utility that converts a Texinfo file into an Info
-file; `texinfo-format-region' and `texinfo-format-buffer' are GNU Emacs
-functions that do the same.
-
- A Texinfo file must possess an `@setfilename' line near its
-beginning, otherwise the Info formatting commands will fail.
-
- For information on installing the Info file in the Info system, see
-*Note Install an Info File::.
-
-* Menu:
-
-* makeinfo advantages:: `makeinfo' provides better error checking.
-* Invoking makeinfo:: How to run `makeinfo' from a shell.
-* makeinfo options:: Specify fill-column and other options.
-* Pointer Validation:: How to check that pointers point somewhere.
-* makeinfo in Emacs:: How to run `makeinfo' from Emacs.
-* texinfo-format commands:: Two Info formatting commands written
- in Emacs Lisp are an alternative
- to `makeinfo'.
-* Batch Formatting:: How to format for Info in Emacs Batch mode.
-* Tag and Split Files:: How tagged and split files help Info
- to run better.
-
-
-File: texi.info, Node: makeinfo advantages, Next: Invoking makeinfo, Up: Create an Info File
-
-`makeinfo' Preferred
-====================
-
- The `makeinfo' utility creates an Info file from a Texinfo source
-file more quickly than either of the Emacs formatting commands and
-provides better error messages. We recommend it. `makeinfo' is a C
-program that is independent of Emacs. You do not need to run Emacs to
-use `makeinfo', which means you can use `makeinfo' on machines that are
-too small to run Emacs. You can run `makeinfo' in any one of three
-ways: from an operating system shell, from a shell inside Emacs, or by
-typing a key command in Texinfo mode in Emacs.
-
- The `texinfo-format-region' and the `texinfo-format-buffer' commands
-are useful if you cannot run `makeinfo'. Also, in some circumstances,
-they format short regions or buffers more quickly than `makeinfo'.
-
-
-File: texi.info, Node: Invoking makeinfo, Next: makeinfo options, Prev: makeinfo advantages, Up: Create an Info File
-
-Invoking `makeinfo' from a Shell
-================================
-
- To create an Info file from a Texinfo file, type `makeinfo' followed
-by the name of the Texinfo file. Thus, to create the Info file for
-Bison, type the following at the shell prompt (where `%' is the prompt):
-
- % makeinfo bison.texinfo
-
- (You can run a shell inside Emacs by typing `M-x shell'.)
-
- Sometimes you will want to specify options. For example, if you wish
-to discover which version of `makeinfo' you are using, type:
-
- % makeinfo --version
-
- *Note makeinfo options::, for more information.
-
-
-File: texi.info, Node: makeinfo options, Next: Pointer Validation, Prev: Invoking makeinfo, Up: Create an Info File
-
-Options for `makeinfo'
-======================
-
- The `makeinfo' command takes a number of options. Most often,
-options are used to set the value of the fill column and specify the
-footnote style. Each command line option is a word preceded by `--'(1)
-or a letter preceded by `-'. You can use abbreviations for the option
-names as long as they are unique.
-
- For example, you could use the following command to create an Info
-file for `bison.texinfo' in which each line is filled to only 68
-columns (where `%' is the prompt):
-
- % makeinfo --fill-column=68 bison.texinfo
-
- You can write two or more options in sequence, like this:
-
- % makeinfo --no-split --fill-column=70 ...
-
-This would keep the Info file together as one possibly very long file
-and would also set the fill column to 70.
-
- The options are:
-
-`-D VAR'
- Cause VAR to be defined. This is equivalent to `@set VAR' in the
- Texinfo file.
-
-`--error-limit LIMIT'
- Set the maximum number of errors that `makeinfo' will report
- before exiting (on the assumption that continuing would be
- useless). The default number of errors that can be reported before
- `makeinfo' gives up is 100.
-
-`--fill-column WIDTH'
- Specify the maximum number of columns in a line; this is the
- right-hand edge of a line. Paragraphs that are filled will be
- filled to this width. (Filling is the process of breaking up and
- connecting lines so that lines are the same length as or shorter
- than the number specified as the fill column. Lines are broken
- between words.) The default value for `fill-column' is 72.
-
-`--footnote-style STYLE'
- Set the footnote style to STYLE, either `end' for the end node
- style or `separate' for the separate node style. The value set by
- this option overrides the value set in a Texinfo file by an
- `@footnotestyle' command. When the footnote style is `separate',
- `makeinfo' makes a new node containing the footnotes found in the
- current node. When the footnote style is `end', `makeinfo' places
- the footnote references at the end of the current node.
-
-`-I DIR'
- Add `dir' to the directory search list for finding files that are
- included using the `@include' command. By default, `makeinfo'
- searches only the current directory.
-
-`--no-headers'
- Do not include menus or node lines in the output. This results in
- an ASCII file that you cannot read in Info since it does not
- contain the requisite nodes or menus; but you can print such a
- file in a single, typewriter-like font and produce acceptable
- output.
-
-`--no-split'
- Suppress the splitting stage of `makeinfo'. Normally, large
- output files (where the size is greater than 70k bytes) are split
- into smaller subfiles, each one approximately 50k bytes. If you
- specify `--no-split', `makeinfo' will not split up the output file.
-
-`--no-pointer-validate'
-`--no-validate'
- Suppress the pointer-validation phase of `makeinfo'. Normally,
- after a Texinfo file is processed, some consistency checks are
- made to ensure that cross references can be resolved, etc. *Note
- Pointer Validation::.
-
-`--no-warn'
- Suppress the output of warning messages. This does *not* suppress
- the output of error messages, only warnings. You might want this
- if the file you are creating has examples of Texinfo cross
- references within it, and the nodes that are referenced do not
- actually exist.
-
-`--no-number-footnotes'
- Supress automatic footnote numbering. By default, `makeinfo'
- numbers each footnote sequentially in a single node, resetting the
- current footnote number to 1 at the start of each node.
-
-`--output FILE'
-`-o FILE'
- Specify that the output should be directed to FILE and not to the
- file name specified in the `@setfilename' command found in the
- Texinfo source. FILE can be the special token `-', which specifies
- standard output.
-
-`--paragraph-indent INDENT'
- Set the paragraph indentation style to INDENT. The value set by
- this option overrides the value set in a Texinfo file by an
- `@paragraphindent' command. The value of INDENT is interpreted as
- follows:
-
- * If the value of INDENT is `asis', do not change the existing
- indentation at the starts of paragraphs.
-
- * If the value of INDENT is zero, delete any existing
- indentation.
-
- * If the value of INDENT is greater than zero, indent each
- paragraph by that number of spaces.
-
-`--reference-limit LIMIT'
- Set the value of the number of references to a node that
- `makeinfo' will make without reporting a warning. If a node has
- more than this number of references in it, `makeinfo' will make the
- references but also report a warning.
-
-`-U VAR'
- Cause VAR to be undefined. This is equivalent to `@clear VAR' in
- the Texinfo file.
-
-`--verbose'
- Cause `makeinfo' to display messages saying what it is doing.
- Normally, `makeinfo' only outputs messages if there are errors or
- warnings.
-
-`--version'
- Report the version number of this copy of `makeinfo'.
-
- ---------- Footnotes ----------
-
- (1) `--' has replaced `+', the old introductory character, to
-maintain POSIX.2 compatibility without losing long-named options.
-
-
-File: texi.info, Node: Pointer Validation, Next: makeinfo in Emacs, Prev: makeinfo options, Up: Create an Info File
-
-Pointer Validation
-==================
-
- `makeinfo' will check the validity of the final Info file unless you
-suppress pointer-validation by using the `--no-pointer-validation'
-option. Mostly, this means ensuring that nodes you have referenced
-really exist. Here is a complete list of what is checked:
-
- 1. If a `Next', `Previous', or `Up' node reference is a reference to a
- node in the current file and is not an external reference such as
- to `(dir)', then the referenced node must exist.
-
- 2. In every node, if the `Previous' node is different from the `Up'
- node, then the `Previous' node must also be pointed to by a `Next'
- node.
-
- 3. Every node except the `Top' node must have an `Up' pointer.
-
- 4. The node referenced by an `Up' pointer must contain a reference to
- the current node in some manner other than through a `Next'
- reference. This includes menu entries and cross references.
-
- 5. If the `Next' reference of a node is not the same as the `Next'
- reference of the `Up' reference, then the node referenced by the
- `Next' pointer must have a `Previous' pointer that points back to
- the current node. This rule allows the last node in a section to
- point to the first node of the next chapter.
-
-
-File: texi.info, Node: makeinfo in Emacs, Next: texinfo-format commands, Prev: Pointer Validation, Up: Create an Info File
-
-Running `makeinfo' inside Emacs
-===============================
-
- You can run `makeinfo' in GNU Emacs Texinfo mode by using either the
-`makeinfo-region' or the `makeinfo-buffer' commands. In Texinfo mode,
-the commands are bound to `C-c C-m C-r' and `C-c C-m C-b' by default.
-
-`C-c C-m C-r'
-`M-x makeinfo-region'
- Format the current region for Info.
-
-`C-c C-m C-b'
-`M-x makeinfo-buffer'
- Format the current buffer for Info.
-
- When you invoke either `makeinfo-region' or `makeinfo-buffer', Emacs
-prompts for a file name, offering the name of the visited file as the
-default. You can edit the default file name in the minibuffer if you
-wish, before typing RET to start the `makeinfo' process.
-
- The Emacs `makeinfo-region' and `makeinfo-buffer' commands run the
-`makeinfo' program in a temporary shell buffer. If `makeinfo' finds
-any errors, Emacs displays the error messages in the temporary buffer.
-
- You can parse the error messages by typing `C-x `' (`next-error').
-This causes Emacs to go to and position the cursor on the line in the
-Texinfo source that `makeinfo' thinks caused the error. *Note Running
-`make' or Compilers Generally: (emacs)Compilation, for more information
-about using the `next-error' command.
-
- In addition, you can kill the shell in which the `makeinfo' command
-is running or make the shell buffer display its most recent output.
-
-`C-c C-m C-k'
-`M-x makeinfo-kill-job'
- Kill the currently running job created by `makeinfo-region' or
- `makeinfo-buffer'.
-
-`C-c C-m C-l'
-`M-x makeinfo-recenter-output-buffer'
- Redisplay the `makeinfo' shell buffer to display its most recent
- output.
-
-(Note that the parallel commands for killing and recentering a TeX job
-are `C-c C-t C-k' and `C-c C-t C-l'. *Note Texinfo Mode Printing::.)
-
- You can specify options for `makeinfo' by setting the
-`makeinfo-options' variable with either the `M-x edit-options' or the
-`M-x set-variable' command, or by setting the variable in your `.emacs'
-initialization file.
-
- For example, you could write the following in your `.emacs' file:
-
- (setq makeinfo-options
- "--paragraph-indent=0 --no-split
- --fill-column=70 --verbose")
-
-For more information, see
-*Note Editing Variable Values: (emacs)Edit Options,
-*Note Examining and Setting Variables: (emacs)Examining,
-*Note Init File: (emacs)Init File, and
-*Note Options for `makeinfo': makeinfo options.
-
-
-File: texi.info, Node: texinfo-format commands, Next: Batch Formatting, Prev: makeinfo in Emacs, Up: Create an Info File
-
-The `texinfo-format...' Commands
-================================
-
-In GNU Emacs in Texinfo mode, you can format part or all of a Texinfo
-file with the `texinfo-format-region' command. This formats the
-current region and displays the formatted text in a temporary buffer
-called `*Info Region*'.
-
- Similarly, you can format a buffer with the `texinfo-format-buffer'
-command. This command creates a new buffer and generates the Info file
-in it. Typing `C-x C-s' will save the Info file under the name
-specified by the `@setfilename' line which must be near the beginning
-of the Texinfo file.
-
-`C-c C-e C-r'
-``texinfo-format-region''
- Format the current region for Info.
-
-`C-c C-e C-b'
-``texinfo-format-buffer''
- Format the current buffer for Info.
-
- The `texinfo-format-region' and `texinfo-format-buffer' commands
-provide you with some error checking, and other functions can provide
-you with further help in finding formatting errors. These procedures
-are described in an appendix; see *Note Catching Mistakes::. However,
-the `makeinfo' program is often faster and provides better error
-checking (*note makeinfo in Emacs::.).
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-8 b/gnu/usr.bin/texinfo/info-files/texi.info-8
deleted file mode 100644
index ba35e6e..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-8
+++ /dev/null
@@ -1,1056 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Batch Formatting, Next: Tag and Split Files, Prev: texinfo-format commands, Up: Create an Info File
-
-Batch Formatting
-================
-
- You can format Texinfo files for Info using `batch-texinfo-format'
-and Emacs Batch mode. You can run Emacs in Batch mode from any shell,
-including a shell inside of Emacs. (*Note Command Line Switches and
-Arguments: (emacs)Command Switches.)
-
- Here is the command to format all the files that end in `.texinfo'
-in the current directory (where `%' is the shell prompt):
-
- % emacs -batch -funcall batch-texinfo-format *.texinfo
-
-Emacs processes all the files listed on the command line, even if an
-error occurs while attempting to format some of them.
-
- Run `batch-texinfo-format' only with Emacs in Batch mode as shown;
-it is not interactive. It kills the Batch mode Emacs on completion.
-
- `batch-texinfo-format' is convenient if you lack `makeinfo' and want
-to format several Texinfo files at once. When you use Batch mode, you
-create a new Emacs process. This frees your current Emacs, so you can
-continue working in it. (When you run `texinfo-format-region' or
-`texinfo-format-buffer', you cannot use that Emacs for anything else
-until the command finishes.)
-
-
-File: texi.info, Node: Tag and Split Files, Prev: Batch Formatting, Up: Create an Info File
-
-Tag Files and Split Files
-=========================
-
- If a Texinfo file has more than 30,000 bytes,
-`texinfo-format-buffer' automatically creates a tag table for its Info
-file; `makeinfo' always creates a tag table. With a "tag table", Info
-can jump to new nodes more quickly than it can otherwise.
-
- In addition, if the Texinfo file contains more than about 70,000
-bytes, `texinfo-format-buffer' and `makeinfo' split the large Info file
-into shorter "indirect" subfiles of about 50,000 bytes each. Big files
-are split into smaller files so that Emacs does not need to make a
-large buffer to hold the whole of a large Info file; instead, Emacs
-allocates just enough memory for the small, split off file that is
-needed at the time. This way, Emacs avoids wasting memory when you run
-Info. (Before splitting was implemented, Info files were always kept
-short and "include files" were designed as a way to create a single,
-large printed manual out of the smaller Info files. *Note Include
-Files::, for more information. Include files are still used for very
-large documents, such as `The Emacs Lisp Reference Manual', in which
-each chapter is a separate file.)
-
- When a file is split, Info itself makes use of a shortened version of
-the original file that contains just the tag table and references to
-the files that were split off. The split off files are called
-"indirect" files.
-
- The split off files have names that are created by appending `-1',
-`-2', `-3' and so on to the file name specified by the `@setfilename'
-command. The shortened version of the original file continues to have
-the name specified by `@setfilename'.
-
- At one stage in writing this document, for example, the Info file
-was saved as `test-texinfo' and that file looked like this:
-
- Info file: test-texinfo, -*-Text-*-
- produced by texinfo-format-buffer
- from file: new-texinfo-manual.texinfo
-
- ^_
- Indirect:
- test-texinfo-1: 102
- test-texinfo-2: 50422
- test-texinfo-3: 101300
- ^_^L
- Tag table:
- (Indirect)
- Node: overview^?104
- Node: info file^?1271
- Node: printed manual^?4853
- Node: conventions^?6855
- ...
-
-(But `test-texinfo' had far more nodes than are shown here.) Each of
-the split off, indirect files, `test-texinfo-1', `test-texinfo-2', and
-`test-texinfo-3', is listed in this file after the line that says
-`Indirect:'. The tag table is listed after the line that says `Tag
-table:'.
-
- In the list of indirect files, the number following the file name
-records the cumulative number of bytes in the preceding indirect files,
-not counting the file list itself, the tag table, or the permissions
-text in each file. In the tag table, the number following the node name
-records the location of the beginning of the node, in bytes from the
-beginning.
-
- If you are using `texinfo-format-buffer' to create Info files, you
-may want to run the `Info-validate' command. (The `makeinfo' command
-does such a good job on its own, you do not need `Info-validate'.)
-However, you cannot run the `M-x Info-validate' node-checking command
-on indirect files. For information on how to prevent files from being
-split and how to validate the structure of the nodes, see *Note Using
-Info-validate::.
-
-
-File: texi.info, Node: Install an Info File, Next: Command List, Prev: Create an Info File, Up: Top
-
-Installing an Info File
-***********************
-
- Info files are usually kept in the `info' directory. (You can find
-the location of this directory within Emacs by typing `C-h i' to enter
-Info and then typing `C-x C-f' to see the full pathname to the `info'
-directory.)
-
-* Menu:
-
-* Directory file:: The top level menu for all Info files.
-* New Info File:: Listing a new info file.
-* Other Info Directories:: How to specify Info files that are
- located in other directories.
-
-
-File: texi.info, Node: Directory file, Next: New Info File, Up: Install an Info File
-
-The `dir' File
-==============
-
- For Info to work, the `info' directory must contain a file that
-serves as a top level directory for the Info system. By convention,
-this file is called `dir'. The `dir' file is itself an Info file. It
-contains the top level menu for all the Info files in the system. The
-menu looks like this:
-
- * Menu:
-
- * Info: (info). Documentation browsing system.
- * Emacs: (emacs). The extensible, self-documenting
- text editor.
- * Texinfo: (texinfo). With one source file, make
- either a printed manual using
- TeX or an Info file.
- ...
-
- Each of these menu entries points to the `Top' node of the Info file
-that is named in parentheses. (The menu entry does not need to specify
-the `Top' node, since Info goes to the `Top' node if no node name is
-mentioned. *Note Nodes in Other Info Files: Other Info Files.)
-
- Thus, the `Info' entry points to the `Top' node of the `info' file
-and the `Emacs' entry points to the `Top' node of the `emacs' file.
-
- In each of the Info files, the `Up' pointer of the `Top' node refers
-back to the `dir' file. For example, the line for the `Top' node of
-the Emacs manual looks like this in Info:
-
- File: emacs Node: Top, Up: (DIR), Next: Distrib
-
-(Note that in this case, the `dir' file name is written in upper case
-letters--it can be written in either upper or lower case. Info has a
-feature that it will change the case of the file name to lower case if
-it cannot find the name as written.)
-
-
-File: texi.info, Node: New Info File, Next: Other Info Directories, Prev: Directory file, Up: Install an Info File
-
-Listing a New Info File
-=======================
-
- To add a new Info file to your system, write a menu entry for it in
-the menu in the `dir' file in the `info' directory. Also, move the new
-Info file itself to the `info' directory. For example, if you were
-adding documentation for GDB, you would write the following new entry:
-
- * GDB: (gdb). The source-level C debugger.
-
-The first part of the menu entry is the menu entry name, followed by a
-colon. The second part is the name of the Info file, in parentheses,
-followed by a period. The third part is the description.
-
- Conventionally, the name of an Info file has a `.info' extension.
-Thus, you might list the name of the file like this:
-
- * GDB: (gdb.info). The source-level C debugger.
-
-However, Info will look for a file with a `.info' extension if it does
-not find the file under the name given in the menu. This means that
-you can refer to the file `gdb.info' as `gdb', as shown in the first
-example. This looks better.
-
-
-File: texi.info, Node: Other Info Directories, Prev: New Info File, Up: Install an Info File
-
-Info Files in Other Directories
-===============================
-
- If an Info file is not in the `info' directory, there are two ways
-to specify its location:
-
- * Write the pathname as the menu's second part, or;
-
- * Specify the `info' directory name in an environment variable in
- your `.profile' or `.cshrc' initialization file. (Only you and
- others with the same environment variable will be able to find Info
- files whose location is specified this way.)
-
- For example, to reach a test file in the `~bob/manuals' directory,
-you could add an entry like this to the menu in the `dir' file:
-
- * Test: (~bob/manuals/info-test). Bob's own test file.
-
-In this case, the absolute file name of the `info-test' file is written
-as the second part of the menu entry.
-
- Alternatively, you can tell Info where to look by setting the
-`INFOPATH' environment variable in your `.cshrc' or `.profile' file.
-
- If you use `sh' or `bash' for your shell command interpreter, you
-must set the `INFOPATH' environment variable in the `.profile'
-initialization file; but if you use `csh', you must set the variable in
-the `.cshrc' initialization file. The two files require slightly
-different command formats.
-
- * In a `.cshrc' file, you could set the `INFOPATH' variable as
- follows:
-
- setenv INFOPATH .:~bob/manuals:/usr/local/emacs/info
-
- * In a `.profile' file, you would achieve the same effect by writing:
-
- INFOPATH=.:~bob/manuals:/usr/local/emacs/info
- export INFOPATH
-
-Either form would cause Info to look first in the current directory,
-indicated by the `.', then in the `~bob/manuals' directory, and finally
-in the `/usr/local/emacs/info' directory (which is a common location
-for the standard Info directory).
-
-
-File: texi.info, Node: Command List, Next: Tips, Prev: Install an Info File, Up: Top
-
-@-Command List
-**************
-
- Here is an alphabetical list of the @-commands in Texinfo. Square
-brackets, [ ], indicate optional arguments; an ellipsis, `...',
-indicates repeated text.
-
-`@*'
- Force a line break. Do not end a paragraph that uses `@*' with an
- `@refill' command. *Note Line Breaks::.
-
-`@.'
- Stands for a period that really does end a sentence (usually after
- an end-of-sentence capital letter). *Note Controlling Spacing::.
-
-`@:'
- Indicate to TeX that an immediately preceding period, question
- mark, exclamation mark, or colon does not end a sentence. Prevent
- TeX from inserting extra whitespace as it does at the end of a
- sentence. The command has no effect on the Info file output.
- *Note Controlling Spacing::.
-
-`@@'
- Stands for `@'. *Note Inserting `@': Braces Atsigns Periods.
-
-`@{'
- Stands for a left-hand brace, `{'. *Note Inserting @ braces and
- periods: Braces Atsigns Periods.
-
-`@}'
- Stands for a right-hand brace, `}'. *Note Inserting @ braces and
- periods: Braces Atsigns Periods.
-
-`@appendix TITLE'
- Begin an appendix. The title appears in the table of contents of
- a printed manual. In Info, the title is underlined with
- asterisks. *Note The `@unnumbered' and `@appendix' Commands:
- unnumbered & appendix.
-
-`@appendixsec TITLE'
-`@appendixsection TITLE'
- Begin an appendix section within an appendix. The section title
- appears in the table of contents of a printed manual. In Info,
- the title is underlined with equal signs. `@appendixsection' is a
- longer spelling of the `@appendixsec' command. *Note Section
- Commands: unnumberedsec appendixsec heading.
-
-`@appendixsubsec TITLE'
- Begin an appendix subsection within an appendix. The title appears
- in the table of contents of a printed manual. In Info, the title
- is underlined with hyphens. *Note Subsection Commands:
- unnumberedsubsec appendixsubsec subheading.
-
-`@appendixsubsubsec TITLE'
- Begin an appendix subsubsection within a subappendix. The title
- appears in the table of contents of a printed manual. In Info, the
- title is underlined with periods. *Note The `subsub' Commands:
- subsubsection.
-
-`@asis'
- Used following `@table', `@ftable', and `@vtable' to print the
- table's first column without highlighting ("as is"). *Note Making
- a Two-column Table: Two-column Tables.
-
-`@author AUTHOR'
- Typeset AUTHOR flushleft and underline it. *Note The `@title' and
- `@author' Commands: title subtitle author.
-
-`@b{TEXT}'
- Print TEXT in bold font. No effect in Info. *Note Fonts::.
-
-`@bullet{}'
- Generate a large round dot, or the closest possible thing to one.
- *Note `@bullet': bullet.
-
-`@bye'
- Stop formatting a file. The formatters do not see the contents of
- a file following an `@bye' command. *Note Ending a File::.
-
-`@c COMMENT'
- Begin a comment in Texinfo. The rest of the line does not appear
- in either the Info file or the printed manual. A synonym for
- `@comment'. *Note General Syntactic Conventions: Conventions.
-
-`@cartouche'
- Highlight an example or quotation by drawing a box with rounded
- corners around it. Pair with `@end cartouche'. No effect in
- Info. *Note Drawing Cartouches Around Examples: cartouche.)
-
-`@center LINE-OF-TEXT'
- Center the line of text following the command. *Note `@center':
- titlefont center sp.
-
-`@chapheading TITLE'
- Print a chapter-like heading in the text, but not in the table of
- contents of a printed manual. In Info, the title is underlined
- with asterisks. *Note `@majorheading' and `@chapheading':
- majorheading & chapheading.
-
-`@chapter TITLE'
- Begin a chapter. The chapter title appears in the table of
- contents of a printed manual. In Info, the title is underlined
- with asterisks. *Note `@chapter': chapter.
-
-`@cindex ENTRY'
- Add ENTRY to the index of concepts. *Note Defining the Entries of
- an Index: Index Entries.
-
-`@cite{REFERENCE}'
- Highlight the name of a book or other reference that lacks a
- companion Info file. *Note `@cite': cite.
-
-`@clear FLAG'
- Unset FLAG, preventing the Texinfo formatting commands from
- formatting text between subsequent pairs of `@ifset FLAG' and
- `@end ifset' commands, and preventing `@value{FLAG}' from
- expanding to the value to which FLAG is set. *Note `@set'
- `@clear' `@value': set clear value.
-
-`@code{SAMPLE-CODE}'
- Highlight text that is an expression, a syntactically complete
- token of a program, or a program name. *Note `@code': code.
-
-`@comment COMMENT'
- Begin a comment in Texinfo. The rest of the line does not appear
- in either the Info file or the printed manual. A synonym for `@c'.
- *Note General Syntactic Conventions: Conventions.
-
-`@contents'
- Print a complete table of contents. Has no effect in Info, which
- uses menus instead. *Note Generating a Table of Contents:
- Contents.
-
-`@copyright{}'
- Generate a copyright symbol. *Note `@copyright': copyright symbol.
-
-`@defcodeindex INDEX-NAME'
- Define a new index and its indexing command. Print entries in an
- `@code' font. *Note Defining New Indices: New Indices.
-
-`@defcv CATEGORY CLASS NAME'
- Format a description for a variable associated with a class in
- object-oriented programming. Takes three arguments: the category
- of thing being defined, the class to which it belongs, and its
- name. *Note Definition Commands::.
-
-`@deffn CATEGORY NAME ARGUMENTS...'
- Format a description for a function, interactive command, or
- similar entity that may take arguments. `@deffn' takes as
- arguments the category of entity being described, the name of this
- particular entity, and its arguments, if any. *Note Definition
- Commands::.
-
-`@defindex INDEX-NAME'
- Define a new index and its indexing command. Print entries in a
- roman font. *Note Defining New Indices: New Indices.
-
-`@defivar CLASS INSTANCE-VARIABLE-NAME'
- Format a description for an instance variable in object-oriented
- programming. The command is equivalent to `@defcv {Instance
- Variable} ...'. *Note Definition Commands::.
-
-`@defmac MACRO-NAME ARGUMENTS...'
- Format a description for a macro. The command is equivalent to
- `@deffn Macro ...'. *Note Definition Commands::.
-
-`@defmethod CLASS METHOD-NAME ARGUMENTS...'
- Format a description for a method in object-oriented programming.
- The command is equivalent to `@defop Method ...'. Takes as
- arguments the name of the class of the method, the name of the
- method, and its arguments, if any. *Note Definition Commands::.
-
-`@defop CATEGORY CLASS NAME ARGUMENTS...'
- Format a description for an operation in object-oriented
- programming. `@defop' takes as arguments the overall name of the
- category of operation, the name of the class of the operation, the
- name of the operation, and its arguments, if any. *Note
- Definition Commands::.
-
-`@defopt OPTION-NAME'
- Format a description for a user option. The command is equivalent
- to `@defvr {User Option} ...'. *Note Definition Commands::.
-
-`@defspec SPECIAL-FORM-NAME ARGUMENTS...'
- Format a description for a special form. The command is
- equivalent to `@deffn {Special Form} ...'. *Note Definition
- Commands::.
-
-`@deftp CATEGORY NAME-OF-TYPE ATTRIBUTES...'
- Format a description for a data type. `@deftp' takes as arguments
- the category, the name of the type (which is a word like `int' or
- `float'), and then the names of attributes of objects of that
- type. *Note Definition Commands::.
-
-`@deftypefn CLASSIFICATION DATA-TYPE NAME ARGUMENTS...'
- Format a description for a function or similar entity that may take
- arguments and that is typed. `@deftypefn' takes as arguments the
- classification of entity being described, the type, the name of
- the entity, and its arguments, if any. *Note Definition
- Commands::.
-
-`@deftypefun DATA-TYPE FUNCTION-NAME ARGUMENTS...'
- Format a description for a function in a typed language. The
- command is equivalent to `@deftypefn Function ...'. *Note
- Definition Commands::.
-
-`@deftypevr CLASSIFICATION DATA-TYPE NAME'
- Format a description for something like a variable in a typed
- language--an entity that records a value. Takes as arguments the
- classification of entity being described, the type, and the name of
- the entity. *Note Definition Commands::.
-
-`@deftypevar DATA-TYPE VARIABLE-NAME'
- Format a description for a variable in a typed language. The
- command is equivalent to `@deftypevr Variable ...'. *Note
- Definition Commands::.
-
-`@defun FUNCTION-NAME ARGUMENTS...'
- Format a description for functions. The command is equivalent to
- `@deffn Function ...'. *Note Definition Commands::.
-
-`@defvar VARIABLE-NAME'
- Format a description for variables. The command is equivalent to
- `@defvr Variable ...'. *Note Definition Commands::.
-
-`@defvr CATEGORY NAME'
- Format a description for any kind of variable. `@defvr' takes as
- arguments the category of the entity and the name of the entity.
- *Note Definition Commands::.
-
-`@dfn{TERM}'
- Highlight the introductory or defining use of a term. *Note
- `@dfn': dfn.
-
-`@display'
- Begin a kind of example. Indent text, do not fill, do not select a
- new font. Pair with `@end display'. *Note `@display': display.
-
-`@dmn{DIMENSION}'
- Format a dimension. Cause TeX to insert a narrow space before
- DIMENSION. No effect in Info. Use for writing a number followed
- by an abbreviation of a dimension name, such as `12pt', written as
- `12@dmn{pt}', with no space between the number and the `@dmn'
- command. *Note `@dmn': dmn.
-
-`@dots{}'
- Insert an ellipsis: `...'. *Note `@dots': dots.
-
-`@emph{TEXT}'
- Highlight TEXT; text is displayed in *italics* in printed output,
- and surrounded by asterisks in Info. *Note Emphasizing Text:
- Emphasis.
-
-`@enumerate [NUMBER-OR-LETTER]'
- Begin a numbered list, using `@item' for each entry. Optionally,
- start list with NUMBER-OR-LETTER. Pair with `@end enumerate'.
- *Note `@enumerate': enumerate.
-
-`@equiv{}'
- Indicate to the reader the exact equivalence of two forms with a
- glyph: `=='. *Note Equivalence::.
-
-`@error{}'
- Indicate to the reader with a glyph that the following text is an
- error message: `error-->'. *Note Error Glyph::.
-
-`@evenfooting [LEFT] @| [CENTER] @| [RIGHT]'
- Specify page footings for even-numbered (left-hand) pages. Not
- relevant to Info. *Note How to Make Your Own Headings: Custom
- Headings.
-
-`@evenheading [LEFT] @| [CENTER] @| [RIGHT]'
- Specify page headings for even-numbered (left-hand) pages. Not
- relevant to Info. *Note How to Make Your Own Headings: Custom
- Headings.
-
-`@everyfooting [LEFT] @| [CENTER] @| [RIGHT]'
- Specify page footings for every page. Not relevant to Info.
- *Note How to Make Your Own Headings: Custom Headings.
-
-`@everyheading [LEFT] @| [CENTER] @| [RIGHT]'
- Specify page headings for every page. Not relevant to Info.
- *Note How to Make Your Own Headings: Custom Headings.
-
-`@example'
- Begin an example. Indent text, do not fill, and select
- fixed-width font. Pair with `@end example'. *Note `@example':
- example.
-
-`@exdent LINE-OF-TEXT'
- Remove any indentation a line might have. *Note Undoing the
- Indentation of a Line: exdent.
-
-`@expansion{}'
- Indicate the result of a macro expansion to the reader with a
- special glyph: `==>'. *Note ==> Indicating an Expansion:
- expansion.
-
-`@file{FILENAME}'
- Highlight the name of a file, buffer, node, or directory. *Note
- `@file': file.
-
-`@finalout'
- Prevent TeX from printing large black warning rectangles beside
- over-wide lines. *Note Overfull hboxes::.
-
-`@findex ENTRY'
- Add ENTRY to the index of functions. *Note Defining the Entries
- of an Index: Index Entries.
-
-`@flushleft'
- Left justify every line but leave the right end ragged. Leave
- font as is. Pair with `@end flushleft'. *Note `@flushleft' and
- `@flushright': flushleft & flushright.
-
-`@flushright'
- Right justify every line but leave the left end ragged. Leave
- font as is. Pair with `@end flushright'. *Note `@flushleft' and
- `@flushright': flushleft & flushright.
-
-`@footnote{TEXT-OF-FOOTNOTE}'
- Enter a footnote. Footnote text is printed at the bottom of the
- page by TeX; Info may format in either `End' node or `Separate'
- node style. *Note Footnotes::.
-
-`@footnotestyle STYLE'
- Specify an Info file's footnote style, either `end' for the end
- node style or `separate' for the separate node style. *Note
- Footnotes::.
-
-`@format'
- Begin a kind of example. Like `@example' or `@display', but do
- not narrow the margins and do not select the fixed-width font.
- Pair with `@end format'. *Note `@example': example.
-
-`@ftable FORMATTING-COMMAND'
- Begin a two-column table, using `@item' for each entry.
- Automatically enter each of the items in the first column into the
- index of functions. Pair with `@end ftable'. The same as
- `@table', except for indexing. *Note `@ftable' and `@vtable':
- ftable vtable.
-
-`@group'
- Hold text together that must appear on one printed page. Pair with
- `@end group'. Not relevant to Info. *Note `@group': group.
-
-`@heading TITLE'
- Print an unnumbered section-like heading in the text, but not in
- the table of contents of a printed manual. In Info, the title is
- underlined with equal signs. *Note Section Commands:
- unnumberedsec appendixsec heading.
-
-`@headings ON-OFF-SINGLE-DOUBLE'
- Turn page headings on or off, or specify single-sided or
- double-sided page headings for printing. `@headings on' is
- synonymous with `@headings double'. *Note The `@headings'
- Command: headings on off.
-
-`@i{TEXT}'
- Print TEXT in italic font. No effect in Info. *Note Fonts::.
-
-`@ifclear FLAG'
- If FLAG is cleared, the Texinfo formatting commands format text
- between `@ifclear FLAG' and the following `@end ifclear' command.
- *Note `@set' `@clear' `@value': set clear value.
-
-`@ifinfo'
- Begin a stretch of text that will be ignored by TeX when it
- typesets the printed manual. The text appears only in the Info
- file. Pair with `@end ifinfo'. *Note Conditionally Visible Text:
- Conditionals.
-
-`@ifset FLAG'
- If FLAG is set, the Texinfo formatting commands format text
- between `@ifset FLAG' and the following `@end ifset' command.
- *Note `@set' `@clear' `@value': set clear value.
-
-`@iftex'
- Begin a stretch of text that will not appear in the Info file, but
- will be processed only by TeX. Pair with `@end iftex'. *Note
- Conditionally Visible Text: Conditionals.
-
-`@ignore'
- Begin a stretch of text that will not appear in either the Info
- file or the printed output. Pair with `@end ignore'. *Note
- Comments and Ignored Text: Comments.
-
-`@include FILENAME'
- Incorporate the contents of the file FILENAME into the Info file
- or printed document. *Note Include Files::.
-
-`@inforef{NODE-NAME, [ENTRY-NAME], INFO-FILE-NAME}'
- Make a cross reference to an Info file for which there is no
- printed manual. *Note Cross references using `@inforef': inforef.
-
-`\input MACRO-DEFINITIONS-FILE'
- Use the specified macro definitions file. This command is used
- only in the first line of a Texinfo file to cause TeX to make use
- of the `texinfo' macro definitions file. The backslash in `\input'
- is used instead of an `@' because TeX does not properly recognize
- `@' until after it has read the definitions file. *Note The
- Texinfo File Header: Header.
-
-`@item'
- Indicate the beginning of a marked paragraph for `@itemize' and
- `@enumerate'; indicate the beginning of the text of a first column
- entry for `@table', `@ftable', and `@vtable'. *Note Lists and
- Tables::.
-
-`@itemize MARK-GENERATING-CHARACTER-OR-COMMAND'
- Produce a sequence of indented paragraphs, with a mark inside the
- left margin at the beginning of each paragraph. Pair with `@end
- itemize'. *Note `@itemize': itemize.
-
-`@itemx'
- Like `@item' but do not generate extra vertical space above the
- item text. *Note `@itemx': itemx.
-
-`@kbd{KEYBOARD-CHARACTERS}'
- Indicate text that consists of characters of input to be typed by
- users. *Note `@kbd': kbd.
-
-`@key{KEY-NAME}'
- Highlight KEY-NAME, a conventional name for a key on a keyboard.
- *Note `@key': key.
-
-`@kindex ENTRY'
- Add ENTRY to the index of keys. *Note Defining the Entries of an
- Index: Index Entries.
-
-`@lisp'
- Begin an example of Lisp code. Indent text, do not fill, and
- select fixed-width font. Pair with `@end lisp'. *Note `@lisp':
- Lisp Example.
-
-`@majorheading TITLE'
- Print a chapter-like heading in the text, but not in the table of
- contents of a printed manual. Generate more vertical whitespace
- before the heading than the `@chapheading' command. In Info, the
- chapter heading line is underlined with asterisks. *Note
- `@majorheading' and `@chapheading': majorheading & chapheading.
-
-`@menu'
- Mark the beginning of a menu of nodes in Info. No effect in a
- printed manual. Pair with `@end menu'. *Note Menus::.
-
-`@minus{}'
- Generate a minus sign. *Note `@minus': minus.
-
-`@need N'
- Start a new page in a printed manual if fewer than N mils
- (thousandths of an inch) remain on the current page. *Note
- `@need': need.
-
-`@node NAME, NEXT, PREVIOUS, UP'
- Define the beginning of a new node in Info, and serve as a locator
- for references for TeX. *Note `@node': node.
-
-`@noindent'
- Prevent text from being indented as if it were a new paragraph.
- *Note `@noindent': noindent.
-
-`@oddfooting [LEFT] @| [CENTER] @| [RIGHT]'
- Specify page footings for odd-numbered (right-hand) pages. Not
- relevant to Info. *Note How to Make Your Own Headings: Custom
- Headings.
-
-`@oddheading [LEFT] @| [CENTER] @| [RIGHT]'
- Specify page headings for odd-numbered (right-hand) pages. Not
- relevant to Info. *Note How to Make Your Own Headings: Custom
- Headings.
-
-`@page'
- Start a new page in a printed manual. No effect in Info. *Note
- `@page': page.
-
-`@paragraphindent INDENT'
- Indent paragraphs by INDENT number of spaces; delete indentation
- if the value of INDENT is 0; and do not change indentation if
- INDENT is `asis'. *Note Paragraph Indenting: paragraphindent.
-
-`@pindex ENTRY'
- Add ENTRY to the index of programs. *Note Defining the Entries of
- an Index: Index Entries.
-
-`@point{}'
- Indicate the position of point in a buffer to the reader with a
- glyph: `-!-'. *Note Indicating Point in a Buffer: Point Glyph.
-
-`@print{}'
- Indicate printed output to the reader with a glyph: `-|'. *Note
- Print Glyph::.
-
-`@printindex INDEX-NAME'
- Print an alphabetized two-column index in a printed manual or
- generate an alphabetized menu of index entries for Info. *Note
- Printing Indices & Menus::.
-
-`@pxref{NODE-NAME, [ENTRY], [TOPIC-OR-TITLE], [INFO-FILE], [MANUAL]}'
- Make a reference that starts with a lower case `see' in a printed
- manual. Use within parentheses only. Do not follow command with a
- punctuation mark. The Info formatting commands automatically
- insert terminating punctuation as needed, which is why you do not
- need to insert punctuation. Only the first argument is mandatory.
- *Note `@pxref': pxref.
-
-`@quotation'
- Narrow the margins to indicate text that is quoted from another
- real or imaginary work. Write command on a line of its own. Pair
- with `@end quotation'. *Note `@quotation': quotation.
-
-`@r{TEXT}'
- Print TEXT in roman font. No effect in Info. *Note Fonts::.
-
-`@ref{NODE-NAME, [ENTRY], [TOPIC-OR-TITLE], [INFO-FILE], [MANUAL]}'
- Make a reference. In a printed manual, the reference does not
- start with a `See'. Follow command with a punctuation mark. Only
- the first argument is mandatory. *Note `@ref': ref.
-
-`@refill'
- In Info, refill and indent the paragraph after all the other
- processing has been done. No effect on TeX, which always refills.
- This command is no longer needed, since all formatters now
- automatically refill. *Note Refilling Paragraphs::.
-
-`@result{}'
- Indicate the result of an expression to the reader with a special
- glyph: `=>'. *Note `@result': result.
-
-`@samp{TEXT}'
- Highlight TEXT that is a literal example of a sequence of
- characters. Used for single characters, for statements, and often
- for entire shell commands. *Note `@samp': samp.
-
-`@sc{TEXT}'
- Set TEXT in a printed output in THE SMALL CAPS FONT and set text
- in the Info file in uppercase letters. *Note Smallcaps::.
-
-`@section TITLE'
- Begin a section within a chapter. In a printed manual, the section
- title is numbered and appears in the table of contents. In Info,
- the title is underlined with equal signs. *Note `@section':
- section.
-
-`@set FLAG [STRING]'
- Make FLAG active, causing the Texinfo formatting commands to
- format text between subsequent pairs of `@ifset FLAG' and `@end
- ifset' commands. Optionally, set value of FLAG to STRING. *Note
- `@set' `@clear' `@value': set clear value.
-
-`@setchapternewpage ON-OFF-ODD'
- Specify whether chapters start on new pages, and if so, whether on
- odd-numbered (right-hand) new pages. *Note `@setchapternewpage':
- setchapternewpage.
-
-`@setfilename INFO-FILE-NAME'
- Provide a name for the Info file. *Note General Syntactic
- Conventions: Conventions.
-
-`@settitle TITLE'
- Provide a title for page headers in a printed manual. *Note
- General Syntactic Conventions: Conventions.
-
-`@shortcontents'
- Print a short table of contents. Not relevant to Info, which uses
- menus rather than tables of contents. A synonym for
- `@summarycontents'. *Note Generating a Table of Contents:
- Contents.
-
-`@smallbook'
- Cause TeX to produce a printed manual in a 7 by 9.25 inch format
- rather than the regular 8.5 by 11 inch format. *Note Printing
- Small Books: smallbook. Also, see *Note `@smallexample' and
- `@smalllisp': smallexample & smalllisp.
-
-`@smallexample'
- Indent text to indicate an example. Do not fill, select
- fixed-width font. In `@smallbook' format, print text in a smaller
- font than with `@example'. Pair with `@end smallexample'. *Note
- `@smallexample' and `@smalllisp': smallexample & smalllisp.
-
-`@smalllisp'
- Begin an example of Lisp code. Indent text, do not fill, select
- fixed-width font. In `@smallbook' format, print text in a smaller
- font. Pair with `@end smalllisp'. *Note `@smallexample' and
- `@smalllisp': smallexample & smalllisp.
-
-`@sp N'
- Skip N blank lines. *Note `@sp': sp.
-
-`@strong TEXT'
- Emphasize TEXT by typesetting it in a *bold* font for the printed
- manual and by surrounding it with asterisks for Info. *Note
- Emphasizing Text: emph & strong.
-
-`@subheading TITLE'
- Print an unnumbered subsection-like heading in the text, but not in
- the table of contents of a printed manual. In Info, the title is
- underlined with hyphens. *Note `@unnumberedsubsec'
- `@appendixsubsec' `@subheading': unnumberedsubsec appendixsubsec
- subheading.
-
-`@subsection TITLE'
- Begin a subsection within a section. In a printed manual, the
- subsection title is numbered and appears in the table of contents.
- In Info, the title is underlined with hyphens. *Note
- `@subsection': subsection.
-
-`@subsubheading TITLE'
- Print an unnumbered subsubsection-like heading in the text, but
- not in the table of contents of a printed manual. In Info, the
- title is underlined with periods. *Note The `subsub' Commands:
- subsubsection.
-
-`@subsubsection TITLE'
- Begin a subsubsection within a subsection. In a printed manual,
- the subsubsection title is numbered and appears in the table of
- contents. In Info, the title is underlined with periods. *Note
- The `subsub' Commands: subsubsection.
-
-`@subtitle TITLE'
- In a printed manual, set a subtitle in a normal sized font flush to
- the right-hand side of the page. Not relevant to Info, which does
- not have title pages. *Note `@title' `@subtitle' and `@author'
- Commands: title subtitle author.
-
-`@summarycontents'
- Print a short table of contents. Not relevant to Info, which uses
- menus rather than tables of contents. A synonym for
- `@shortcontents'. *Note Generating a Table of Contents: Contents.
-
-`@syncodeindex FROM-INDEX INTO-INDEX'
- Merge the index named in the first argument into the index named in
- the second argument, printing the entries from the first index in
- `@code' font. *Note Combining Indices::.
-
-`@synindex FROM-INDEX INTO-INDEX'
- Merge the index named in the first argument into the index named in
- the second argument. Do not change the font of FROM-INDEX
- entries. *Note Combining Indices::.
-
-`@t{TEXT}'
- Print TEXT in a fixed-width, typewriter-like font. No effect in
- Info. *Note Fonts::.
-
-`@table FORMATTING-COMMAND'
- Begin a two-column table, using `@item' for each entry. Write
- each first column entry on the same line as `@item'. First column
- entries are printed in the font resulting from FORMATTING-COMMAND.
- Pair with `@end table'. *Note Making a Two-column Table:
- Two-column Tables. Also see *Note `@ftable' and `@vtable': ftable
- vtable, and *Note `@itemx': itemx.
-
-`@TeX{}'
- Insert the logo TeX. *Note Inserting TeX and (C): TeX and
- copyright.
-
-`@tex'
- Enter TeX completely. Pair with `@end tex'. *Note Using Ordinary
- TeX Commands: Using Ordinary TeX Commands.
-
-`@thischapter'
- In a heading or footing, stands for the number and name of the
- current chapter, in the format `Chapter 1: Title'. *Note How to
- Make Your Own Headings: Custom Headings.
-
-`@thischaptername'
- In a heading or footing, stands for the name of the current
- chapter. *Note How to Make Your Own Headings: Custom Headings.
-
-`@thisfile'
- In a heading or footing, stands for the name of the current
- `@include' file. Does not insert anything if not within an
- `@include' file. *Note How to Make Your Own Headings: Custom
- Headings.
-
-`@thispage'
- In a heading or footing, stands for the current page number.
- *Note How to Make Your Own Headings: Custom Headings.
-
-`@thistitle'
- In a heading or footing, stands for the name of the document, as
- specified by the `@settitle' command. *Note How to Make Your Own
- Headings: Custom Headings.
-
-`@tindex ENTRY'
- Add ENTRY to the index of data types. *Note Defining the Entries
- of an Index: Index Entries.
-
-`@title TITLE'
- In a printed manual, set a title flush to the left-hand side of the
- page in a larger than normal font and underline it with a black
- rule. Not relevant to Info, which does not have title pages.
- *Note The `@title' `@subtitle' and `@author' Commands: title
- subtitle author.
-
-`@titlefont{TEXT}'
- In a printed manual, print TEXT in a larger than normal font. Not
- relevant to Info, which does not have title pages. *Note The
- `@titlefont' `@center' and `@sp' Commands: titlefont center sp.
-
-`@titlepage'
- Indicate to Texinfo the beginning of the title page. Write
- command on a line of its own. Pair with `@end titlepage'.
- Nothing between `@titlepage' and `@end titlepage' appears in Info.
- *Note `@titlepage': titlepage.
-
-`@today{}'
- Insert the current date, in `1 Jan 1900' style. *Note How to Make
- Your Own Headings: Custom Headings.
-
-`@top TITLE'
- In a Texinfo file to be formatted with `makeinfo', identify the
- topmost `@node' line in the file, which must be written on the line
- immediately preceding the `@top' command. Used for `makeinfo''s
- node pointer insertion feature. The title is underlined with
- asterisks. Both the `@node' line and the `@top' line normally
- should be enclosed by `@ifinfo' and `@end ifinfo'. In TeX and
- `texinfo-format-buffer', the `@top' command is merely a synonym
- for `@unnumbered'. *Note Creating Pointers with `makeinfo':
- makeinfo Pointer Creation.
-
-`@unnumbered TITLE'
- In a printed manual, begin a chapter that appears without chapter
- numbers of any kind. The title appears in the table of contents
- of a printed manual. In Info, the title is underlined with
- asterisks. *Note `@unnumbered' and `@appendix': unnumbered &
- appendix.
-
-`@unnumberedsec TITLE'
- In a printed manual, begin a section that appears without section
- numbers of any kind. The title appears in the table of contents
- of a printed manual. In Info, the title is underlined with equal
- signs. *Note Section Commands: unnumberedsec appendixsec heading.
-
-`@unnumberedsubsec TITLE'
- In a printed manual, begin an unnumbered subsection within a
- chapter. The title appears in the table of contents of a printed
- manual. In Info, the title is underlined with hyphens. *Note
- `@unnumberedsubsec' `@appendixsubsec' `@subheading':
- unnumberedsubsec appendixsubsec subheading.
-
-`@unnumberedsubsubsec TITLE'
- In a printed manual, begin an unnumbered subsubsection within a
- chapter. The title appears in the table of contents of a printed
- manual. In Info, the title is underlined with periods. *Note The
- `subsub' Commands: subsubsection.
-
-`@value{FLAG}'
- Replace FLAG with the value to which it is set by `@set FLAG'.
- *Note `@set' `@clear' `@value': set clear value.
-
-`@var{METASYNTACTIC-VARIABLE}'
- Highlight a metasyntactic variable, which is something that stands
- for another piece of text. *Note Indicating Metasyntactic
- Variables: var.
-
-`@vindex ENTRY'
- Add ENTRY to the index of variables. *Note Defining the Entries
- of an Index: Index Entries.
-
-`@vskip AMOUNT'
- In a printed manual, insert whitespace so as to push text on the
- remainder of the page towards the bottom of the page. Used in
- formatting the copyright page with the argument `0pt plus 1filll'.
- (Note spelling of `filll'.) `@vskip' may be used only in
- contexts ignored for Info. *Note The Copyright Page and Printed
- Permissions: Copyright & Permissions.
-
-`@vtable FORMATTING-COMMAND'
- Begin a two-column table, using `@item' for each entry.
- Automatically enter each of the items in the first column into the
- index of variables. Pair with `@end vtable'. The same as
- `@table', except for indexing. *Note `@ftable' and `@vtable':
- ftable vtable.
-
-`@w{TEXT}'
- Prevent TEXT from being split across two lines. Do not end a
- paragraph that uses `@w' with an `@refill' command. In the
- Texinfo file, keep TEXT on one line. *Note `@w': w.
-
-`@xref{NODE-NAME, [ENTRY], [TOPIC-OR-TITLE], [INFO-FILE], [MANUAL]}'
- Make a reference that starts with `See' in a printed manual.
- Follow command with a punctuation mark. Only the first argument is
- mandatory. *Note `@xref': xref.
-
diff --git a/gnu/usr.bin/texinfo/info-files/texi.info-9 b/gnu/usr.bin/texinfo/info-files/texi.info-9
deleted file mode 100644
index b128db5..0000000
--- a/gnu/usr.bin/texinfo/info-files/texi.info-9
+++ /dev/null
@@ -1,1210 +0,0 @@
-This is Info file texi.info, produced by Makeinfo-1.55 from the input
-file texi.texi.
-
- This file documents Texinfo, a documentation system that uses a
-single source file to produce both on-line information and a printed
-manual.
-
- Copyright (C) 1988, 1990, 1991, 1992, 1993 Free Software Foundation,
-Inc.
-
- This is the second edition of the Texinfo documentation,
-and is consistent with version 2 of `texinfo.tex'.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Tips, Next: Sample Texinfo File, Prev: Command List, Up: Top
-
-Tips and Hints
-**************
-
- Here are some tips for writing Texinfo documentation:
-
- * Write in the present tense, not in the past or the future.
-
- * Write actively! For example, write "We recommend that ..." rather
- than "It is recommended that ...".
-
- * Use 70 or 72 as your fill column. Longer lines are hard to read.
-
- * Include a copyright notice and copying permissions.
-
-Index, index, index!
-....................
-
- Write many index entries, in different ways. Readers like indices;
-they are helpful and convenient.
-
- Although it is easiest to write index entries as you write the body
-of the text, some people prefer to write entries afterwards. In either
-case, write an entry before the paragraph to which it applies. This
-way, an index entry points to the first page of a paragraph that is
-split across pages.
-
- Here are more hints we have found valuable:
-
- * Write each index entry differently, so each entry refers to a
- different place in the document. The index of an Info file lists
- only one location for each entry.
-
- * Write index entries only where a topic is discussed significantly.
- For example, it is not useful to index "debugging information" in
- a chapter on reporting bugs. Someone who wants to know about
- debugging information will certainly not find it in that chapter.
-
- * Consistently capitalize the first word of every index entry, or
- else use lower case. According to convention, you should
- capitalize the first word of an index entry. However, this
- practice may make an index look crowded. Some writers prefer
- lower case. Regardless of which you prefer, choose one style and
- stick to it. Mixing the two styles looks bad.
-
- * Always capitalize or use upper case for those words in an index for
- which this is proper, such as names of countries or acronyms.
-
- * Write the indexing commands that refer to a whole section
- immediately after the section command, and write the indexing
- commands that refer to the paragraph before the paragraph.
-
- In the example that follows, a blank line comes after the index
- entry for "Leaping":
-
- @section The Dog and the Fox
- @cindex Jumping, in general
- @cindex Leaping
-
- @cindex Dog, lazy, jumped over
- @cindex Lazy dog jumped over
- @cindex Fox, jumps over dog
- @cindex Quick fox jumps over dog
- The quick brown fox jumps over the lazy dog.
-
- (Note that the example shows entries for the same concept that are
- written in different ways--`Lazy dog', and `Dog, lazy'--so readers
- can look up the concept in different ways.)
-
-Blank lines
-...........
-
- * Insert a blank line between a sectioning command and the first
- following sentence or paragraph, or between the indexing commands
- associated with the sectioning command and the first following
- sentence or paragraph, as shown in the tip on indexing.
- Otherwise, a formatter may fold title and paragraph together.
-
- * Always insert a blank line before an `@table' command and after an
- `@end table' command; but never insert a blank line after an
- `@table' command or before an `@end table' command.
-
- For example,
-
- Types of fox:
-
- @table @samp
- @item Quick
- Jump over lazy dogs.
-
- @item Brown
- Also jump over lazy dogs.
- @end table
- @noindent
- On the other hand, ...
-
- Insert blank lines before and after `@itemize' ... `@end itemize'
- and `@enumerate' ... `@end enumerate' in the same way.
-
-Complete phrases
-................
-
- Complete phrases are easier to read than ...
-
- * Write entries in an itemized list as complete sentences; or at
- least, as complete phrases. Incomplete expressions ... awkward
- ... like this.
-
- * Write the prefatory sentence or phrase for a multi-item list or
- table as a complete expression. Do not write "You can set:";
- instead, write "You can set these variables:". The former
- expression sounds cut off.
-
-Editions, dates and versions
-............................
-
- Write the edition and version numbers and date in three places in
-every manual:
-
- 1. In the first `@ifinfo' section, for people reading the Texinfo
- file.
-
- 2. In the `@titlepage' section, for people reading the printed manual.
-
- 3. In the `Top' node, for people reading the Info file.
-
-Also, it helps to write a note before the first `@ifinfo' section to
-explain what you are doing.
-
-For example:
-
- @c ===> NOTE! <==
- @c Specify the edition and version numbers and date
- @c in *three* places:
- @c 1. First ifinfo section 2. title page 3. top node
- @c To find the locations, search for !!set
-
- @ifinfo
- @c !!set edition, date, version
- This is Edition 4.03, January 1992,
- of the @cite{GDB Manual} for GDB Version 4.3.
- ...
-
---or use `@set' and `@value' (*note `@value' Example: value Example.).
-
-Definition Commands
-...................
-
- Definition commands are `@deffn', `@defun', `@defmac', and the like,
-and enable you to write descriptions in a uniform format.
-
- * Write just one definition command for each entity you define with a
- definition command. The automatic indexing feature creates an
- index entry that leads the reader to the definition.
-
- * Use `@table' ... `@end table' in an appendix that contains a
- summary of functions, not `@deffn' or other definition commands.
-
-Capitalization
-..............
-
- * Capitalize `Texinfo'; it is a name. Do not write the `x' or `i'
- in upper case.
-
- * Capitalize `Info'; it is a name.
-
- * Write TeX using the `@TeX{}' command. Note the uppercase `T' and
- `X'. This command causes the formatters to typeset the name
- according to the wishes of Donald Knuth, who wrote TeX.
-
-Spaces
-......
-
- Do not use spaces to format a Texinfo file, except inside of
-`@example' ... `@end example' and similar commands.
-
- For example, TeX fills the following:
-
- @kbd{C-x v}
- @kbd{M-x vc-next-action}
- Perform the next logical operation
- on the version-controlled file
- corresponding to the current buffer.
-
-so it looks like this:
-
- `C-x v' `M-x vc-next-action' Perform the next logical operation on
- the version-controlled file corresponding to the current buffer.
-
-In this case, the text should be formatted with `@table', `@item', and
-`@itemx', to create a table.
-
-@code, @samp, @var, and `---'
-.............................
-
- * Use `@code' around Lisp symbols, including command names. For
- example,
-
- The main function is @code{vc-next-action}, ...
-
- * Avoid putting letters such as `s' immediately after an `@code'.
- Such letters look bad.
-
- * Use `@var' around meta-variables. Do not write angle brackets
- around them.
-
- * Use three hyphens in a row, `---', to indicate a long dash. TeX
- typesets these as a long dash and the Info formatters reduce three
- hyphens to two.
-
-Periods Outside of Quotes
-.........................
-
- Place periods and other punctuation marks *outside* of quotations,
-unless the punctuation is part of the quotation. This practice goes
-against convention, but enables the reader to distinguish between the
-contents of the quotation and the whole passage.
-
- For example, you should write the following sentence with the period
-outside the end quotation marks:
-
- Evidently, `au' is an abbreviation for ``author''.
-
-since `au' does *not* serve as an abbreviation for `author.' (with a
-period following the word).
-
-Introducing New Terms
-.....................
-
- * Introduce new terms so that a user who does not know them can
- understand them from context; or write a definition for the term.
-
- For example, in the following, the terms "check in", "register" and
- "delta" are all appearing for the first time; the example sentence
- should be rewritten so they are understandable.
-
- The major function assists you in checking in a file to your
- version control system and registering successive sets of
- changes to it as deltas.
-
- * Use the `@dfn' command around a word being introduced, to indicate
- that the user should not expect to know the meaning already, and
- should expect to learn the meaning from this passage.
-
-@pxref
-......
-
- Absolutely never use `@pxref' except in the special context for
-which it is designed: inside parentheses, with the closing parenthesis
-following immediately after the closing brace. One formatter
-automatically inserts closing punctuation and the other does not. This
-means that the output looks right both in printed output and in an Info
-file, but only when the command is used inside parentheses.
-
-Invoking from a Shell
-.....................
-
- You can invoke programs such as Emacs, GCC, and GAWK from a shell.
-The documentation for each program should contain a section that
-describes this. Unfortunately, if the node names and titles for these
-sections are all different, readers find it hard to search for the
-section.
-
- Name such sections with a phrase beginning with the word
-`Invoking ...', as in `Invoking Emacs'; this way users can find the
-section easily.
-
-ANSI C Syntax
-.............
-
- When you use `@example' to describe a C function's calling
-conventions, use the ANSI C syntax, like this:
-
- void dld_init (char *@var{path});
-
-And in the subsequent discussion, refer to the argument values by
-writing the same argument names, again highlighted with `@var'.
-
- Avoid the obsolete style that looks like this:
-
- #include <dld.h>
-
- dld_init (path)
- char *path;
-
- Also, it is best to avoid writing `#include' above the declaration
-just to indicate that the function is declared in a header file. The
-practice may give the misimpression that the `#include' belongs near
-the declaration of the function. Either state explicitly which header
-file holds the declaration or, better yet, name the header file used
-for a group of functions at the beginning of the section that describes
-the functions.
-
-Bad Examples
-............
-
- Here are several examples of bad writing to avoid:
-
- In this example, say, " ... you must `@dfn'{check in} the new
-version." That flows better.
-
- When you are done editing the file, you must perform a
- `@dfn'{check in}.
-
- In the following example, say, "... makes a unified interface such
-as VC mode possible."
-
- SCCS, RCS and other version-control systems all perform similar
- functions in broadly similar ways (it is this resemblance which
- makes a unified control mode like this possible).
-
- And in this example, you should specify what `it' refers to:
-
- If you are working with other people, it assists in coordinating
- everyone's changes so they do not step on each other.
-
-And Finally ...
-...............
-
- * Pronounce TeX as if the `X' were a Greek `chi', as the last sound
- in the name `Bach'. But pronounce Texinfo as in `speck':
- `teckinfo'.
-
- * Write notes for yourself at the very end of a Texinfo file after
- the `@bye'. None of the formatters process text after the `@bye';
- it is as if the text were within `@ignore' ... `@end ignore'.
-
-
-File: texi.info, Node: Sample Texinfo File, Next: Sample Permissions, Prev: Tips, Up: Top
-
-A Sample Texinfo File
-*********************
-
- Here is a complete, short sample Texinfo file, without any
-commentary. You can see this file, with comments, in the first chapter.
-*Note A Short Sample Texinfo File: Short Sample.
-
- \input texinfo @c -*-texinfo-*-
- @c %**start of header
- @setfilename sample.info
- @settitle Sample Document
- @c %**end of header
-
- @setchapternewpage odd
-
- @ifinfo
- This is a short example of a complete Texinfo file.
-
- Copyright 1990 Free Software Foundation, Inc.
- @end ifinfo
-
- @titlepage
- @sp 10
- @comment The title is printed in a large font.
- @center @titlefont{Sample Title}
-
- @c The following two commands start the copyright page.
- @page
- @vskip 0pt plus 1filll
- Copyright @copyright{} 1990 Free Software Foundation, Inc.
- @end titlepage
-
- @node Top, First Chapter, (dir), (dir)
- @comment node-name, next, previous, up
-
- @menu
- * First Chapter:: The first chapter is the
- only chapter in this sample.
- * Concept Index:: This index has two entries.
- @end menu
-
- @node First Chapter, Concept Index, Top, Top
- @comment node-name, next, previous, up
- @chapter First Chapter
- @cindex Sample index entry
-
- This is the contents of the first chapter.
- @cindex Another sample index entry
-
- Here is a numbered list.
-
- @enumerate
- @item
- This is the first item.
-
- @item
- This is the second item.
- @end enumerate
-
- The @code{makeinfo} and @code{texinfo-format-buffer}
- commands transform a Texinfo file such as this into
- an Info file; and @TeX{} typesets it for a printed
- manual.
-
- @node Concept Index, , First Chapter, Top
- @comment node-name, next, previous, up
- @unnumbered Concept Index
-
- @printindex cp
-
- @contents
- @bye
-
-
-File: texi.info, Node: Sample Permissions, Next: Include Files, Prev: Sample Texinfo File, Up: Top
-
-Sample Permissions
-******************
-
- Texinfo files should contain sections that tell the readers that they
-have the right to copy and distribute the Texinfo file, the Info file,
-and the printed manual.
-
- Also, if you are writing a manual about software, you should explain
-that the software is free and either include the GNU General Public
-License (GPL) or provide a reference to it. *Note Distribution:
-(emacs)Distrib, for an example of the text that could be used in the
-software "Distribution", "General Public License", and "NO WARRANTY"
-sections of a document. *Note Texinfo Copying Conditions: Copying, for
-an example of a brief explanation of how the copying conditions provide
-you with rights.
-
-* Menu:
-
-* Inserting Permissions:: How to put permissions in your document.
-* ifinfo Permissions:: Sample `ifinfo' copying permissions.
-* Titlepage Permissions:: Sample Titlepage copying permissions.
-
-
-File: texi.info, Node: Inserting Permissions, Next: ifinfo Permissions, Up: Sample Permissions
-
-Inserting Permissions
-=====================
-
- In a Texinfo file, the first `@ifinfo' section usually begins with a
-line that says what the file documents. This is what a person reading
-the unprocessed Texinfo file or using the advanced Info command `g *'
-sees first. *note Advanced Info commands: (info)Expert, for more
-information. (A reader using the regular Info commands usually starts
-reading at the first node and skips this first section, which is not in
-a node.)
-
- In the `@ifinfo' section, the summary sentence is followed by a
-copyright notice and then by the copying permission notice. One of the
-copying permission paragraphs is enclosed in `@ignore' and `@end
-ignore' commands. This paragraph states that the Texinfo file can be
-processed through TeX and printed, provided the printed manual carries
-the proper copying permission notice. This paragraph is not made part
-of the Info file since it is not relevant to the Info file; but it is a
-mandatory part of the Texinfo file since it permits people to process
-the Texinfo file in TeX and print the results.
-
- In the printed manual, the Free Software Foundation copying
-permission notice follows the copyright notice and publishing
-information and is located within the region delineated by the
-`@titlepage' and `@end titlepage' commands. The copying permission
-notice is exactly the same as the notice in the `@ifinfo' section
-except that the paragraph enclosed in `@ignore' and `@end ignore'
-commands is not part of the notice.
-
- To make it simple to insert a permission notice into each section of
-the Texinfo file, sample permission notices for each section are
-reproduced in full below.
-
- Note that you may need to specify the correct name of a section
-mentioned in the permission notice. For example, in `The GDB Manual',
-the name of the section referring to the General Public License is
-called the "GDB General Public License", but in the sample shown below,
-that section is referred to generically as the "GNU General Public
-License". If the Texinfo file does not carry a copy of the General
-Public License, leave out the reference to it, but be sure to include
-the rest of the sentence.
-
-
-File: texi.info, Node: ifinfo Permissions, Next: Titlepage Permissions, Prev: Inserting Permissions, Up: Sample Permissions
-
-`ifinfo' Copying Permissions
-============================
-
- In the `@ifinfo' section of a Texinfo file, the standard Free
-Software Foundation permission notice reads as follows:
-
- This file documents ...
-
- Copyright 1992 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.
-
- @ignore
- Permission is granted to process this file through TeX
- and print the results, provided the printed document
- carries a 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 also that the sections
- entitled ``Copying'' and ``GNU General Public License''
- are included exactly as in the original, 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,
- except that this permission notice may be stated in a
- translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Titlepage Permissions, Prev: ifinfo Permissions, Up: Sample Permissions
-
-Titlepage Copying Permissions
-=============================
-
- In the `@titlepage' section of a Texinfo file, the standard Free
-Software Foundation copying permission notice follows the copyright
-notice and publishing information. The standard phrasing is as follows:
-
- 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 sections
- entitled ``Copying'' and ``GNU General Public License''
- are included exactly as in the original, 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,
- except that this permission notice may be stated in a
- translation approved by the Free Software Foundation.
-
-
-File: texi.info, Node: Include Files, Next: Headings, Prev: Sample Permissions, Up: Top
-
-Include Files
-*************
-
- When TeX or an Info formatting command sees an `@include' command in
-a Texinfo file, it processes the contents of the file named by the
-command and incorporates them into the DVI or Info file being created.
-Index entries from the included file are incorporated into the indices
-of the output file.
-
- Include files let you keep a single large document as a collection of
-conveniently small parts.
-
-* Menu:
-
-* Using Include Files:: How to use the `@include' command.
-* texinfo-multiple-files-update:: How to create and update nodes and
- menus when using included files.
-* Include File Requirements:: What `texinfo-multiple-files-update' expects.
-* Sample Include File:: A sample outer file with included files
- within it; and a sample included file.
-* Include Files Evolution:: How use of the `@include' command
- has changed over time.
-
-
-File: texi.info, Node: Using Include Files, Next: texinfo-multiple-files-update, Up: Include Files
-
-How to Use Include Files
-========================
-
- To include another file within a Texinfo file, write the `@include'
-command at the beginning of a line and follow it on the same line by
-the name of a file to be included. For example:
-
- @include buffers.texi
-
- An included file should simply be a segment of text that you expect
-to be included as is into the overall or "outer" Texinfo file; it
-should not contain the standard beginning and end parts of a Texinfo
-file. In particular, you should not start an included file with a line
-saying `\input texinfo'; if you do, that phrase is inserted into the
-output file as is. Likewise, you should not end an included file with
-an `@bye' command; nothing after `@bye' is formatted.
-
- In the past, you were required to write an `@setfilename' line at the
-beginning of an included file, but no longer. Now, it does not matter
-whether you write such a line. If an `@setfilename' line exists in an
-included file, it is ignored.
-
- Conventionally, an included file begins with an `@node' line that is
-followed by an `@chapter' line. Each included file is one chapter.
-This makes it easy to use the regular node and menu creating and
-updating commands to create the node pointers and menus within the
-included file. However, the simple Emacs node and menu creating and
-updating commands do not work with multiple Texinfo files. Thus you
-cannot use these commands to fill in the `Next', `Previous', and `Up'
-pointers of the `@node' line that begins the included file. Also, you
-cannot use the regular commands to create a master menu for the whole
-file. Either you must insert the menus and the `Next', `Previous', and
-`Up' pointers by hand, or you must use the GNU Emacs Texinfo mode
-command, `texinfo-multiple-files-update', that is designed for
-`@include' files.
-
-
-File: texi.info, Node: texinfo-multiple-files-update, Next: Include File Requirements, Prev: Using Include Files, Up: Include Files
-
-`texinfo-multiple-files-update'
-===============================
-
- GNU Emacs Texinfo mode provides a command to handle included files
-called `texinfo-multiple-files-update'. This command creates or
-updates `Next', `Previous', and `Up' pointers of included files as well
-as those in the outer or overall Texinfo file, and it creates or
-updates a main menu in the outer file. Depending whether you call it
-with optional arguments, the command updates only the pointers in the
-first `@node' line of the included files or all of them:
-
-`M-x texinfo-multiple-files-update'
- Called without any arguments:
-
- - Create or update the `Next', `Previous', and `Up' pointers of
- the first `@node' line in each file included in an outer or
- overall Texinfo file.
-
- - Create or update the `Top' level node pointers of the outer or
- overall file.
-
- - Create or update a main menu in the outer file.
-
-`C-u M-x texinfo-multiple-files-update'
- Called with `C-u' as a prefix argument:
-
- - Create or update pointers in the first `@node' line in each
- included file.
-
- - Create or update the `Top' level node pointers of the outer
- file.
-
- - Create and insert a master menu in the outer file. The
- master menu is made from all the menus in all the included
- files.
-
-`C-u 8 M-x texinfo-multiple-files-update'
- Called with a numeric prefix argument, such as `C-u 8':
-
- - Create or update *all* the `Next', `Previous', and `Up'
- pointers of all the included files.
-
- - Create or update *all* the menus of all the included files.
-
- - Create or update the `Top' level node pointers of the outer or
- overall file.
-
- - And then create a master menu in the outer file. This is
- similar to invoking `texinfo-master-menu' with an argument
- when you are working with just one file.
-
- Note the use of the prefix argument in interactive use: with a
-regular prefix argument, just `C-u', the
-`texinfo-multiple-files-update' command inserts a master menu; with a
-numeric prefix argument, such as `C-u 8', the command updates *every*
-pointer and menu in *all* the files and then inserts a master menu.
-
-
-File: texi.info, Node: Include File Requirements, Next: Sample Include File, Prev: texinfo-multiple-files-update, Up: Include Files
-
-Include File Requirements
-=========================
-
- If you plan to use the `texinfo-multiple-files-update' command, the
-outer Texinfo file that lists included files within it should contain
-nothing but the beginning and end parts of a Texinfo file, and a number
-of `@include' commands listing the included files. It should not even
-include indices, which should be listed in an included file of their
-own.
-
- Moreover, each of the included files must contain exactly one highest
-level node (conventionally, `@chapter' or equivalent), and this node
-must be the first node in the included file. Furthermore, each of
-these highest level nodes in each included file must be at the same
-hierarchical level in the file structure. Usually, each is an
-`@chapter', an `@appendix', or an `@unnumbered' node. Thus, normally,
-each included file contains one, and only one, chapter or
-equivalent-level node.
-
- The outer file should contain only *one* node, the `Top' node. It
-should *not* contain any nodes besides the single `Top' node. The
-`texinfo-multiple-files-update' command will not process them.
-
-
-File: texi.info, Node: Sample Include File, Next: Include Files Evolution, Prev: Include File Requirements, Up: Include Files
-
-Sample File with `@include'
-===========================
-
- Here is an example of a complete outer Texinfo file with `@include'
-files within it before running `texinfo-multiple-files-update', which
-would insert a main or master menu:
-
- \input texinfo @c -*-texinfo-*-
- @setfilename include-example.info
- @settitle Include Example
-
- @setchapternewpage odd
- @titlepage
- @sp 12
- @center @titlefont{Include Example}
- @sp 2
- @center by Whom Ever
-
- @page
- @vskip 0pt plus 1filll
- Copyright @copyright{} 1990 Free Software Foundation, Inc.
- @end titlepage
-
- @ifinfo
- @node Top, First, (dir), (dir)
- @top Master Menu
- @end ifinfo
-
- @include foo.texinfo
- @include bar.texinfo
- @include concept-index.texinfo
-
- @summarycontents
- @contents
-
- @bye
-
- An included file, such as `foo.texinfo', might look like this:
-
- @node First, Second, , Top
- @chapter First Chapter
-
- Contents of first chapter ...
-
- The full contents of `concept-index.texinfo' might be as simple as
-this:
-
- @node Concept Index, , Second, Top
- @unnumbered Concept Index
-
- @printindex cp
-
- The outer Texinfo source file for `The GNU Emacs Lisp Reference
-Manual' is named `elisp.texi'. This outer file contains a master menu
-with 417 entries and a list of 41 `@include' files.
-
-
-File: texi.info, Node: Include Files Evolution, Prev: Sample Include File, Up: Include Files
-
-Evolution of Include Files
-==========================
-
- When Info was first created, it was customary to create many small
-Info files on one subject. Each Info file was formatted from its own
-Texinfo source file. This custom meant that Emacs did not need to make
-a large buffer to hold the whole of a large Info file when someone
-wanted information; instead, Emacs allocated just enough memory for the
-small Info file that contained the particular information sought. This
-way, Emacs could avoid wasting memory.
-
- References from one file to another were made by referring to the
-file name as well as the node name. (*Note Referring to Other Info
-Files: Other Info Files. Also, see *Note `@xref' with Four and Five
-Arguments: Four and Five Arguments.)
-
- Include files were designed primarily as a way to create a single,
-large printed manual out of several smaller Info files. In a printed
-manual, all the references were within the same document, so TeX could
-automatically determine the references' page numbers. The Info
-formatting commands used include files only for creating joint indices;
-each of the individual Texinfo files had to be formatted for Info
-individually. (Each, therefore, required its own `@setfilename' line.)
-
- However, because large Info files are now split automatically, it is
-no longer necessary to keep them small.
-
- Nowadays, multiple Texinfo files are used mostly for large documents,
-such as `The GNU Emacs Lisp Reference Manual', and for projects in
-which several different people write different sections of a document
-simultaneously.
-
- In addition, the Info formatting commands have been extended to work
-with the `@include' command so as to create a single large Info file
-that is split into smaller files if necessary. This means that you can
-write menus and cross references without naming the different Texinfo
-files.
-
-
-File: texi.info, Node: Headings, Next: Catching Mistakes, Prev: Include Files, Up: Top
-
-Page Headings
-*************
-
- Most printed manuals contain headings along the top of every page
-except the title and copyright pages. Some manuals also contain
-footings. (Headings and footings have no meaning to Info, which is not
-paginated.)
-
-* Menu:
-
-* Headings Introduced:: Conventions for using page headings.
-* Heading Format:: Standard page heading formats.
-* Heading Choice:: How to specify the type of page heading.
-* Custom Headings:: How to create your own headings and footings.
-
-
-File: texi.info, Node: Headings Introduced, Next: Heading Format, Up: Headings
-
-Headings Introduced
-===================
-
- Texinfo provides standard page heading formats for manuals that are
-printed on one side of each sheet of paper and for manuals that are
-printed on both sides of the paper. Usually, you will use one or other
-of these formats, but you can specify your own format, if you wish.
-
- In addition, you can specify whether chapters should begin on a new
-page, or merely continue the same page as the previous chapter; and if
-chapters begin on new pages, you can specify whether they must be
-odd-numbered pages.
-
- By convention, a book is printed on both sides of each sheet of
-paper. When you open a book, the right-hand page is odd-numbered, and
-chapters begin on right-hand pages--a preceding left-hand page is left
-blank if necessary. Reports, however, are often printed on just one
-side of paper, and chapters begin on a fresh page immediately following
-the end of the preceding chapter. In short or informal reports,
-chapters often do not begin on a new page at all, but are separated
-from the preceding text by a small amount of whitespace.
-
- The `@setchapternewpage' command controls whether chapters begin on
-new pages, and whether one of the standard heading formats is used. In
-addition, Texinfo has several heading and footing commands that you can
-use to generate your own heading and footing formats.
-
- In Texinfo, headings and footings are single lines at the tops and
-bottoms of pages; you cannot create multiline headings or footings.
-Each header or footer line is divided into three parts: a left part, a
-middle part, and a right part. Any part, or a whole line, may be left
-blank. Text for the left part of a header or footer line is set
-flushleft; text for the middle part is centered; and, text for the
-right part is set flushright.
-
-
-File: texi.info, Node: Heading Format, Next: Heading Choice, Prev: Headings Introduced, Up: Headings
-
-Standard Heading Formats
-========================
-
- Texinfo provides two standard heading formats, one for manuals
-printed on one side of each sheet of paper, and the other for manuals
-printed on both sides of the paper.
-
- By default, nothing is specified for the footing of a Texinfo file,
-so the footing remains blank.
-
- The standard format for single-sided printing consists of a header
-line in which the left-hand part contains the name of the chapter, the
-central part is blank, and the right-hand part contains the page number.
-
- A single-sided page looks like this:
-
- _______________________
- | |
- | chapter page number |
- | |
- | Start of text ... |
- | ... |
- | |
-
- The standard format for two-sided printing depends on whether the
-page number is even or odd. By convention, even-numbered pages are on
-the left- and odd-numbered pages are on the right. (TeX will adjust the
-widths of the left- and right-hand margins. Usually, widths are
-correct, but during double-sided printing, it is wise to check that
-pages will bind properly--sometimes a printer will produce output in
-which the even-numbered pages have a larger right-hand margin than the
-odd-numbered pages.)
-
- In the standard double-sided format, the left part of the left-hand
-(even-numbered) page contains the page number, the central part is
-blank, and the right part contains the title (specified by the
-`@settitle' command). The left part of the right-hand (odd-numbered)
-page contains the name of the chapter, the central part is blank, and
-the right part contains the page number.
-
- Two pages, side by side as in an open book, look like this:
-
- _______________________ _______________________
- | | | |
- | page number title | | chapter page number |
- | | | |
- | Start of text ... | | More text ... |
- | ... | | ... |
- | | | |
-
-The chapter name is preceded by the word `Chapter', the chapter number
-and a colon. This makes it easier to keep track of where you are in
-the manual.
-
-
-File: texi.info, Node: Heading Choice, Next: Custom Headings, Prev: Heading Format, Up: Headings
-
-Specifying the Type of Heading
-==============================
-
- TeX does not begin to generate page headings for a standard Texinfo
-file until it reaches the `@end titlepage' command. Thus, the title
-and copyright pages are not numbered. The `@end titlepage' command
-causes TeX to begin to generate page headings according to a standard
-format specified by the `@setchapternewpage' command that precedes the
-`@titlepage' section.
-
- There are four possibilities:
-
-No `@setchapternewpage' command
- Cause TeX to specify the single-sided heading format, with chapters
- on new pages. This is the same as `@setchapternewpage on'.
-
-`@setchapternewpage on'
- Specify the single-sided heading format, with chapters on new
- pages.
-
-`@setchapternewpage off'
- Cause TeX to start a new chapter on the same page as the last page
- of the preceding chapter, after skipping some vertical whitespace.
- Also cause TeX to typeset for single-sided printing. (You can
- override the headers format with the `@headings double' command;
- see *Note The `@headings' Command: headings on off.)
-
-`@setchapternewpage odd'
- Specify the double-sided heading format, with chapters on new
- pages.
-
-Texinfo lacks an `@setchapternewpage even' command.
-
-
-File: texi.info, Node: Custom Headings, Prev: Heading Choice, Up: Headings
-
-How to Make Your Own Headings
-=============================
-
- You can use the standard headings provided with Texinfo or specify
-your own.
-
- Texinfo provides six commands for specifying headings and footings.
-The `@everyheading' command and `@everyfooting' command generate page
-headers and footers that are the same for both even- and odd-numbered
-pages. The `@evenheading' command and `@evenfooting' command generate
-headers and footers for even-numbered (left-hand) pages; and the
-`@oddheading' command and `@oddfooting' command generate headers and
-footers for odd-numbered (right-hand) pages.
-
- Write custom heading specifications in the Texinfo file immediately
-after the `@end titlepage' command. Enclose your specifications
-between `@iftex' and `@end iftex' commands since the
-`texinfo-format-buffer' command may not recognize them. Also, you must
-cancel the predefined heading commands with the `@headings off' command
-before defining your own specifications.
-
- Here is how to tell TeX to place the chapter name at the left, the
-page number in the center, and the date at the right of every header
-for both even- and odd-numbered pages:
-
- @iftex
- @headings off
- @everyheading @thischapter @| @thispage @| @today{}
- @end iftex
-
-You need to divide the left part from the central part and the central
-part from the right had part by inserting `@|' between parts.
-Otherwise, the specification command will not be able to tell where the
-text for one part ends and the next part begins.
-
- Each part can contain text or @-commands. The text is printed as if
-the part were within an ordinary paragraph in the body of the page.
-The @-commands replace themselves with the page number, date, chapter
-name, or whatever.
-
- Here are the six heading and footing commands:
-
-`@everyheading LEFT @| CENTER @| RIGHT'
-`@everyfooting LEFT @| CENTER @| RIGHT'
- The `every' commands specify the format for both even- and
- odd-numbered pages. These commands are for documents that are
- printed on one side of each sheet of paper, or for documents in
- which you want symmetrical headers or footers.
-
-`@evenheading LEFT @| CENTER @| RIGHT'
-`@oddheading LEFT @| CENTER @| RIGHT'
-`@evenfooting LEFT @| CENTER @| RIGHT'
-`@oddfooting LEFT @| CENTER @| RIGHT'
- The `even' and `odd' commands specify the format for even-numbered
- pages and odd-numbered pages. These commands are for books and
- manuals that are printed on both sides of each sheet of paper.
-
- Use the `@this...' series of @-commands to provide the names of
-chapters and sections and the page number. You can use the `@this...'
-commands in the left, center, or right portions of headers and footers,
-or anywhere else in a Texinfo file so long as they are between `@iftex'
-and `@end iftex' commands.
-
- Here are the `@this...' commands:
-
-`@thispage'
- Expands to the current page number.
-
-`@thischaptername'
- Expands to the name of the current chapter.
-
-`@thischapter'
- Expands to the number and name of the current chapter, in the
- format `Chapter 1: Title'.
-
-`@thistitle'
- Expands to the name of the document, as specified by the
- `@settitle' command.
-
-`@thisfile'
- For `@include' files only: expands to the name of the current
- `@include' file. If the current Texinfo source file is not an
- `@include' file, this command has no effect. This command does
- *not* provide the name of the current Texinfo source file unless
- it is an `@include' file. (*Note Include Files::, for more
- information about `@include' files.)
-
-You can also use the `@today{}' command, which expands to the current
-date, in `1 Jan 1900' format.
-
- Other @-commands and text are printed in a header or footer just as
-if they were in the body of a page. It is useful to incorporate text,
-particularly when you are writing drafts:
-
- @iftex
- @headings off
- @everyheading @emph{Draft!} @| @thispage @| @thischapter
- @everyfooting @| @| Version: 0.27: @today{}
- @end iftex
-
- Beware of overlong titles: they may overlap another part of the
-header or footer and blot it out.
-
-
-File: texi.info, Node: Catching Mistakes, Next: Refilling Paragraphs, Prev: Headings, Up: Top
-
-Formatting Mistakes
-*******************
-
- Besides mistakes in the content of your documentation, there are two
-kinds of mistake you can make with Texinfo: you can make mistakes with
-@-commands, and you can make mistakes with the structure of the nodes
-and chapters.
-
- Emacs has two tools for catching the @-command mistakes and two for
-catching structuring mistakes.
-
- For finding problems with @-commands, you can run TeX or a region
-formatting command on the region that has a problem; indeed, you can
-run these commands on each region as you write it.
-
- For finding problems with the structure of nodes and chapters, you
-can use `C-c C-s' (`texinfo-show-structure') and the related `occur'
-command and you can use the `M-x Info-validate' command.
-
-* Menu:
-
-* makeinfo preferred:: `makeinfo' finds errors.
-* Debugging with Info:: How to catch errors with Info formatting.
-* Debugging with TeX:: How to catch errors with TeX formatting.
-* Using texinfo-show-structure:: How to use `texinfo-show-structure'.
-* Using occur:: How to list all lines containing a pattern.
-* Running Info-Validate:: How to find badly referenced nodes.
-
-
-File: texi.info, Node: makeinfo preferred, Next: Debugging with Info, Up: Catching Mistakes
-
-`makeinfo' Find Errors
-======================
-
- The `makeinfo' program does an excellent job of catching errors and
-reporting them--far better than either the `texinfo-format-region' or
-the `texinfo-format-buffer' command. In addition, the various
-functions for automatically creating and updating node pointers and
-menus remove many opportunities for human error.
-
- If you can, use the updating commands to create and insert pointers
-and menus. These prevent many errors. Then use `makeinfo' (or its
-Texinfo mode manifestations, `makeinfo-region' and `makeinfo-buffer')
-to format your file and check for other errors. This is the best way
-to work with Texinfo. But if you cannot use `makeinfo', or your
-problem is very puzzling, then you may want to use the tools described
-in this appendix.
-
-
-File: texi.info, Node: Debugging with Info, Next: Debugging with TeX, Prev: makeinfo preferred, Up: Catching Mistakes
-
-Catching Errors with Info Formatting
-====================================
-
- After you have written part of a Texinfo file, you can use the
-`texinfo-format-region' or the `makeinfo-region' command to see whether
-the region formats properly.
-
- Most likely, however, you are reading this section because for some
-reason you cannot use the `makeinfo-region' command; therefore, the
-rest of this section presumes that you are using
-`texinfo-format-region'.
-
- If you make a mistake with an @-command, `texinfo-format-region'
-will stop processing at or after the error and display an error
-message. To see where in the buffer the error occurred, switch to the
-`*Info Region*' buffer; the cursor will be in a position that is after
-the location of the error. Also, the text will not be formatted after
-the place where the error occurred (or more precisely, where it was
-detected).
-
- For example, if you accidentally end a menu with the command `@end
-menus' with an `s' on the end, instead of with `@end menu', you will
-see an error message that says:
-
- @end menus is not handled by texinfo
-
-The cursor will stop at the point in the buffer where the error occurs,
-or not long after it. The buffer will look like this:
-
- ---------- Buffer: *Info Region* ----------
- * Menu:
-
- * Using texinfo-show-structure:: How to use
- `texinfo-show-structure'
- to catch mistakes.
- * Running Info-Validate:: How to check for
- unreferenced nodes.
- @end menus
- -!-
- ---------- Buffer: *Info Region* ----------
-
- The `texinfo-format-region' command sometimes provides slightly odd
-error messages. For example, the following cross reference fails to
-format:
-
- (@xref{Catching Mistakes, for more info.)
-
-In this case, `texinfo-format-region' detects the missing closing brace
-but displays a message that says `Unbalanced parentheses' rather than
-`Unbalanced braces'. This is because the formatting command looks for
-mismatches between braces as if they were parentheses.
-
- Sometimes `texinfo-format-region' fails to detect mistakes. For
-example, in the following, the closing brace is swapped with the
-closing parenthesis:
-
- (@xref{Catching Mistakes), for more info.}
-
-Formatting produces:
- (*Note for more info.: Catching Mistakes)
-
- The only way for you to detect this error is to realize that the
-reference should have looked like this:
-
- (*Note Catching Mistakes::, for more info.)
-
- Incidentally, if you are reading this node in Info and type `f RET'
-(`Info-follow-reference'), you will generate an error message that says:
-
- No such node: "Catching Mistakes) The only way ...
-
-This is because Info perceives the example of the error as the first
-cross reference in this node and if you type a RET immediately after
-typing the Info `f' command, Info will attempt to go to the referenced
-node. If you type `f catch TAB RET', Info will complete the node name
-of the correctly written example and take you to the `Catching
-Mistakes' node. (If you try this, you can return from the `Catching
-Mistakes' node by typing `l' (`Info-last').)
-
diff --git a/gnu/usr.bin/texinfo/info/info-stnd.info b/gnu/usr.bin/texinfo/info/info-stnd.info
deleted file mode 100644
index 31f486a..0000000
--- a/gnu/usr.bin/texinfo/info/info-stnd.info
+++ /dev/null
@@ -1,1259 +0,0 @@
-This is Info file info-stnd.info, produced by Makeinfo-1.55 from the
-input file info-stnd.texi.
-
-This file documents GNU Info, a program for viewing the on-line
-formatted versions of Texinfo files. This documentation is different
-from the documentation for the Info reader that is part of GNU Emacs.
-If you do not know how to use Info, but have a working Info reader, you
-should read that documentation first.
-
-Copyright (C) 1992, 1993 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 and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-sections entitled "Copying" and "GNU General Public License" are
-included exactly as in the original, 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,
-except that this permission notice may be stated in a translation
-approved by the Free Software Foundation.
-
-
-File: info-stnd.info, Node: Top, Next: What is Info, Prev: (dir), Up: (dir)
-
-The GNU Info Program
-********************
-
-This file documents GNU Info, a program for viewing the on-line
-formatted versions of Texinfo files, version 2.9. This documentation
-is different from the documentation for the Info reader that is part of
-GNU Emacs.
-
-* Menu:
-
-* What is Info::
-* Options:: Options you can pass on the command line.
-* Cursor Commands:: Commands which move the cursor within a node.
-* Scrolling Commands:: Commands for moving the node around
- in a window.
-* Node Commands:: Commands for selecting a new node.
-* Searching Commands:: Commands for searching an Info file.
-* Xref Commands:: Commands for selecting cross references.
-* Window Commands:: Commands which manipulate multiple windows.
-* Printing Nodes:: How to print out the contents of a node.
-* Miscellaneous Commands:: A few commands that defy categories.
-* Variables:: How to change the default behavior of Info.
-* GNU Info Global Index:: Global index containing keystrokes,
- command names, variable names,
- and general concepts.
-
-
-File: info-stnd.info, Node: What is Info, Next: Options, Prev: Top, Up: Top
-
-What is Info?
-*************
-
-"Info" is a program which is used to view Info files on an ASCII
-terminal. "Info files" are the result of processing Texinfo files with
-the program `makeinfo' or with one of the Emacs commands, such as `M-x
-texinfo-format-buffer'. Texinfo itself is a documentation system that
-uses a single source file to produce both on-line information and
-printed output. You can typeset and print the files that you read in
-Info.
-
-
-File: info-stnd.info, Node: Options, Next: Cursor Commands, Prev: What is Info, Up: Top
-
-Command Line Options
-********************
-
-GNU Info accepts several options to control the initial node being
-viewed, and to specify which directories to search for Info files. Here
-is a template showing an invocation of GNU Info from the shell:
-
- info [--OPTION-NAME OPTION-VALUE] MENU-ITEM...
-
-The following OPTION-NAMES are available when invoking Info from the
-shell:
-
-`--directory DIRECTORY-PATH'
-`-d DIRECTORY-PATH'
- Add DIRECTORY-PATH to the list of directory paths searched when
- Info needs to find a file. You may issue `--directory' multiple
- times; once for each directory which contains Info files.
- Alternatively, you may specify a value for the environment variable
- `INFOPATH'; if `--directory' is not given, the value of `INFOPATH'
- is used. The value of `INFOPATH' is a colon separated list of
- directory names. If you do not supply `INFOPATH' or
- `--directory-path', Info uses a default path.
-
-`--file FILENAME'
-`-f FILENAME'
- Specify a particular Info file to visit. By default, Info visits
- the file `dir'; if you use this option, Info will start with
- `(FILENAME)Top' as the first file and node.
-
-`--node NODENAME'
-`-n NODENAME'
- Specify a particular node to visit in the initial file that Info
- loads. This is especially useful in conjunction with `--file'(1)
- (*note Options-Footnotes::). You may specify `--node' multiple
- times; for an interactive Info, each NODENAME is visited in its
- own window, for a non-interactive Info (such as when `--output' is
- given) each NODENAME is processed sequentially.
-
-`--output FILENAME'
-`-o FILENAME'
- Specify FILENAME as the name of a file to which to direct output.
- Each node that Info visits will be output to FILENAME instead of
- interactively viewed. A value of `-' for FILENAME specifies the
- standard output.
-
-`--subnodes'
- This option only has meaning when given in conjunction with
- `--output'. It means to recursively output the nodes appearing in
- the menus of each node being output. Menu items which resolve to
- external Info files are not output, and neither are menu items
- which are members of an index. Each node is only output once.
-
-`--help'
-`-h'
- Produces a relatively brief description of the available Info
- options.
-
-`--version'
- Prints the version information of Info and exits.
-
-`MENU-ITEM'
- Info treats its remaining arguments as the names of menu items.
- The first argument is a menu item in the initial node visited,
- while the second argument is a menu item in the first argument's
- node. You can easily move to the node of your choice by
- specifying the menu names which describe the path to that node.
- For example,
-
- info emacs buffers
-
- first selects the menu item `Emacs' in the node `(dir)Top', and
- then selects the menu item `Buffers' in the node `(emacs)Top'.
-
-
-File: info-stnd.info, Node: Options-Footnotes, Up: Options
-
-(1) Of course, you can specify both the file and node in a `--node'
-command; but don't forget to escape the open and close parentheses from
-the shell as in: `info --node '(emacs)Buffers''
-
-
-File: info-stnd.info, Node: Cursor Commands, Next: Scrolling Commands, Prev: Options, Up: Top
-
-Moving the Cursor
-*****************
-
-Many people find that reading screens of text page by page is made
-easier when one is able to indicate particular pieces of text with some
-kind of pointing device. Since this is the case, GNU Info (both the
-Emacs and standalone versions) have several commands which allow you to
-move the cursor about the screen. The notation used in this manual to
-describe keystrokes is identical to the notation used within the Emacs
-manual, and the GNU Readline manual. *Note Character Conventions:
-(emacs)Characters, if you are unfamiliar with the notation.
-
-The following table lists the basic cursor movement commands in Info.
-Each entry consists of the key sequence you should type to execute the
-cursor movement, the `M-x'(1) (*note Cursor Commands-Footnotes::)
-command name (displayed in parentheses), and a short description of
-what the command does. All of the cursor motion commands can take an
-"numeric" argument (*note `universal-argument': Miscellaneous
-Commands.), to find out how to supply them. With a numeric argument,
-the motion commands are simply executed that many times; for example, a
-numeric argument of 4 given to `next-line' causes the cursor to move
-down 4 lines. With a negative numeric argument, the motion is
-reversed; an argument of -4 given to the `next-line' command would
-cause the cursor to move *up* 4 lines.
-
-`C-n' (`next-line')
- Move the cursor down to the next line.
-
-`C-p' (`prev-line')
- Move the cursor up to the previous line.
-
-`C-a' (`beginning-of-line')
- Move the cursor to the start of the current line.
-
-`C-e' (`end-of-line')
- Move the cursor to the end of the current line.
-
-`C-f' (`forward-char')
- Move the cursor forward a character.
-
-`C-b' (`backward-char')
- Move the cursor backward a character.
-
-`M-f' (`forward-word')
- Move the cursor forward a word.
-
-`M-b' (`backward-word')
- Move the cursor backward a word.
-
-`M-<' (`beginning-of-node')
-`b'
- Move the cursor to the start of the current node.
-
-`M->' (`end-of-node')
- Move the cursor to the end of the current node.
-
-`M-r' (`move-to-window-line')
- Move the cursor to a specific line of the window. Without a
- numeric argument, `M-r' moves the cursor to the start of the line
- in the center of the window. With a numeric argument of N, `M-r'
- moves the cursor to the start of the Nth line in the window.
-
-
-File: info-stnd.info, Node: Cursor Commands-Footnotes, Up: Cursor Commands
-
-(1) `M-x' is also a command; it invokes `execute-extended-command'.
-*Note Executing an extended command: (emacs)M-x, for more detailed
-information.
-
-
-File: info-stnd.info, Node: Scrolling Commands, Next: Node Commands, Prev: Cursor Commands, Up: Top
-
-Moving Text Within a Window
-***************************
-
-Sometimes you are looking at a screenful of text, and only part of the
-current paragraph you are reading is visible on the screen. The
-commands detailed in this section are used to shift which part of the
-current node is visible on the screen.
-
-`SPC' (`scroll-forward')
-`C-v'
- Shift the text in this window up. That is, show more of the node
- which is currently below the bottom of the window. With a numeric
- argument, show that many more lines at the bottom of the window; a
- numeric argument of 4 would shift all of the text in the window up
- 4 lines (discarding the top 4 lines), and show you four new lines
- at the bottom of the window. Without a numeric argument, SPC
- takes the bottom two lines of the window and places them at the
- top of the window, redisplaying almost a completely new screenful
- of lines.
-
-`DEL' (`scroll-backward')
-`M-v'
- Shift the text in this window down. The inverse of
- `scroll-forward'.
-
-The `scroll-forward' and `scroll-backward' commands can also move
-forward and backward through the node structure of the file. If you
-press SPC while viewing the end of a node, or DEL while viewing the
-beginning of a node, what happens is controlled by the variable
-`scroll-behavior'. *Note `scroll-behavior': Variables, for more
-information.
-
-`C-l' (`redraw-display')
- Redraw the display from scratch, or shift the line containing the
- cursor to a specified location. With no numeric argument, `C-l'
- clears the screen, and then redraws its entire contents. Given a
- numeric argument of N, the line containing the cursor is shifted
- so that it is on the Nth line of the window.
-
-`C-x w' (`toggle-wrap')
- Toggles the state of line wrapping in the current window.
- Normally, lines which are longer than the screen width "wrap",
- i.e., they are continued on the next line. Lines which wrap have
- a `\' appearing in the rightmost column of the screen. You can
- cause such lines to be terminated at the rightmost column by
- changing the state of line wrapping in the window with `C-x w'.
- When a line which needs more space than one screen width to
- display is displayed, a `$' appears in the rightmost column of the
- screen, and the remainder of the line is invisible.
-
-
-File: info-stnd.info, Node: Node Commands, Next: Searching Commands, Prev: Scrolling Commands, Up: Top
-
-Selecting a New Node
-********************
-
-This section details the numerous Info commands which select a new node
-to view in the current window.
-
-The most basic node commands are `n', `p', `u', and `l'.
-
-When you are viewing a node, the top line of the node contains some Info
-"pointers" which describe where the next, previous, and up nodes are.
-Info uses this line to move about the node structure of the file when
-you use the following commands:
-
-`n' (`next-node')
- Select the `Next' node.
-
-`p' (`prev-node')
- Select the `Prev' node.
-
-`u' (`up-node')
- Select the `Up' node.
-
-You can easily select a node that you have already viewed in this window
-by using the `l' command - this name stands for "last", and actually
-moves through the list of already visited nodes for this window. `l'
-with a negative numeric argument moves forward through the history of
-nodes for this window, so you can quickly step between two adjacent (in
-viewing history) nodes.
-
-`l' (`history-node')
- Select the most recently selected node in this window.
-
-Two additional commands make it easy to select the most commonly
-selected nodes; they are `t' and `d'.
-
-`t' (`top-node')
- Select the node `Top' in the current Info file.
-
-`d' (`dir-node')
- Select the directory node (i.e., the node `(dir)').
-
-Here are some other commands which immediately result in the selection
-of a different node in the current window:
-
-`<' (`first-node')
- Selects the first node which appears in this file. This node is
- most often `Top', but it does not have to be.
-
-`>' (`last-node')
- Select the last node which appears in this file.
-
-`]' (`global-next-node')
- Move forward or down through node structure. If the node that you
- are currently viewing has a `Next' pointer, that node is selected.
- Otherwise, if this node has a menu, the first menu item is
- selected. If there is no `Next' and no menu, the same process is
- tried with the `Up' node of this node.
-
-`[' (`global-prev-node')
- Move backward or up through node structure. If the node that you
- are currently viewing has a `Prev' pointer, that node is selected.
- Otherwise, if the node has an `Up' pointer, that node is selected,
- and if it has a menu, the last item in the menu is selected.
-
-You can get the same behavior as `global-next-node' and
-`global-prev-node' while simply scrolling through the file with SPC and
-DEL; *Note `scroll-behavior': Variables, for more information.
-
-`g' (`goto-node')
- Read the name of a node and select it. No completion is done while
- reading the node name, since the desired node may reside in a
- separate file. The node must be typed exactly as it appears in
- the Info file. A file name may be included as with any node
- specification, for example
-
- `g(emacs)Buffers'
-
- finds the node `Buffers' in the Info file `emacs'.
-
-`C-x k' (`kill-node')
- Kill a node. The node name is prompted for in the echo area, with
- a default of the current node. "Killing" a node means that Info
- tries hard to forget about it, removing it from the list of
- history nodes kept for the window where that node is found.
- Another node is selected in the window which contained the killed
- node.
-
-`C-x C-f' (`view-file')
- Read the name of a file and selects the entire file. The command
- `C-x C-f FILENAME'
- is equivalent to typing
- `g(FILENAME)*'
-
-`C-x C-b' (`list-visited-nodes')
- Make a window containing a menu of all of the currently visited
- nodes. This window becomes the selected window, and you may use
- the standard Info commands within it.
-
-`C-x b' (`select-visited-node')
- Select a node which has been previously visited in a visible
- window. This is similar to `C-x C-b' followed by `m', but no
- window is created.
-
-
-File: info-stnd.info, Node: Searching Commands, Next: Xref Commands, Prev: Node Commands, Up: Top
-
-Searching an Info File
-**********************
-
-GNU Info allows you to search for a sequence of characters throughout an
-entire Info file, search through the indices of an Info file, or find
-areas within an Info file which discuss a particular topic.
-
-`s' (`search')
- Read a string in the echo area and search for it.
-
-`C-s' (`isearch-forward')
- Interactively search forward through the Info file for a string as
- you type it.
-
-`C-r' (`isearch-backward')
- Interactively search backward through the Info file for a string as
- you type it.
-
-`i' (`index-search')
- Look up a string in the indices for this Info file, and select a
- node where the found index entry points to.
-
-`,' (`next-index-match')
- Move to the node containing the next matching index item from the
- last `i' command.
-
-The most basic searching command is `s' (`search'). The `s' command
-prompts you for a string in the echo area, and then searches the
-remainder of the Info file for an occurrence of that string. If the
-string is found, the node containing it is selected, and the cursor is
-left positioned at the start of the found string. Subsequent `s'
-commands show you the default search string within `[' and `]';
-pressing RET instead of typing a new string will use the default search
-string.
-
-"Incremental searching" is similar to basic searching, but the string
-is looked up while you are typing it, instead of waiting until the
-entire search string has been specified.
-
-
-File: info-stnd.info, Node: Xref Commands, Next: Window Commands, Prev: Searching Commands, Up: Top
-
-Selecting Cross References
-**************************
-
-We have already discussed the `Next', `Prev', and `Up' pointers which
-appear at the top of a node. In addition to these pointers, a node may
-contain other pointers which refer you to a different node, perhaps in
-another Info file. Such pointers are called "cross references", or
-"xrefs" for short.
-
-* Menu:
-
-* Parts of an Xref:: What a cross reference is made of.
-* Selecting Xrefs:: Commands for selecting menu or note items.
-
-
-File: info-stnd.info, Node: Parts of an Xref, Next: Selecting Xrefs, Up: Xref Commands
-
-Parts of an Xref
-================
-
-Cross references have two major parts: the first part is called the
-"label"; it is the name that you can use to refer to the cross
-reference, and the second is the "target"; it is the full name of the
-node that the cross reference points to.
-
-The target is separated from the label by a colon `:'; first the label
-appears, and then the target. For example, in the sample menu cross
-reference below, the single colon separates the label from the target.
-
- * Foo Label: Foo Target. More information about Foo.
-
-Note the `.' which ends the name of the target. The `.' is not part of
-the target; it serves only to let Info know where the target name ends.
-
-A shorthand way of specifying references allows two adjacent colons to
-stand for a target name which is the same as the label name:
-
- * Foo Commands:: Commands pertaining to Foo.
-
-In the above example, the name of the target is the same as the name of
-the label, in this case `Foo Commands'.
-
-You will normally see two types of cross reference while viewing nodes:
-"menu" references, and "note" references. Menu references appear
-within a node's menu; they begin with a `*' at the beginning of a line,
-and continue with a label, a target, and a comment which describes what
-the contents of the node pointed to contains.
-
-Note references appear within the body of the node text; they begin with
-`*Note', and continue with a label and a target.
-
-Like `Next', `Prev', and `Up' pointers, cross references can point to
-any valid node. They are used to refer you to a place where more
-detailed information can be found on a particular subject. Here is a
-cross reference which points to a node within the Texinfo
-documentation: *Note Writing an Xref: (texinfo)xref, for more
-information on creating your own texinfo cross references.
-
-
-File: info-stnd.info, Node: Selecting Xrefs, Prev: Parts of an Xref, Up: Xref Commands
-
-Selecting Xrefs
-===============
-
-The following table lists the Info commands which operate on menu items.
-
-`1' (`menu-digit')
-`2' ... `9'
- Within an Info window, pressing a single digit, (such as `1'),
- selects that menu item, and places its node in the current window.
- For convenience, there is one exception; pressing `0' selects the
- *last* item in the node's menu.
-
-`0' (`last-menu-item')
- Select the last item in the current node's menu.
-
-`m' (`menu-item')
- Reads the name of a menu item in the echo area and selects its
- node. Completion is available while reading the menu label.
-
-`M-x find-menu'
- Move the cursor to the start of this node's menu.
-
-This table lists the Info commands which operate on note cross
-references.
-
-`f' (`xref-item')
-`r'
- Reads the name of a note cross reference in the echo area and
- selects its node. Completion is available while reading the cross
- reference label.
-
-Finally, the next few commands operate on menu or note references alike:
-
-`TAB' (`move-to-next-xref')
- Move the cursor to the start of the next nearest menu item or note
- reference in this node. You can then use RET
- (`select-reference-this-line') to select the menu or note
- reference.
-
-`M-TAB' (`move-to-prev-xref')
- Move the cursor the start of the nearest previous menu item or note
- reference in this node.
-
-`RET' (`select-reference-this-line')
- Select the menu item or note reference appearing on this line.
-
-
-File: info-stnd.info, Node: Window Commands, Next: Printing Nodes, Prev: Xref Commands, Up: Top
-
-Manipulating Multiple Windows
-*****************************
-
-A "window" is a place to show the text of a node. Windows have a view
-area where the text of the node is displayed, and an associated "mode
-line", which briefly describes the node being viewed.
-
-GNU Info supports multiple windows appearing in a single screen; each
-window is separated from the next by its modeline. At any time, there
-is only one "active" window, that is, the window in which the cursor
-appears. There are commands available for creating windows, changing
-the size of windows, selecting which window is active, and for deleting
-windows.
-
-* Menu:
-
-* The Mode Line:: What appears in the mode line?
-* Basic Windows:: Manipulating windows in Info.
-* The Echo Area:: Used for displaying errors and reading input.
-
-
-File: info-stnd.info, Node: The Mode Line, Next: Basic Windows, Up: Window Commands
-
-The Mode Line
-=============
-
-A "mode line" is a line of inverse video which appears at the bottom of
-an Info window. It describes the contents of the window just above it;
-this information includes the name of the file and node appearing in
-that window, the number of screen lines it takes to display the node,
-and the percentage of text that is above the top of the window. It can
-also tell you if the indirect tags table for this Info file needs to be
-updated, and whether or not the Info file was compressed when stored on
-disk.
-
-Here is a sample mode line for a window containing an uncompressed file
-named `dir', showing the node `Top'.
-
- -----Info: (dir)Top, 40 lines --Top---------------------------------------
- ^^ ^ ^^^ ^^
- (file)Node #lines where
-
-When a node comes from a file which is compressed on disk, this is
-indicated in the mode line with two small `z''s. In addition, if the
-Info file containing the node has been split into subfiles, the name of
-the subfile containing the node appears in the modeline as well:
-
- --zz-Info: (emacs)Top, 291 lines --Top-- Subfile: emacs-1.Z---------------
-
-When Info makes a node internally, such that there is no corresponding
-info file on disk, the name of the node is surrounded by asterisks
-(`*'). The name itself tells you what the contents of the window are;
-the sample mode line below shows an internally constructed node showing
-possible completions:
-
- -----Info: *Completions*, 7 lines --All-----------------------------------
-
-
-File: info-stnd.info, Node: Basic Windows, Next: The Echo Area, Prev: The Mode Line, Up: Window Commands
-
-Window Commands
-===============
-
-It can be convenient to view more than one node at a time. To allow
-this, Info can display more than one "window". Each window has its own
-mode line (*note The Mode Line::.) and history of nodes viewed in that
-window (*note `history-node': Node Commands.).
-
-`C-x o' (`next-window')
- Select the next window on the screen. Note that the echo area can
- only be selected if it is already in use, and you have left it
- temporarily. Normally, `C-x o' simply moves the cursor into the
- next window on the screen, or if you are already within the last
- window, into the first window on the screen. Given a numeric
- argument, `C-x o' moves over that many windows. A negative
- argument causes `C-x o' to select the previous window on the
- screen.
-
-`M-x prev-window'
- Select the previous window on the screen. This is identical to
- `C-x o' with a negative argument.
-
-`C-x 2' (`split-window')
- Split the current window into two windows, both showing the same
- node. Each window is one half the size of the original window,
- and the cursor remains in the original window. The variable
- `automatic-tiling' can cause all of the windows on the screen to
- be resized for you automatically, please *note automatic-tiling:
- Variables. for more information.
-
-`C-x 0' (`delete-window')
- Delete the current window from the screen. If you have made too
- many windows and your screen appears cluttered, this is the way to
- get rid of some of them.
-
-`C-x 1' (`keep-one-window')
- Delete all of the windows excepting the current one.
-
-`ESC C-v' (`scroll-other-window')
- Scroll the other window, in the same fashion that `C-v' might
- scroll the current window. Given a negative argument, scroll the
- "other" window backward.
-
-`C-x ^' (`grow-window')
- Grow (or shrink) the current window. Given a numeric argument,
- grow the current window that many lines; with a negative numeric
- argument, shrink the window instead.
-
-`C-x t' (`tile-windows')
- Divide the available screen space among all of the visible windows.
- Each window is given an equal portion of the screen in which to
- display its contents. The variable `automatic-tiling' can cause
- `tile-windows' to be called when a window is created or deleted.
- *Note `automatic-tiling': Variables.
-
-
-File: info-stnd.info, Node: The Echo Area, Prev: Basic Windows, Up: Window Commands
-
-The Echo Area
-=============
-
-The "echo area" is a one line window which appears at the bottom of the
-screen. It is used to display informative or error messages, and to
-read lines of input from you when that is necessary. Almost all of the
-commands available in the echo area are identical to their Emacs
-counterparts, so please refer to that documentation for greater depth of
-discussion on the concepts of editing a line of text. The following
-table briefly lists the commands that are available while input is being
-read in the echo area:
-
-`C-f' (`echo-area-forward')
- Move forward a character.
-
-`C-b' (`echo-area-backward')
- Move backward a character.
-
-`C-a' (`echo-area-beg-of-line')
- Move to the start of the input line.
-
-`C-e' (`echo-area-end-of-line')
- Move to the end of the input line.
-
-`M-f' (`echo-area-forward-word')
- Move forward a word.
-
-`M-b' (`echo-area-backward-word')
- Move backward a word.
-
-`C-d' (`echo-area-delete')
- Delete the character under the cursor.
-
-`DEL' (`echo-area-rubout')
- Delete the character behind the cursor.
-
-`C-g' (`echo-area-abort')
- Cancel or quit the current operation. If completion is being read,
- `C-g' discards the text of the input line which does not match any
- completion. If the input line is empty, `C-g' aborts the calling
- function.
-
-`RET' (`echo-area-newline')
- Accept (or forces completion of) the current input line.
-
-`C-q' (`echo-area-quoted-insert')
- Insert the next character verbatim. This is how you can insert
- control characters into a search string, for example.
-
-PRINTING CHARACTER (`echo-area-insert')
- Insert the character.
-
-`M-TAB' (`echo-area-tab-insert')
- Insert a TAB character.
-
-`C-t' (`echo-area-transpose-chars')
- Transpose the characters at the cursor.
-
-The next group of commands deal with "killing", and "yanking" text.
-For an in depth discussion of killing and yanking, *note Killing and
-Deleting: (emacs)Killing.
-
-`M-d' (`echo-area-kill-word')
- Kill the word following the cursor.
-
-`M-DEL' (`echo-area-backward-kill-word')
- Kill the word preceding the cursor.
-
-`C-k' (`echo-area-kill-line')
- Kill the text from the cursor to the end of the line.
-
-`C-x DEL' (`echo-area-backward-kill-line')
- Kill the text from the cursor to the beginning of the line.
-
-`C-y' (`echo-area-yank')
- Yank back the contents of the last kill.
-
-`M-y' (`echo-area-yank-pop')
- Yank back a previous kill, removing the last yanked text first.
-
-Sometimes when reading input in the echo area, the command that needed
-input will only accept one of a list of several choices. The choices
-represent the "possible completions", and you must respond with one of
-them. Since there are a limited number of responses you can make, Info
-allows you to abbreviate what you type, only typing as much of the
-response as is necessary to uniquely identify it. In addition, you can
-request Info to fill in as much of the response as is possible; this is
-called "completion".
-
-The following commands are available when completing in the echo area:
-
-`TAB' (`echo-area-complete')
-`SPC'
- Insert as much of a completion as is possible.
-
-`?' (`echo-area-possible-completions')
- Display a window containing a list of the possible completions of
- what you have typed so far. For example, if the available choices
- are:
-
- bar
- foliate
- food
- forget
-
- and you have typed an `f', followed by `?', the possible
- completions would contain:
-
- foliate
- food
- forget
-
- i.e., all of the choices which begin with `f'. Pressing SPC or
- TAB would result in `fo' appearing in the echo area, since all of
- the choices which begin with `f' continue with `o'. Now, typing
- `l' followed by `TAB' results in `foliate' appearing in the echo
- area, since that is the only choice which begins with `fol'.
-
-`ESC C-v' (`echo-area-scroll-completions-window')
- Scroll the completions window, if that is visible, or the "other"
- window if not.
-
-
-File: info-stnd.info, Node: Printing Nodes, Next: Miscellaneous Commands, Prev: Window Commands, Up: Top
-
-Printing Out Nodes
-******************
-
-You may wish to print out the contents of a node as a quick reference
-document for later use. Info provides you with a command for doing
-this. In general, we recommend that you use TeX to format the document
-and print sections of it, by running `tex' on the Texinfo source file.
-
-`M-x print-node'
- Pipe the contents of the current node through the command in the
- environment variable `INFO_PRINT_COMMAND'. If the variable does
- not exist, the node is simply piped to `lpr'.
-
-
-File: info-stnd.info, Node: Miscellaneous Commands, Next: Variables, Prev: Printing Nodes, Up: Top
-
-Miscellaneous Commands
-**********************
-
-GNU Info contains several commands which self-document GNU Info:
-
-`M-x describe-command'
- Read the name of an Info command in the echo area and then display
- a brief description of what that command does.
-
-`M-x describe-key'
- Read a key sequence in the echo area, and then display the name and
- documentation of the Info command that the key sequence invokes.
-
-`M-x describe-variable'
- Read the name of a variable in the echo area and then display a
- brief description of what the variable affects.
-
-`M-x where-is'
- Read the name of an Info command in the echo area, and then display
- a key sequence which can be typed in order to invoke that command.
-
-`C-h' (`get-help-window')
-`?'
- Create (or Move into) the window displaying `*Help*', and place a
- node containing a quick reference card into it. This window
- displays the most concise information about GNU Info available.
-
-`h' (`get-info-help-node')
- Try hard to visit the node `(info)Help'. The Info file
- `info.texi' distributed with GNU Info contains this node. Of
- course, the file must first be processed with `makeinfo', and then
- placed into the location of your Info directory.
-
-Here are the commands for creating a numeric argument:
-
-`C-u' (`universal-argument')
- Start (or multiply by 4) the current numeric argument. `C-u' is a
- good way to give a small numeric argument to cursor movement or
- scrolling commands; `C-u C-v' scrolls the screen 4 lines, while
- `C-u C-u C-n' moves the cursor down 16 lines.
-
-`M-1' (`add-digit-to-numeric-arg')
-`M-2' ... `M-9'
- Add the digit value of the invoking key to the current numeric
- argument. Once Info is reading a numeric argument, you may just
- type the digits of the argument, without the Meta prefix. For
- example, you might give `C-l' a numeric argument of 32 by typing:
-
- `C-u 3 2 C-l'
-
- or
-
- `M-3 2 C-l'
-
-`C-g' is used to abort the reading of a multi-character key sequence,
-to cancel lengthy operations (such as multi-file searches) and to
-cancel reading input in the echo area.
-
-`C-g' (`abort-key')
- Cancel current operation.
-
-The `q' command of Info simply quits running Info.
-
-`q' (`quit')
- Exit GNU Info.
-
-If the operating system tells GNU Info that the screen is 60 lines tall,
-and it is actually only 40 lines tall, here is a way to tell Info that
-the operating system is correct.
-
-`M-x set-screen-height'
- Read a height value in the echo area and set the height of the
- displayed screen to that value.
-
-Finally, Info provides a convenient way to display footnotes which might
-be associated with the current node that you are viewing:
-
-`ESC C-f' (`show-footnotes')
- Show the footnotes (if any) associated with the current node in
- another window. You can have Info automatically display the
- footnotes associated with a node when the node is selected by
- setting the variable `automatic-footnotes'. *Note
- `automatic-footnotes': Variables.
-
-
-File: info-stnd.info, Node: Variables, Next: GNU Info Global Index, Prev: Miscellaneous Commands, Up: Top
-
-Manipulating Variables
-**********************
-
-GNU Info contains several "variables" whose values are looked at by
-various Info commands. You can change the values of these variables,
-and thus change the behavior of Info to more closely match your
-environment and Info file reading manner.
-
-`M-x set-variable'
- Read the name of a variable, and the value for it, in the echo
- area and then set the variable to that value. Completion is
- available when reading the variable name; often, completion is
- available when reading the value to give to the variable, but that
- depends on the variable itself. If a variable does *not* supply
- multiple choices to complete over, it expects a numeric value.
-
-`M-x describe-variable'
- Read the name of a variable in the echo area and then display a
- brief description of what the variable affects.
-
-Here is a list of the variables that you can set in Info.
-
-`automatic-footnotes'
- When set to `On', footnotes appear and disappear automatically.
- This variable is `On' by default. When a node is selected, a
- window containing the footnotes which appear in that node is
- created, and the footnotes are displayed within the new window.
- The window that Info creates to contain the footnotes is called
- `*Footnotes*'. If a node is selected which contains no footnotes,
- and a `*Footnotes*' window is on the screen, the `*Footnotes*'
- window is deleted. Footnote windows created in this fashion are
- not automatically tiled so that they can use as little of the
- display as is possible.
-
-`automatic-tiling'
- When set to `On', creating or deleting a window resizes other
- windows. This variable is `Off' by default. Normally, typing
- `C-x 2' divides the current window into two equal parts. When
- `automatic-tiling' is set to `On', all of the windows are resized
- automatically, keeping an equal number of lines visible in each
- window. There are exceptions to the automatic tiling;
- specifically, the windows `*Completions*' and `*Footnotes*' are
- *not* resized through automatic tiling; they remain their original
- size.
-
-`visible-bell'
- When set to `On', GNU Info attempts to flash the screen instead of
- ringing the bell. This variable is `Off' by default. Of course,
- Info can only flash the screen if the terminal allows it; in the
- case that the terminal does not allow it, the setting of this
- variable has no effect. However, you can make Info perform
- quietly by setting the `errors-ring-bell' variable to `Off'.
-
-`errors-ring-bell'
- When set to `On', errors cause the bell to ring. The default
- setting of this variable is `On'.
-
-`gc-compressed-files'
- When set to `On', Info garbage collects files which had to be
- uncompressed. The default value of this variable is `Off'.
- Whenever a node is visited in Info, the Info file containing that
- node is read into core, and Info reads information about the tags
- and nodes contained in that file. Once the tags information is
- read by Info, it is never forgotten. However, the actual text of
- the nodes does not need to remain in core unless a particular Info
- window needs it. For non-compressed files, the text of the nodes
- does not remain in core when it is no longer in use. But
- de-compressing a file can be a time consuming operation, and so
- Info tries hard not to do it twice. `gc-compressed-files' tells
- Info it is okay to garbage collect the text of the nodes of a file
- which was compressed on disk.
-
-`show-index-match'
- When set to `On', the portion of the matched search string is
- highlighted in the message which explains where the matched search
- string was found. The default value of this variable is `On'.
- When Info displays the location where an index match was found,
- (*note `next-index-match': Searching Commands.), the portion of the
- string that you had typed is highlighted by displaying it in the
- inverse case from its surrounding characters.
-
-`scroll-behavior'
- Control what happens when forward scrolling is requested at the
- end of a node, or when backward scrolling is requested at the
- beginning of a node. The default value for this variable is
- `Continuous'. There are three possible values for this variable:
-
- `Continuous'
- Try to get the first item in this node's menu, or failing
- that, the `Next' node, or failing that, the `Next' of the
- `Up'. This behavior is identical to using the `]'
- (`global-next-node') and `[' (`global-prev-node') commands.
-
- `Next Only'
- Only try to get the `Next' node.
-
- `Page Only'
- Simply give up, changing nothing. If `scroll-behavior' is
- `Page Only', no scrolling command can change the node that is
- being viewed.
-
-`scroll-step'
- The number of lines to scroll when the cursor moves out of the
- window. Scrolling happens automatically if the cursor has moved
- out of the visible portion of the node text when it is time to
- display. Usually the scrolling is done so as to put the cursor on
- the center line of the current window. However, if the variable
- `scroll-step' has a nonzero value, Info attempts to scroll the
- node text by that many lines; if that is enough to bring the
- cursor back into the window, that is what is done. The default
- value of this variable is 0, thus placing the cursor (and the text
- it is attached to) in the center of the window. Setting this
- variable to 1 causes a kind of "smooth scrolling" which some
- people prefer.
-
-`ISO-Latin'
- When set to `On', Info accepts and displays ISO Latin characters.
- By default, Info assumes an ASCII character set. `ISO-Latin' tells
- Info that it is running in an environment where the European
- standard character set is in use, and allows you to input such
- characters to Info, as well as display them.
-
-
-File: info-stnd.info, Node: GNU Info Global Index, Prev: Variables, Up: Top
-
-Global Index
-************
-
-* Menu:
-
-* ,: Searching Commands.
-* 0, in Info windows: Selecting Xrefs.
-* 1 ... 9, in Info windows: Selecting Xrefs.
-* 1 ... 9, in Info windows: Selecting Xrefs.
-* <: Node Commands.
-* >: Node Commands.
-* ?, in Info windows: Miscellaneous Commands.
-* ?, in the echo area: The Echo Area.
-* -subnodes, command line option: Options.
-* abort-key: Miscellaneous Commands.
-* add-digit-to-numeric-arg: Miscellaneous Commands.
-* arguments, command line: Options.
-* automatic-footnotes: Variables.
-* automatic-tiling: Variables.
-* b, in Info windows: Cursor Commands.
-* backward-char: Cursor Commands.
-* backward-word: Cursor Commands.
-* beginning-of-line: Cursor Commands.
-* beginning-of-node: Cursor Commands.
-* C-a, in Info windows: Cursor Commands.
-* C-a, in the echo area: The Echo Area.
-* C-b, in Info windows: Cursor Commands.
-* C-b, in the echo area: The Echo Area.
-* C-d, in the echo area: The Echo Area.
-* C-e, in Info windows: Cursor Commands.
-* C-e, in the echo area: The Echo Area.
-* C-f, in Info windows: Cursor Commands.
-* C-f, in the echo area: The Echo Area.
-* C-g, in Info windows: Miscellaneous Commands.
-* C-g, in the echo area: The Echo Area.
-* C-h: Miscellaneous Commands.
-* C-k, in the echo area: The Echo Area.
-* C-l: Scrolling Commands.
-* C-n: Cursor Commands.
-* C-p: Cursor Commands.
-* C-q, in the echo area: The Echo Area.
-* C-r: Searching Commands.
-* C-s: Searching Commands.
-* C-t, in the echo area: The Echo Area.
-* C-u: Miscellaneous Commands.
-* C-v: Scrolling Commands.
-* C-w: Scrolling Commands.
-* C-x 0: Basic Windows.
-* C-x 1: Basic Windows.
-* C-x 2: Basic Windows.
-* C-x b: Node Commands.
-* C-x C-b: Node Commands.
-* C-x C-f: Node Commands.
-* C-x DEL, in the echo area: The Echo Area.
-* C-x k: Node Commands.
-* C-x o: Basic Windows.
-* C-x t: Basic Windows.
-* C-x ^: Basic Windows.
-* C-y, in the echo area: The Echo Area.
-* cancelling the current operation: Miscellaneous Commands.
-* cancelling typeahead: Miscellaneous Commands.
-* command line options: Options.
-* commands, describing: Miscellaneous Commands.
-* cursor, moving: Cursor Commands.
-* d: Node Commands.
-* DEL, in Info windows: Scrolling Commands.
-* DEL, in the echo area: The Echo Area.
-* delete-window: Basic Windows.
-* describe-command: Miscellaneous Commands.
-* describe-key: Miscellaneous Commands.
-* describe-variable: Variables.
-* dir-node: Node Commands.
-* directory path: Options.
-* echo area: The Echo Area.
-* echo-area-abort: The Echo Area.
-* echo-area-backward: The Echo Area.
-* echo-area-backward-kill-line: The Echo Area.
-* echo-area-backward-kill-word: The Echo Area.
-* echo-area-backward-word: The Echo Area.
-* echo-area-beg-of-line: The Echo Area.
-* echo-area-complete: The Echo Area.
-* echo-area-delete: The Echo Area.
-* echo-area-end-of-line: The Echo Area.
-* echo-area-forward: The Echo Area.
-* echo-area-forward-word: The Echo Area.
-* echo-area-insert: The Echo Area.
-* echo-area-kill-line: The Echo Area.
-* echo-area-kill-word: The Echo Area.
-* echo-area-newline: The Echo Area.
-* echo-area-possible-completions: The Echo Area.
-* echo-area-quoted-insert: The Echo Area.
-* echo-area-rubout: The Echo Area.
-* echo-area-scroll-completions-window: The Echo Area.
-* echo-area-tab-insert: The Echo Area.
-* echo-area-transpose-chars: The Echo Area.
-* echo-area-yank: The Echo Area.
-* echo-area-yank-pop: The Echo Area.
-* end-of-line: Cursor Commands.
-* end-of-node: Cursor Commands.
-* errors-ring-bell: Variables.
-* ESC C-f: Miscellaneous Commands.
-* ESC C-v, in Info windows: Basic Windows.
-* ESC C-v, in the echo area: The Echo Area.
-* f: Selecting Xrefs.
-* file, outputting to: Options.
-* find-menu: Selecting Xrefs.
-* first-node: Node Commands.
-* footnotes, displaying: Miscellaneous Commands.
-* forward-char: Cursor Commands.
-* forward-word: Cursor Commands.
-* functions, describing: Miscellaneous Commands.
-* g: Node Commands.
-* gc-compressed-files: Variables.
-* get-help-window: Miscellaneous Commands.
-* get-info-help-node: Miscellaneous Commands.
-* global-next-node: Node Commands.
-* global-prev-node: Node Commands.
-* goto-node: Node Commands.
-* grow-window: Basic Windows.
-* h: Miscellaneous Commands.
-* history-node: Node Commands.
-* i: Searching Commands.
-* index-search: Searching Commands.
-* Info file, selecting: Options.
-* INFO_PRINT_COMMAND, environment variable: Printing Nodes.
-* isearch-backward: Searching Commands.
-* isearch-forward: Searching Commands.
-* ISO Latin characters: Variables.
-* ISO-Latin: Variables.
-* keep-one-window: Basic Windows.
-* keys, describing: Miscellaneous Commands.
-* kill-node: Node Commands.
-* l: Node Commands.
-* last-menu-item: Selecting Xrefs.
-* last-node: Node Commands.
-* list-visited-nodes: Node Commands.
-* m: Selecting Xrefs.
-* M-1 ... M-9: Miscellaneous Commands.
-* M-<: Cursor Commands.
-* M->: Cursor Commands.
-* M-b, in Info windows: Cursor Commands.
-* M-b, in the echo area: The Echo Area.
-* M-d, in the echo area: The Echo Area.
-* M-DEL, in the echo area: The Echo Area.
-* M-f, in Info windows: Cursor Commands.
-* M-f, in the echo area: The Echo Area.
-* M-r: Cursor Commands.
-* M-TAB, in Info windows: Selecting Xrefs.
-* M-TAB, in the echo area: The Echo Area.
-* M-v: Scrolling Commands.
-* M-y, in the echo area: The Echo Area.
-* menu, following: Options.
-* menu-digit: Selecting Xrefs.
-* menu-item: Selecting Xrefs.
-* move-to-next-xref: Selecting Xrefs.
-* move-to-prev-xref: Selecting Xrefs.
-* move-to-window-line: Cursor Commands.
-* n: Node Commands.
-* next-index-match: Searching Commands.
-* next-line: Cursor Commands.
-* next-node: Node Commands.
-* next-window: Basic Windows.
-* node, selecting: Options.
-* nodes, selection of: Node Commands.
-* numeric arguments: Miscellaneous Commands.
-* outputting to a file: Options.
-* p: Node Commands.
-* prev-line: Cursor Commands.
-* prev-node: Node Commands.
-* prev-window: Basic Windows.
-* print-node: Printing Nodes.
-* printing: Printing Nodes.
-* printing characters, in the echo area: The Echo Area.
-* q: Miscellaneous Commands.
-* quit: Miscellaneous Commands.
-* quitting: Miscellaneous Commands.
-* r: Selecting Xrefs.
-* redraw-display: Scrolling Commands.
-* RET, in Info windows: Selecting Xrefs.
-* RET, in the echo area: The Echo Area.
-* s: Searching Commands.
-* screen, changing the height of: Miscellaneous Commands.
-* scroll-backward: Scrolling Commands.
-* scroll-behavior: Variables.
-* scroll-forward: Scrolling Commands.
-* scroll-other-window: Basic Windows.
-* scroll-step: Variables.
-* scrolling: Scrolling Commands.
-* scrolling through node structure: Scrolling Commands.
-* search: Searching Commands.
-* searching: Searching Commands.
-* select-reference-this-line: Selecting Xrefs.
-* select-visited-node: Node Commands.
-* set-screen-height: Miscellaneous Commands.
-* set-variable: Variables.
-* show-footnotes: Miscellaneous Commands.
-* show-index-match: Variables.
-* SPC, in Info windows: Scrolling Commands.
-* SPC, in the echo area: The Echo Area.
-* split-window: Basic Windows.
-* t: Node Commands.
-* TAB, in Info windows: Selecting Xrefs.
-* TAB, in the echo area: The Echo Area.
-* tile-windows: Basic Windows.
-* tiling: Basic Windows.
-* toggle-wrap: Scrolling Commands.
-* top-node: Node Commands.
-* u: Node Commands.
-* universal-argument: Miscellaneous Commands.
-* up-node: Node Commands.
-* variables, describing: Variables.
-* variables, setting: Variables.
-* version information: Options.
-* view-file: Node Commands.
-* visible-bell: Variables.
-* where-is: Miscellaneous Commands.
-* windows, creating: Basic Windows.
-* windows, deleting: Basic Windows.
-* windows, manipulating: Window Commands.
-* windows, selecting: Basic Windows.
-* xref-item: Selecting Xrefs.
-* [: Node Commands.
-* ]: Node Commands.
-
-
-
-Tag Table:
-Node: Top1263
-Node: What is Info2593
-Node: Options3127
-Node: Options-Footnotes6157
-Node: Cursor Commands6411
-Node: Cursor Commands-Footnotes8906
-Node: Scrolling Commands9136
-Node: Node Commands11600
-Node: Searching Commands15563
-Node: Xref Commands17151
-Node: Parts of an Xref17766
-Node: Selecting Xrefs19711
-Node: Window Commands21298
-Node: The Mode Line22233
-Node: Basic Windows23872
-Node: The Echo Area26374
-Node: Printing Nodes30531
-Node: Miscellaneous Commands31174
-Node: Variables34345
-Node: GNU Info Global Index40515
-
-End Tag Table
diff --git a/gnu/usr.bin/texinfo/info/info.info b/gnu/usr.bin/texinfo/info/info.info
deleted file mode 100644
index b6fd850..0000000
--- a/gnu/usr.bin/texinfo/info/info.info
+++ /dev/null
@@ -1,777 +0,0 @@
-This is Info file info.info, produced by Makeinfo-1.55 from the input
-file info.texi.
-
- This file describes how to use Info, the on-line, menu-driven GNU
-documentation system.
-
- Copyright (C) 1989, 1992 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 and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-
-File: info.info, Node: Top, Next: Getting Started, Prev: (dir), Up: (dir)
-
-Info: An Introduction
-*********************
-
- Info is a program for reading documentation, which you are using now.
-
- To learn how to use Info, type the command `h'. It brings you to a
-programmed instruction sequence.
-
- To learn advanced Info commands, type `n' twice. This brings you to
-`Info for Experts', skipping over the . `Getting Started' chapter.
-
-* Menu:
-
-* Getting Started::
-* Advanced Info::
-* Create an Info File::
-
-
-File: info.info, Node: Getting Started, Next: Advanced Info, Prev: Top, Up: Top
-
-Getting Started
-***************
-
- This first part of the Info manual describes how to get around inside
-of Info. The second part of the manual describes various advanced Info
-commands, and how to write an Info as distinct from a Texinfo file.
-The third part is about how to generate Info files from Texinfo files.
-
-* Menu:
-
-* Help-Small-Screen:: Starting Info on a Small Screen
-* Help:: How to use Info
-* Help-P:: Returning to the Previous node
-* Help-^L:: The Space, Rubout, B and ^L commands.
-* Help-M:: Menus
-* Help-Adv:: Some advanced Info commands
-* Help-Q:: Quitting Info
-
-
-File: info.info, Node: Help-Small-Screen, Next: Help, Up: Getting Started
-
-Starting Info on a Small Screen
-===============================
-
- Since your terminal has an unusually small number of lines on its
-screen, it is necessary to give you special advice at the beginning.
-
- If you see the text `--All----' at near the bottom right corner of
-the screen, it means the entire text you are looking at fits on the
-screen. If you see `--Top----' instead, it means that there is more
-text below that does not fit. To move forward through the text and see
-another screen full, press the Space bar, SPC. To move back up, press
-the key labeled `Rubout' or `Delete' or DEL.
-
- Here are 40 lines of junk, so you can try SPC and DEL and see what
-they do. At the end are instructions of what you should do next.
-
- This is line 17
-This is line 18
-This is line 19
-This is line 20
-This is line 21
-This is line 22
-This is line 23
-This is line 24
-This is line 25
-This is line 26
-This is line 27
-This is line 28
-This is line 29
-This is line 30
-This is line 31
-This is line 32
-This is line 33
-This is line 34
-This is line 35
-This is line 36
-This is line 37
-This is line 38
-This is line 39
-This is line 40
-This is line 41
-This is line 42
-This is line 43
-This is line 44
-This is line 45
-This is line 46
-This is line 47
-This is line 48
-This is line 49
-This is line 50
-This is line 51
-This is line 52
-This is line 53
-This is line 54
-This is line 55
-This is line 56
-If you have managed to get here, go back to the beginning with DEL, and
-come back here again, then you understand SPC and DEL. So now type an
-`n'--just one character; do not type the quotes and do not type the
-Return key, RET, afterward--to get to the normal start of the course.
-
-
-File: info.info, Node: Help, Next: Help-P, Prev: Help-Small-Screen, Up: Getting Started
-
-How to use Info
-===============
-
- You are talking to the program Info, for reading documentation.
-
- Right now you are looking at one "Node" of Information. A node
-contains text describing a specific topic at a specific level of
-detail. This node's topic is "how to use Info".
-
- The top line of a node is its "header". This node's header (look at
-it now) says that it is the node named `Help' in the file `info'. It
-says that the `Next' node after this one is the node called `Help-P'.
-An advanced Info command lets you go to any node whose name you know.
-
- Besides a `Next', a node can have a `Previous' or an `Up'. This
-node has a `Previous' but no `Up', as you can see.
-
- Now it is time to move on to the `Next' node, named `Help-P'.
-
- >> Type `n' to move there. Type just one character; do not type
-the quotes and do not type a RET afterward.
-
- `>>' in the margin means it is really time to try a command.
-
-
-File: info.info, Node: Help-P, Next: Help-^L, Prev: Help, Up: Getting Started
-
-Returning to the Previous node
-==============================
-
- This node is called `Help-P'. The `Previous' node, as you see, is
-`Help', which is the one you just came from using the `n' command.
-Another `n' command now would take you to the next node, `Help-^L'.
-
- >> But do not do that yet. First, try the `p' command, which takes
- you to the `Previous' node. When you get there, you can do an `n'
-again to return here.
-
- This all probably seems insultingly simple so far, but *do not* be
-led into skimming. Things will get more complicated soon. Also, do
-not try a new command until you are told it is time to. Otherwise, you
-may make Info skip past an important warning that was coming up.
-
- >> Now do an `n' to get to the node `Help-^L' and learn more.
-
-
-File: info.info, Node: Help-^L, Next: Help-M, Prev: Help-P, Up: Getting Started
-
-The Space, Rubout, B and ^L commands.
-=====================================
-
- This node's header tells you that you are now at node `Help-^L', and
-that `p' would get you back to `Help-P'. The node's title is
-underlined; it says what the node is about (most nodes have titles).
-
- This is a big node and it does not all fit on your display screen.
-You can tell that there is more that is not visible because you can see
-the string `--Top-----' rather than `--All----' near the bottom right
-corner of the screen.
-
- The SPC, DEL and `b' commands exist to allow you to "move around" in
-a node that does not all fit on the screen at once. SPC moves forward,
-to show what was below the bottom of the screen. DEL moves backward,
-to show what was above the top of the screen (there is not anything
-above the top until you have typed some spaces).
-
- >> Now try typing a SPC (afterward, type a DEL to return here).
-
- When you type the SPC, the two lines that were at the bottom of the
-screen appear at the top, followed by more lines. DEL takes the two
-lines from the top and moves them to the bottom, *usually*, but if
-there are not a full screen's worth of lines above them they may not
-make it all the way to the bottom.
-
- If you type a SPC when there is no more to see, it rings the bell
-and otherwise does nothing. The same goes for a DEL when the header of
-the node is visible.
-
- If your screen is ever garbaged, you can tell Info to print it out
-again by typing `C-l' (`Control-L', that is--hold down "Control" and
-type an L or `l').
-
- >> Type `C-l' now.
-
- To move back to the beginning of the node you are on, you can type a
-lot of DELs. You can also type simply `b' for beginning.
-
- >> Try that now. (I have put in enough verbiage to make sure you are
- not on the first screenful now). Then come back, typing SPC
-several times.
-
- You have just learned a considerable number of commands. If you
-want to use one but have trouble remembering which, you should type a ?
-which prints out a brief list of commands. When you are finished
-looking at the list, make it go away by typing a SPC.
-
- >> Type a ? now. After it finishes, type a SPC.
-
- (If you are using the standalone Info reader, type `l' to return
-here.)
-
- From now on, you will encounter large nodes without warning, and
-will be expected to know how to use SPC and DEL to move around in them
-without being told. Since not all terminals have the same size screen,
-it would be impossible to warn you anyway.
-
- >> Now type `n' to see the description of the `m' command.
-
-
-File: info.info, Node: Help-M, Next: Help-Adv, Prev: Help-^L, Up: Getting Started
-
-Menus
-=====
-
- Menus and the `m' command
-
- With only the `n' and `p' commands for moving between nodes, nodes
-are restricted to a linear sequence. Menus allow a branching
-structure. A menu is a list of other nodes you can move to. It is
-actually just part of the text of the node formatted specially so that
-Info can interpret it. The beginning of a menu is always identified by
-a line which starts with `* Menu:'. A node contains a menu if and only
-if it has a line in it which starts that way. The only menu you can
-use at any moment is the one in the node you are in. To use a menu in
-any other node, you must move to that node first.
-
- After the start of the menu, each line that starts with a `*'
-identifies one subtopic. The line usually contains a brief name for
-the subtopic (followed by a `:'), the name of the node that talks about
-that subtopic, and optionally some further description of the subtopic.
-Lines in the menu that do not start with a `*' have no special
-meaning--they are only for the human reader's benefit and do not define
-additional subtopics. Here is an example:
-
- * Foo: FOO's Node This tells about FOO
-
- The subtopic name is Foo, and the node describing it is `FOO's Node'.
-The rest of the line is just for the reader's Information. [[ But this
-line is not a real menu item, simply because there is no line above it
-which starts with `* Menu:'.]]
-
- When you use a menu to go to another node (in a way that will be
-described soon), what you specify is the subtopic name, the first thing
-in the menu line. Info uses it to find the menu line, extracts the
-node name from it, and goes to that node. The reason that there is
-both a subtopic name and a node name is that the node name must be
-meaningful to the computer and may therefore have to be ugly looking.
-The subtopic name can be chosen just to be convenient for the user to
-specify. Often the node name is convenient for the user to specify and
-so both it and the subtopic name are the same. There is an
-abbreviation for this:
-
- * Foo:: This tells about FOO
-
-This means that the subtopic name and node name are the same; they are
-both `Foo'.
-
- >> Now use SPCs to find the menu in this node, then come back to
-the front with a `b'. As you see, a menu is actually visible in its
-node. If you cannot find a menu in a node by looking at it, then
-the node does not have a menu and the `m' command is not available.
-
- The command to go to one of the subnodes is `m'--but *do not do it
-yet!* Before you use `m', you must understand the difference between
-commands and arguments. So far, you have learned several commands that
-do not need arguments. When you type one, Info processes it and is
-instantly ready for another command. The `m' command is different: it
-is incomplete without the "name of the subtopic". Once you have typed
-`m', Info tries to read the subtopic name.
-
- Now look for the line containing many dashes near the bottom of the
-screen. There is one more line beneath that one, but usually it is
-blank If it is empty, Info is ready for a command, such as `n' or `b'
-or SPC or `m'. If that line contains text ending in a colon, it mean
-Info is trying to read the "argument" to a command. At such times,
-commands do not work, because Info tries to use them as the argument.
-You must either type the argument and finish the command you started,
-or type `Control-g' to cancel the command. When you have done one of
-those things, the line becomes blank again.
-
- The command to go to a subnode via a menu is `m'. After you type
-the `m', the line at the bottom of the screen says `Menu item: '. You
-must then type the name of the subtopic you want, and end it with a RET.
-
- You can abbreviate the subtopic name. If the abbreviation is not
-unique, the first matching subtopic is chosen. Some menus put the
-shortest possible abbreviation for each subtopic name in capital
-letters, so you can see how much you need to type. It does not matter
-whether you use upper case or lower case when you type the subtopic.
-You should not put any spaces at the end, or inside of the item name,
-except for one space where a space appears in the item in the menu.
-
- Here is a menu to give you a chance to practice.
-
- * Menu: The menu starts here.
-
- This menu givs you three ways of going to one place, Help-FOO.
-
- * Foo: Help-FOO. A node you can visit for fun.
-* Bar: Help-FOO. Strange! two ways to get to the same place.
-* Help-FOO:: And yet another!
->> Now type just an `m' and see what happens:
-
- Now you are "inside" an `m' command. Commands cannot be used now;
-the next thing you will type must be the name of a subtopic.
-
- You can change your mind about doing the `m' by typing Control-g.
-
- >> Try that now; notice the bottom line clear.
-
- >> Then type another `m'.
-
- >> Now type `BAR' item name. Do not type RET yet.
-
- While you are typing the item name, you can use the DEL character to
-cancel one character at a time if you make a mistake.
-
- >> Type one to cancel the `R'. You could type another `R' to
-replace it. You do not have to, since `BA' is a valid abbreviation.
-
- >> Now you are ready to go. Type a RET.
-
- After visiting Help-FOO, you should return here.
-
- >> Type `n' to see more commands.
-
- Here is another way to get to Help-FOO, a menu. You can ignore this
-if you want, or else try it (but then please come back to here).
-
-* Menu:
-
-* Help-FOO::
-
-
-File: info.info, Node: Help-FOO, Up: Help-M
-
-The `u' command
----------------
-
- Congratulations! This is the node `Help-FOO'. Unlike the other
-nodes you have seen, this one has an `Up': `Help-M', the node you just
-came from via the `m' command. This is the usual convention--the nodes
-you reach from a menu have `Up' nodes that lead back to the menu.
-Menus move Down in the tree, and `Up' moves Up. `Previous', on the
-other hand, is usually used to "stay on the same level but go backwards"
-
- You can go back to the node `Help-M' by typing the command `u' for
-"Up". That puts you at the *front* of the node--to get back to where
-you were reading you have to type some SPCs.
-
- >> Now type `u' to move back up to `Help-M'.
-
-
-File: info.info, Node: Help-Adv, Next: Help-Q, Prev: Help-M, Up: Getting Started
-
-Some advanced Info commands
-===========================
-
- The course is almost over, so please stick with it to the end.
-
- If you have been moving around to different nodes and wish to
-retrace your steps, the `l' command (`l' for "last") will do that, one
-node at a time. If you have been following directions, an `l' command
-now will get you back to `Help-M'. Another `l' command would undo the
-`u' and get you back to `Help-FOO'. Another `l' would undo the `m' and
-get you back to `Help-M'.
-
- >> Try typing three `l''s, pausing in between to see what each
-`l' does.
-
- Then follow directions again and you will end up back here.
-
- Note the difference between `l' and `p': `l' moves to where *you*
-last were, whereas `p' always moves to the node which the header says
-is the `Previous' node (from this node, to `Help-M').
-
- The `d' command gets you instantly to the Directory node. This
-node, which is the first one you saw when you entered Info, has a menu
-which leads (directly, or indirectly through other menus), to all the
-nodes that exist.
-
- >> Try doing a `d', then do an `l' to return here (yes, *do*
-return).
-
- Sometimes, in Info documentation, you will see a cross reference.
-Cross references look like this: *Note Cross: Help-Cross. That is a
-real, live cross reference which is named `Cross' and points at the
-node named `Help-Cross'.
-
- If you wish to follow a cross reference, you must use the `f'
-command. The `f' must be followed by the cross reference name (in this
-case, `Cross'). You can use DEL to edit the name, and if you change
-your mind about following any reference you can use `Control-g' to
-cancel the command.
-
- Completion is available in the `f' command; you can complete among
-all the cross reference names in the current node.
-
- >> Type `f', followed by `Cross', and a RET.
-
- To get a list of all the cross references in the current node, you
-can type `?' after an `f'. The `f' continues to await a cross
-reference name even after printing the list, so if you do not actually
-want to follow a reference you should type a `Control-g' to cancel the
-`f'.
-
- >> Type "f?" to get a list of the footnotes in this node. Then type
-a `Control-g' and see how the `f' gives up.
-
- >> Now type `n' to see the last node of the course.
-
-
-File: info.info, Node: Help-Cross, Up: Help-Adv
-
-The node reached by the cross reference in Info
------------------------------------------------
-
- This is the node reached by the cross reference named `Cross'.
-
- While this node is specifically intended to be reached by a cross
-reference, most cross references lead to nodes that "belong" someplace
-else far away in the structure of Info. So you cannot expect the
-footnote to have a `Next', `Previous' or `Up' pointing back to where
-you came from. In general, the `l' (el) command is the only way to get
-back there.
-
- >> Type `l' to return to the node where the cross reference was.
-
-
-File: info.info, Node: Help-Q, Prev: Help-Adv, Up: Getting Started
-
-Quitting Info
-=============
-
- To get out of Info, back to what you were doing before, type `q' for
-"Quit".
-
- This is the end of the course on using Info. There are some other
-commands that are not essential or are meant for experienced users;
-they are useful, and you can find them by looking in the directory for
-documentation on Info. Finding them will be a good exercise in using
-Info in the usual manner.
-
- >> Type `d' to go to the Info directory node; then type `mInfo'
-and RET, to get to the node about Info and see what other help is
-available.
-
-
-File: info.info, Node: Advanced Info, Next: Create an Info File, Prev: Getting Started, Up: Top
-
-Info for Experts
-****************
-
- This chapter describes various advanced Info commands, and how to
-write an Info as distinct from a Texinfo file. (However, in most
-cases, writing a Texinfo file is better, since you can use it *both* to
-generate an Info file and to make a printed manual. *Note Overview of
-Texinfo: (texinfo)Top.)
-
-* Menu:
-
-* Expert:: Advanced Info commands: g, s, e, and 1 - 5.
-* Add:: Describes how to add new nodes to the hierarchy.
- Also tells what nodes look like.
-* Menus:: How to add to or create menus in Info nodes.
-* Cross-refs:: How to add cross-references to Info nodes.
-* Tags:: How to make tag tables for Info files.
-* Checking:: Checking an Info File
-
-
-File: info.info, Node: Expert, Next: Add, Up: Advanced Info
-
-Advanced Info Commands
-======================
-
- `g', `s', `1', - `5', and `e'
-
- If you know a node's name, you can go there by typing `g', the name,
-and RET. Thus, `gTopRET' would go to the node called `Top' in this
-file (its directory node). `gExpertRET' would come back here.
-
- Unlike `m', `g' does not allow the use of abbreviations.
-
- To go to a node in another file, you can include the filename in the
-node name by putting it at the front, in parentheses. Thus,
-`g(dir)TopRET' would go to the Info Directory node, which is node `Top'
-in the file `dir'.
-
- The node name `*' specifies the whole file. So you can look at all
-of the current file by typing `g*RET' or all of any other file with
-`g(FILENAME)RET'.
-
- The `s' command allows you to search a whole file for a string. It
-switches to the next node if and when that is necessary. You type `s'
-followed by the string to search for, terminated by RET. To search for
-the same string again, just `s' followed by RET will do. The file's
-nodes are scanned in the order they are in in the file, which has no
-necessary relationship to the order that they may be in in the tree
-structure of menus and `next' pointers. But normally the two orders
-are not very different. In any case, you can always do a `b' to find
-out what node you have reached, if the header is not visible (this can
-happen, because `s' puts your cursor at the occurrence of the string,
-not at the beginning of the node).
-
- If you grudge the system each character of type-in it requires, you
-might like to use the commands `1', `2', `3', `4', and `5'. They are
-short for the `m' command together with an argument. "1", "2", "3",
-"4", and "5". `1' goes through the first item in the current node's
-menu; `2' goes through the second item, etc. Note that numbers larger
-than 5 are not allowed. If the item you want is that far down, you are
-better off using an abbreviation for its name than counting.
-
- The Info command `e' changes from Info mode to an ordinary Emacs
-editing mode, so that you can edit the text of the current node. Type
-`C-c C-c' to switch back to Info. The `e' command is allowed only if
-the variable `Info-enable-edit' is non-`nil'.
-
-
-File: info.info, Node: Add, Next: Menus, Prev: Expert, Up: Advanced Info
-
-Adding a new node to Info
-=========================
-
- To add a new topic to the list in the directory, you must:
-
- 1. Create a node, in some file, to document that topic.
-
- 2. Put that topic in the menu in the directory. *Note Menu: Menus.
-
- The new node can live in an existing documentation file, or in a new
-one. It must have a ^_ character before it (invisible to the user;
-this node has one but you cannot see it), and it ends with either a ^_,
-a ^L, or the end of file. Note: If you put in a ^L to end a new node,
-be sure that there is a ^_ after it to start the next one, since ^L
-cannot *start* a node. Also, a nicer way to make a node boundary be a
-page boundary as well is to put a ^L *right after* the ^_.
-
- The ^_ starting a node must be followed by a newline or a ^L
-newline, after which comes the node's header line. The header line
-must give the node's name (by which Info finds it), and state the names
-of the `Next', `Previous', and `Up' nodes (if there are any). As you
-can see, this node's `Up' node is the node `Top', which points at all
-the documentation for Info. The `Next' node is `Menus'.
-
- The keywords "Node", "Previous", "Up" and "Next", may appear in any
-order, anywhere in the header line, but the recommended order is the
-one in this sentence. Each keyword must be followed by a colon, spaces
-and tabs, and then the appropriate name. The name may be terminated
-with a tab, a comma, or a newline. A space does not end it; node names
-may contain spaces. The case of letters in the names is insignificant.
-
- A node name has two forms. A node in the current file is named by
-what appears after the `Node: ' in that node's first line. For
-example, this node's name is `Add'. A node in another file is named by
-`(FILENAME)NODE-WITHIN-FILE', as in `(info)Add' for this node. If the
-file name is relative, it is taken starting from the standard Info file
-directory of your site. The name `(FILENAME)Top' can be abbreviated to
-just `(FILENAME)'. By convention, the name `Top' is used for the
-"highest" node in any single file--the node whose `Up' points out of
-the file. The Directory node is `(dir)'. The `Top' node of a document
-file listed in the Directory should have an `Up: (dir)' in it.
-
- The node name `*' is special: it refers to the entire file. Thus,
-`g*' shows you the whole current file. The use of the node `*' is to
-make it possible to make old-fashioned, unstructured files into nodes
-of the tree.
-
- The `Node:' name, in which a node states its own name, must not
-contain a filename, since Info when searching for a node does not
-expect one to be there. The `Next', `Previous' and `Up' names may
-contain them. In this node, since the `Up' node is in the same file,
-it was not necessary to use one.
-
- Note that the nodes in this file have a file name in the header
-line. The file names are ignored by Info, but they serve as comments
-to help identify the node for the user.
-
-
-File: info.info, Node: Menus, Next: Cross-refs, Prev: Add, Up: Advanced Info
-
-How to Create Menus
-===================
-
- Any node in the Info hierarchy may have a "menu"--a list of subnodes.
-The `m' command searches the current node's menu for the topic which it
-reads from the terminal.
-
- A menu begins with a line starting with `* Menu:'. The rest of the
-line is a comment. After the starting line, every line that begins
-with a `* ' lists a single topic. The name of the topic-the argument
-that the user must give to the `m' command to select this topic--comes
-right after the star and space, and is followed by a colon, spaces and
-tabs, and the name of the node which discusses that topic. The node
-name, like node names following `Next', `Previous' and `Up', may be
-terminated with a tab, comma, or newline; it may also be terminated
-with a period.
-
- If the node name and topic name are the same, than rather than
-giving the name twice, the abbreviation `* NAME::' may be used (and
-should be used, whenever possible, as it reduces the visual clutter in
-the menu).
-
- It is considerate to choose the topic names so that they differ from
-each other very near the beginning--this allows the user to type short
-abbreviations. In a long menu, it is a good idea to capitalize the
-beginning of each item name which is the minimum acceptable
-abbreviation for it (a long menu is more than 5 or so entries).
-
- The nodes listed in a node's menu are called its "subnodes", and it
-is their "superior". They should each have an `Up:' pointing at the
-superior. It is often useful to arrange all or most of the subnodes in
-a sequence of `Next' and `Previous' pointers so that someone who wants
-to see them all need not keep revisiting the Menu.
-
- The Info Directory is simply the menu of the node `(dir)Top'--that
-is, node `Top' in file `.../info/dir'. You can put new entries in that
-menu just like any other menu. The Info Directory is *not* the same as
-the file directory called `info'. It happens that many of Info's files
-live on that file directory, but they do not have to; and files on that
-directory are not automatically listed in the Info Directory node.
-
- Also, although the Info node graph is claimed to be a "hierarchy",
-in fact it can be *any* directed graph. Shared structures and pointer
-cycles are perfectly possible, and can be used if they are appropriate
-to the meaning to be expressed. There is no need for all the nodes in
-a file to form a connected structure. In fact, this file has two
-connected components. You are in one of them, which is under the node
-`Top'; the other contains the node `Help' which the `h' command goes
-to. In fact, since there is no garbage collector, nothing terrible
-happens if a substructure is not pointed to, but such a substructure is
-rather useless since nobody can ever find out that it exists.
-
-
-File: info.info, Node: Cross-refs, Next: Tags, Prev: Menus, Up: Advanced Info
-
-Creating Cross References
-=========================
-
- A cross reference can be placed anywhere in the text, unlike a menu
-item which must go at the front of a line. A cross reference looks
-like a menu item except that it has `*note' instead of `*'. It
-*cannot* be terminated by a `)', because `)''s are so often part of
-node names. If you wish to enclose a cross reference in parentheses,
-terminate it with a period first. Here are two examples of cross
-references pointers:
-
- *Note details: commands. (See *note 3: Full Proof.)
-
- They are just examples. The places they "lead to" do not really
-exist!
-
-
-File: info.info, Node: Tags, Next: Checking, Prev: Cross-refs, Up: Advanced Info
-
-Tag Tables for Info Files
-=========================
-
- You can speed up the access to nodes of a large Info file by giving
-it a tag table. Unlike the tag table for a program, the tag table for
-an Info file lives inside the file itself and is used automatically
-whenever Info reads in the file.
-
- To make a tag table, go to a node in the file using Emacs Info mode
-and type `M-x Info-tagify'. Then you must use `C-x C-s' to save the
-file.
-
- Once the Info file has a tag table, you must make certain it is up
-to date. If, as a result of deletion of text, any node moves back more
-than a thousand characters in the file from the position recorded in
-the tag table, Info will no longer be able to find that node. To
-update the tag table, use the `Info-tagify' command again.
-
- An Info file tag table appears at the end of the file and looks like
-this:
-
- ^_
- Tag Table:
- File: info, Node: Cross-refs^?21419
- File: info, Node: Tags^?22145
- ^_
- End Tag Table
-
-Note that it contains one line per node, and this line contains the
-beginning of the node's header (ending just after the node name), a DEL
-character, and the character position in the file of the beginning of
-the node.
-
-
-File: info.info, Node: Checking, Prev: Tags, Up: Advanced Info
-
-Checking an Info File
-=====================
-
- When creating an Info file, it is easy to forget the name of a node
-when you are making a pointer to it from another node. If you put in
-the wrong name for a node, this is not detected until someone tries to
-go through the pointer using Info. Verification of the Info file is an
-automatic process which checks all pointers to nodes and reports any
-pointers which are invalid. Every `Next', `Previous', and `Up' is
-checked, as is every menu item and every cross reference. In addition,
-any `Next' which does not have a `Previous' pointing back is reported.
-Only pointers within the file are checked, because checking pointers to
-other files would be terribly slow. But those are usually few.
-
- To check an Info file, do `M-x Info-validate' while looking at any
-node of the file with Emacs Info mode.
-
-
-File: info.info, Node: Create an Info File, Prev: Advanced Info, Up: Top
-
-Creating an Info File from a Makeinfo file
-******************************************
-
- `makeinfo' is a utility that converts a Texinfo file into an Info
-file; `texinfo-format-region' and `texinfo-format-buffer' are GNU Emacs
-functions that do the same.
-
- *Note Creating an Info File: (texinfo)Create an Info File, to learn
-how to create an Info file from a Texinfo file.
-
- *Note Overview of Texinfo: (texinfo)Top, to learn how to write a
-Texinfo file.
-
-
-
-Tag Table:
-Node: Top913
-Node: Getting Started1431
-Node: Help-Small-Screen2179
-Node: Help3921
-Node: Help-P4949
-Node: Help-^L5811
-Node: Help-M8462
-Node: Help-FOO14030
-Node: Help-Adv14766
-Node: Help-Cross17148
-Node: Help-Q17794
-Node: Advanced Info18434
-Node: Expert19330
-Node: Add21601
-Node: Menus24635
-Node: Cross-refs27509
-Node: Tags28211
-Node: Checking29510
-Node: Create an Info File30434
-
-End Tag Table
diff --git a/gnu/usr.bin/texinfo/misc/texindex.c b/gnu/usr.bin/texinfo/misc/texindex.c
deleted file mode 100644
index a88d516..0000000
--- a/gnu/usr.bin/texinfo/misc/texindex.c
+++ /dev/null
@@ -1,1700 +0,0 @@
-/* Prepare TeX index dribble output into an actual index.
-
- Version 1.45
-
- Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include "getopt.h"
-
-#if defined (STDC_HEADERS)
-# include <string.h>
-# include <stdlib.h>
-# if !defined (bzero)
-# define bzero(p, n) memset((p), '\0', (n))
-# endif /* !bzero */
-#else /* !STDC_HEADERS */
-extern int errno;
-char *getenv (), *malloc (), *realloc ();
-void bzero ();
-#endif /* !STDC_HEADERS */
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#else /* !HAVE_UNISTD_H */
-long lseek ();
-#endif /* !HAVE_UNISTD_H */
-
-char *mktemp ();
-
-#if defined (VMS)
-# if !defined (VAX11C)
-# define noshare
-# endif /* !VAX11C */
-# include <perror.h>
-extern noshare int sys_nerr;
-extern noshare char *sys_errlist[];
-
-# include <file.h>
-
-# define TI_NO_ERROR ((1 << 28) | 1)
-# define TI_FATAL_ERROR ((1 << 28) | 4)
-# define unlink delete
-
-#else /* !VMS */
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-# if defined (HAVE_SYS_FCNTL_H)
-# include <sys/types.h>
-# include <sys/fcntl.h>
-# endif /* HAVE_SYS_FCNTL_H */
-
-# if defined (_AIX) || !defined (_POSIX_VERSION)
-# include <sys/file.h>
-# else /* !AIX && _POSIX_VERSION */
-# if !defined (HAVE_SYS_FCNTL_H)
-# include <fcntl.h>
-# endif /* !HAVE_FCNTL_H */
-# endif /* !_AIX && _POSIX_VERSION */
-# define TI_NO_ERROR 0
-# define TI_FATAL_ERROR 1
-#endif /* !VMS */
-
-#if !defined (SEEK_SET)
-# define SEEK_SET 0
-# define SEEK_CUR 1
-# define SEEK_END 2
-#endif /* !SEEK_SET */
-
-/* When sorting in core, this structure describes one line
- and the position and length of its first keyfield. */
-struct lineinfo
-{
- char *text; /* The actual text of the line. */
- union {
- char *text; /* The start of the key (for textual comparison). */
- long number; /* The numeric value (for numeric comparison). */
- } key;
- long keylen; /* Length of KEY field. */
-};
-
-/* This structure describes a field to use as a sort key. */
-struct keyfield
-{
- int startwords; /* Number of words to skip. */
- int startchars; /* Number of additional chars to skip. */
- int endwords; /* Number of words to ignore at end. */
- int endchars; /* Ditto for characters of last word. */
- char ignore_blanks; /* Non-zero means ignore spaces and tabs. */
- char fold_case; /* Non-zero means case doesn't matter. */
- char reverse; /* Non-zero means compare in reverse order. */
- char numeric; /* Non-zeros means field is ASCII numeric. */
- char positional; /* Sort according to file position. */
- char braced; /* Count balanced-braced groupings as fields. */
-};
-
-/* Vector of keyfields to use. */
-struct keyfield keyfields[3];
-
-/* Number of keyfields stored in that vector. */
-int num_keyfields = 3;
-
-/* Vector of input file names, terminated with a null pointer. */
-char **infiles;
-
-/* Vector of corresponding output file names, or NULL, meaning default it
- (add an `s' to the end). */
-char **outfiles;
-
-/* Length of `infiles'. */
-int num_infiles;
-
-/* Pointer to the array of pointers to lines being sorted. */
-char **linearray;
-
-/* The allocated length of `linearray'. */
-long nlines;
-
-/* Directory to use for temporary files. On Unix, it ends with a slash. */
-char *tempdir;
-
-/* Start of filename to use for temporary files. */
-char *tempbase;
-
-/* Number of last temporary file. */
-int tempcount;
-
-/* Number of last temporary file already deleted.
- Temporary files are deleted by `flush_tempfiles' in order of creation. */
-int last_deleted_tempcount;
-
-/* During in-core sort, this points to the base of the data block
- which contains all the lines of data. */
-char *text_base;
-
-/* Additional command switches .*/
-
-/* Nonzero means do not delete tempfiles -- for debugging. */
-int keep_tempfiles;
-
-/* The name this program was run with. */
-char *program_name;
-
-/* Forward declarations of functions in this file. */
-
-void decode_command ();
-void sort_in_core ();
-void sort_offline ();
-char **parsefile ();
-char *find_field ();
-char *find_pos ();
-long find_value ();
-char *find_braced_pos ();
-char *find_braced_end ();
-void writelines ();
-int compare_field ();
-int compare_full ();
-long readline ();
-int merge_files ();
-int merge_direct ();
-void pfatal_with_name ();
-void fatal ();
-void error ();
-void *xmalloc (), *xrealloc ();
-char *concat ();
-char *maketempname ();
-void flush_tempfiles ();
-char *tempcopy ();
-
-#define MAX_IN_CORE_SORT 500000
-
-void
-main (argc, argv)
- int argc;
- char **argv;
-{
- int i;
-
- tempcount = 0;
- last_deleted_tempcount = 0;
- program_name = argv[0];
-
- /* Describe the kind of sorting to do. */
- /* The first keyfield uses the first braced field and folds case. */
- keyfields[0].braced = 1;
- keyfields[0].fold_case = 1;
- keyfields[0].endwords = -1;
- keyfields[0].endchars = -1;
-
- /* The second keyfield uses the second braced field, numerically. */
- keyfields[1].braced = 1;
- keyfields[1].numeric = 1;
- keyfields[1].startwords = 1;
- keyfields[1].endwords = -1;
- keyfields[1].endchars = -1;
-
- /* The third keyfield (which is ignored while discarding duplicates)
- compares the whole line. */
- keyfields[2].endwords = -1;
- keyfields[2].endchars = -1;
-
- decode_command (argc, argv);
-
- tempbase = mktemp (concat ("txiXXXXXX", "", ""));
-
- /* Process input files completely, one by one. */
-
- for (i = 0; i < num_infiles; i++)
- {
- int desc;
- long ptr;
- char *outfile;
-
- desc = open (infiles[i], O_RDONLY, 0);
- if (desc < 0)
- pfatal_with_name (infiles[i]);
- lseek (desc, 0L, SEEK_END);
- ptr = lseek (desc, 0L, SEEK_CUR);
-
- close (desc);
-
- outfile = outfiles[i];
- if (!outfile)
- {
- outfile = concat (infiles[i], "s", "");
- }
-
- if (ptr < MAX_IN_CORE_SORT)
- /* Sort a small amount of data. */
- sort_in_core (infiles[i], ptr, outfile);
- else
- sort_offline (infiles[i], ptr, outfile);
- }
-
- flush_tempfiles (tempcount);
- exit (TI_NO_ERROR);
-}
-
-void
-usage ()
-{
- fprintf (stderr, "\
-Usage: %s [-k] infile [-o outfile] ...\n", program_name);
- exit (1);
-}
-
-/* Decode the command line arguments to set the parameter variables
- and set up the vector of keyfields and the vector of input files. */
-
-void
-decode_command (argc, argv)
- int argc;
- char **argv;
-{
- int optc;
- char **ip;
- char **op;
-
- /* Store default values into parameter variables. */
-
- tempdir = getenv ("TMPDIR");
-#ifdef VMS
- if (tempdir == NULL)
- tempdir = "sys$scratch:";
-#else
- if (tempdir == NULL)
- tempdir = "/tmp/";
- else
- tempdir = concat (tempdir, "/", "");
-#endif
-
- keep_tempfiles = 0;
-
- /* Allocate ARGC input files, which must be enough. */
-
- infiles = (char **) xmalloc (argc * sizeof (char *));
- outfiles = (char **) xmalloc (argc * sizeof (char *));
- ip = infiles;
- op = outfiles;
-
- while ((optc = getopt (argc, argv, "-ko:")) != EOF)
- {
- switch (optc)
- {
- case 1: /* Non-option filename. */
- *ip++ = optarg;
- *op++ = NULL;
- break;
-
- case 'k':
- keep_tempfiles = 1;
- break;
-
- case 'o':
- if (op > outfiles)
- *(op - 1) = optarg;
- break;
-
- default:
- usage ();
- }
- }
-
- /* Record number of keyfields and terminate list of filenames. */
- num_infiles = ip - infiles;
- *ip = 0;
- if (num_infiles == 0)
- usage ();
-}
-
-/* Return a name for a temporary file. */
-
-char *
-maketempname (count)
- int count;
-{
- char tempsuffix[10];
- sprintf (tempsuffix, "%d", count);
- return concat (tempdir, tempbase, tempsuffix);
-}
-
-/* Delete all temporary files up to TO_COUNT. */
-
-void
-flush_tempfiles (to_count)
- int to_count;
-{
- if (keep_tempfiles)
- return;
- while (last_deleted_tempcount < to_count)
- unlink (maketempname (++last_deleted_tempcount));
-}
-
-/* Copy the input file open on IDESC into a temporary file
- and return the temporary file name. */
-
-#define BUFSIZE 1024
-
-char *
-tempcopy (idesc)
- int idesc;
-{
- char *outfile = maketempname (++tempcount);
- int odesc;
- char buffer[BUFSIZE];
-
- odesc = open (outfile, O_WRONLY | O_CREAT, 0666);
-
- if (odesc < 0)
- pfatal_with_name (outfile);
-
- while (1)
- {
- int nread = read (idesc, buffer, BUFSIZE);
- write (odesc, buffer, nread);
- if (!nread)
- break;
- }
-
- close (odesc);
-
- return outfile;
-}
-
-/* Compare LINE1 and LINE2 according to the specified set of keyfields. */
-
-int
-compare_full (line1, line2)
- char **line1, **line2;
-{
- int i;
-
- /* Compare using the first keyfield;
- if that does not distinguish the lines, try the second keyfield;
- and so on. */
-
- for (i = 0; i < num_keyfields; i++)
- {
- long length1, length2;
- char *start1 = find_field (&keyfields[i], *line1, &length1);
- char *start2 = find_field (&keyfields[i], *line2, &length2);
- int tem = compare_field (&keyfields[i], start1, length1, *line1 - text_base,
- start2, length2, *line2 - text_base);
- if (tem)
- {
- if (keyfields[i].reverse)
- return -tem;
- return tem;
- }
- }
-
- return 0; /* Lines match exactly. */
-}
-
-/* Compare LINE1 and LINE2, described by structures
- in which the first keyfield is identified in advance.
- For positional sorting, assumes that the order of the lines in core
- reflects their nominal order. */
-
-int
-compare_prepared (line1, line2)
- struct lineinfo *line1, *line2;
-{
- int i;
- int tem;
- char *text1, *text2;
-
- /* Compare using the first keyfield, which has been found for us already. */
- if (keyfields->positional)
- {
- if (line1->text - text_base > line2->text - text_base)
- tem = 1;
- else
- tem = -1;
- }
- else if (keyfields->numeric)
- tem = line1->key.number - line2->key.number;
- else
- tem = compare_field (keyfields, line1->key.text, line1->keylen, 0,
- line2->key.text, line2->keylen, 0);
- if (tem)
- {
- if (keyfields->reverse)
- return -tem;
- return tem;
- }
-
- text1 = line1->text;
- text2 = line2->text;
-
- /* Compare using the second keyfield;
- if that does not distinguish the lines, try the third keyfield;
- and so on. */
-
- for (i = 1; i < num_keyfields; i++)
- {
- long length1, length2;
- char *start1 = find_field (&keyfields[i], text1, &length1);
- char *start2 = find_field (&keyfields[i], text2, &length2);
- int tem = compare_field (&keyfields[i], start1, length1, text1 - text_base,
- start2, length2, text2 - text_base);
- if (tem)
- {
- if (keyfields[i].reverse)
- return -tem;
- return tem;
- }
- }
-
- return 0; /* Lines match exactly. */
-}
-
-/* Like compare_full but more general.
- You can pass any strings, and you can say how many keyfields to use.
- POS1 and POS2 should indicate the nominal positional ordering of
- the two lines in the input. */
-
-int
-compare_general (str1, str2, pos1, pos2, use_keyfields)
- char *str1, *str2;
- long pos1, pos2;
- int use_keyfields;
-{
- int i;
-
- /* Compare using the first keyfield;
- if that does not distinguish the lines, try the second keyfield;
- and so on. */
-
- for (i = 0; i < use_keyfields; i++)
- {
- long length1, length2;
- char *start1 = find_field (&keyfields[i], str1, &length1);
- char *start2 = find_field (&keyfields[i], str2, &length2);
- int tem = compare_field (&keyfields[i], start1, length1, pos1,
- start2, length2, pos2);
- if (tem)
- {
- if (keyfields[i].reverse)
- return -tem;
- return tem;
- }
- }
-
- return 0; /* Lines match exactly. */
-}
-
-/* Find the start and length of a field in STR according to KEYFIELD.
- A pointer to the starting character is returned, and the length
- is stored into the int that LENGTHPTR points to. */
-
-char *
-find_field (keyfield, str, lengthptr)
- struct keyfield *keyfield;
- char *str;
- long *lengthptr;
-{
- char *start;
- char *end;
- char *(*fun) ();
-
- if (keyfield->braced)
- fun = find_braced_pos;
- else
- fun = find_pos;
-
- start = (*fun) (str, keyfield->startwords, keyfield->startchars,
- keyfield->ignore_blanks);
- if (keyfield->endwords < 0)
- {
- if (keyfield->braced)
- end = find_braced_end (start);
- else
- {
- end = start;
- while (*end && *end != '\n')
- end++;
- }
- }
- else
- {
- end = (*fun) (str, keyfield->endwords, keyfield->endchars, 0);
- if (end - str < start - str)
- end = start;
- }
- *lengthptr = end - start;
- return start;
-}
-
-/* Return a pointer to a specified place within STR,
- skipping (from the beginning) WORDS words and then CHARS chars.
- If IGNORE_BLANKS is nonzero, we skip all blanks
- after finding the specified word. */
-
-char *
-find_pos (str, words, chars, ignore_blanks)
- char *str;
- int words, chars;
- int ignore_blanks;
-{
- int i;
- char *p = str;
-
- for (i = 0; i < words; i++)
- {
- char c;
- /* Find next bunch of nonblanks and skip them. */
- while ((c = *p) == ' ' || c == '\t')
- p++;
- while ((c = *p) && c != '\n' && !(c == ' ' || c == '\t'))
- p++;
- if (!*p || *p == '\n')
- return p;
- }
-
- while (*p == ' ' || *p == '\t')
- p++;
-
- for (i = 0; i < chars; i++)
- {
- if (!*p || *p == '\n')
- break;
- p++;
- }
- return p;
-}
-
-/* Like find_pos but assumes that each field is surrounded by braces
- and that braces within fields are balanced. */
-
-char *
-find_braced_pos (str, words, chars, ignore_blanks)
- char *str;
- int words, chars;
- int ignore_blanks;
-{
- int i;
- int bracelevel;
- char *p = str;
- char c;
-
- for (i = 0; i < words; i++)
- {
- bracelevel = 1;
- while ((c = *p++) != '{' && c != '\n' && c)
- /* Do nothing. */ ;
- if (c != '{')
- return p - 1;
- while (bracelevel)
- {
- c = *p++;
- if (c == '{')
- bracelevel++;
- if (c == '}')
- bracelevel--;
- if (c == 0 || c == '\n')
- return p - 1;
- }
- }
-
- while ((c = *p++) != '{' && c != '\n' && c)
- /* Do nothing. */ ;
-
- if (c != '{')
- return p - 1;
-
- if (ignore_blanks)
- while ((c = *p) == ' ' || c == '\t')
- p++;
-
- for (i = 0; i < chars; i++)
- {
- if (!*p || *p == '\n')
- break;
- p++;
- }
- return p;
-}
-
-/* Find the end of the balanced-brace field which starts at STR.
- The position returned is just before the closing brace. */
-
-char *
-find_braced_end (str)
- char *str;
-{
- int bracelevel;
- char *p = str;
- char c;
-
- bracelevel = 1;
- while (bracelevel)
- {
- c = *p++;
- if (c == '{')
- bracelevel++;
- if (c == '}')
- bracelevel--;
- if (c == 0 || c == '\n')
- return p - 1;
- }
- return p - 1;
-}
-
-long
-find_value (start, length)
- char *start;
- long length;
-{
- while (length != 0L)
- {
- if (isdigit (*start))
- return atol (start);
- length--;
- start++;
- }
- return 0l;
-}
-
-/* Vector used to translate characters for comparison.
- This is how we make all alphanumerics follow all else,
- and ignore case in the first sorting. */
-int char_order[256];
-
-void
-init_char_order ()
-{
- int i;
- for (i = 1; i < 256; i++)
- char_order[i] = i;
-
- for (i = '0'; i <= '9'; i++)
- char_order[i] += 512;
-
- for (i = 'a'; i <= 'z'; i++)
- {
- char_order[i] = 512 + i;
- char_order[i + 'A' - 'a'] = 512 + i;
- }
-}
-
-/* Compare two fields (each specified as a start pointer and a character count)
- according to KEYFIELD.
- The sign of the value reports the relation between the fields. */
-
-int
-compare_field (keyfield, start1, length1, pos1, start2, length2, pos2)
- struct keyfield *keyfield;
- char *start1;
- long length1;
- long pos1;
- char *start2;
- long length2;
- long pos2;
-{
- if (keyfields->positional)
- {
- if (pos1 > pos2)
- return 1;
- else
- return -1;
- }
- if (keyfield->numeric)
- {
- long value = find_value (start1, length1) - find_value (start2, length2);
- if (value > 0)
- return 1;
- if (value < 0)
- return -1;
- return 0;
- }
- else
- {
- char *p1 = start1;
- char *p2 = start2;
- char *e1 = start1 + length1;
- char *e2 = start2 + length2;
-
- while (1)
- {
- int c1, c2;
-
- if (p1 == e1)
- c1 = 0;
- else
- c1 = *p1++;
- if (p2 == e2)
- c2 = 0;
- else
- c2 = *p2++;
-
- if (char_order[c1] != char_order[c2])
- return char_order[c1] - char_order[c2];
- if (!c1)
- break;
- }
-
- /* Strings are equal except possibly for case. */
- p1 = start1;
- p2 = start2;
- while (1)
- {
- int c1, c2;
-
- if (p1 == e1)
- c1 = 0;
- else
- c1 = *p1++;
- if (p2 == e2)
- c2 = 0;
- else
- c2 = *p2++;
-
- if (c1 != c2)
- /* Reverse sign here so upper case comes out last. */
- return c2 - c1;
- if (!c1)
- break;
- }
-
- return 0;
- }
-}
-
-/* A `struct linebuffer' is a structure which holds a line of text.
- `readline' reads a line from a stream into a linebuffer
- and works regardless of the length of the line. */
-
-struct linebuffer
-{
- long size;
- char *buffer;
-};
-
-/* Initialize LINEBUFFER for use. */
-
-void
-initbuffer (linebuffer)
- struct linebuffer *linebuffer;
-{
- linebuffer->size = 200;
- linebuffer->buffer = (char *) xmalloc (200);
-}
-
-/* Read a line of text from STREAM into LINEBUFFER.
- Return the length of the line. */
-
-long
-readline (linebuffer, stream)
- struct linebuffer *linebuffer;
- FILE *stream;
-{
- char *buffer = linebuffer->buffer;
- char *p = linebuffer->buffer;
- char *end = p + linebuffer->size;
-
- while (1)
- {
- int c = getc (stream);
- if (p == end)
- {
- buffer = (char *) xrealloc (buffer, linebuffer->size *= 2);
- p += buffer - linebuffer->buffer;
- end += buffer - linebuffer->buffer;
- linebuffer->buffer = buffer;
- }
- if (c < 0 || c == '\n')
- {
- *p = 0;
- break;
- }
- *p++ = c;
- }
-
- return p - buffer;
-}
-
-/* Sort an input file too big to sort in core. */
-
-void
-sort_offline (infile, nfiles, total, outfile)
- char *infile;
- int nfiles;
- long total;
- char *outfile;
-{
- /* More than enough. */
- int ntemps = 2 * (total + MAX_IN_CORE_SORT - 1) / MAX_IN_CORE_SORT;
- char **tempfiles = (char **) xmalloc (ntemps * sizeof (char *));
- FILE *istream = fopen (infile, "r");
- int i;
- struct linebuffer lb;
- long linelength;
- int failure = 0;
-
- initbuffer (&lb);
-
- /* Read in one line of input data. */
-
- linelength = readline (&lb, istream);
-
- if (lb.buffer[0] != '\\' && lb.buffer[0] != '@')
- {
- error ("%s: not a texinfo index file", infile);
- return;
- }
-
- /* Split up the input into `ntemps' temporary files, or maybe fewer,
- and put the new files' names into `tempfiles' */
-
- for (i = 0; i < ntemps; i++)
- {
- char *outname = maketempname (++tempcount);
- FILE *ostream = fopen (outname, "w");
- long tempsize = 0;
-
- if (!ostream)
- pfatal_with_name (outname);
- tempfiles[i] = outname;
-
- /* Copy lines into this temp file as long as it does not make file
- "too big" or until there are no more lines. */
-
- while (tempsize + linelength + 1 <= MAX_IN_CORE_SORT)
- {
- tempsize += linelength + 1;
- fputs (lb.buffer, ostream);
- putc ('\n', ostream);
-
- /* Read another line of input data. */
-
- linelength = readline (&lb, istream);
- if (!linelength && feof (istream))
- break;
-
- if (lb.buffer[0] != '\\' && lb.buffer[0] != '@')
- {
- error ("%s: not a texinfo index file", infile);
- failure = 1;
- goto fail;
- }
- }
- fclose (ostream);
- if (feof (istream))
- break;
- }
-
- free (lb.buffer);
-
-fail:
- /* Record number of temp files we actually needed. */
-
- ntemps = i;
-
- /* Sort each tempfile into another tempfile.
- Delete the first set of tempfiles and put the names of the second
- into `tempfiles'. */
-
- for (i = 0; i < ntemps; i++)
- {
- char *newtemp = maketempname (++tempcount);
- sort_in_core (&tempfiles[i], MAX_IN_CORE_SORT, newtemp);
- if (!keep_tempfiles)
- unlink (tempfiles[i]);
- tempfiles[i] = newtemp;
- }
-
- if (failure)
- return;
-
- /* Merge the tempfiles together and indexify. */
-
- merge_files (tempfiles, ntemps, outfile);
-}
-
-/* Sort INFILE, whose size is TOTAL,
- assuming that is small enough to be done in-core,
- then indexify it and send the output to OUTFILE (or to stdout). */
-
-void
-sort_in_core (infile, total, outfile)
- char *infile;
- long total;
- char *outfile;
-{
- char **nextline;
- char *data = (char *) xmalloc (total + 1);
- char *file_data;
- long file_size;
- int i;
- FILE *ostream = stdout;
- struct lineinfo *lineinfo;
-
- /* Read the contents of the file into the moby array `data'. */
-
- int desc = open (infile, O_RDONLY, 0);
-
- if (desc < 0)
- fatal ("failure reopening %s", infile);
- for (file_size = 0;;)
- {
- i = read (desc, data + file_size, total - file_size);
- if (i <= 0)
- break;
- file_size += i;
- }
- file_data = data;
- data[file_size] = 0;
-
- close (desc);
-
- if (file_size > 0 && data[0] != '\\' && data[0] != '@')
- {
- error ("%s: not a texinfo index file", infile);
- return;
- }
-
- init_char_order ();
-
- /* Sort routines want to know this address. */
-
- text_base = data;
-
- /* Create the array of pointers to lines, with a default size
- frequently enough. */
-
- nlines = total / 50;
- if (!nlines)
- nlines = 2;
- linearray = (char **) xmalloc (nlines * sizeof (char *));
-
- /* `nextline' points to the next free slot in this array.
- `nlines' is the allocated size. */
-
- nextline = linearray;
-
- /* Parse the input file's data, and make entries for the lines. */
-
- nextline = parsefile (infile, nextline, file_data, file_size);
- if (nextline == 0)
- {
- error ("%s: not a texinfo index file", infile);
- return;
- }
-
- /* Sort the lines. */
-
- /* If we have enough space, find the first keyfield of each line in advance.
- Make a `struct lineinfo' for each line, which records the keyfield
- as well as the line, and sort them. */
-
- lineinfo = (struct lineinfo *) malloc ((nextline - linearray) * sizeof (struct lineinfo));
-
- if (lineinfo)
- {
- struct lineinfo *lp;
- char **p;
-
- for (lp = lineinfo, p = linearray; p != nextline; lp++, p++)
- {
- lp->text = *p;
- lp->key.text = find_field (keyfields, *p, &lp->keylen);
- if (keyfields->numeric)
- lp->key.number = find_value (lp->key.text, lp->keylen);
- }
-
- qsort (lineinfo, nextline - linearray, sizeof (struct lineinfo), compare_prepared);
-
- for (lp = lineinfo, p = linearray; p != nextline; lp++, p++)
- *p = lp->text;
-
- free (lineinfo);
- }
- else
- qsort (linearray, nextline - linearray, sizeof (char *), compare_full);
-
- /* Open the output file. */
-
- if (outfile)
- {
- ostream = fopen (outfile, "w");
- if (!ostream)
- pfatal_with_name (outfile);
- }
-
- writelines (linearray, nextline - linearray, ostream);
- if (outfile)
- fclose (ostream);
-
- free (linearray);
- free (data);
-}
-
-/* Parse an input string in core into lines.
- DATA is the input string, and SIZE is its length.
- Data goes in LINEARRAY starting at NEXTLINE.
- The value returned is the first entry in LINEARRAY still unused.
- Value 0 means input file contents are invalid. */
-
-char **
-parsefile (filename, nextline, data, size)
- char *filename;
- char **nextline;
- char *data;
- long size;
-{
- char *p, *end;
- char **line = nextline;
-
- p = data;
- end = p + size;
- *end = 0;
-
- while (p != end)
- {
- if (p[0] != '\\' && p[0] != '@')
- return 0;
-
- *line = p;
- while (*p && *p != '\n')
- p++;
- if (p != end)
- p++;
-
- line++;
- if (line == linearray + nlines)
- {
- char **old = linearray;
- linearray = (char **) xrealloc (linearray, sizeof (char *) * (nlines *= 4));
- line += linearray - old;
- }
- }
-
- return line;
-}
-
-/* Indexification is a filter applied to the sorted lines
- as they are being written to the output file.
- Multiple entries for the same name, with different page numbers,
- get combined into a single entry with multiple page numbers.
- The first braced field, which is used for sorting, is discarded.
- However, its first character is examined, folded to lower case,
- and if it is different from that in the previous line fed to us
- a \initial line is written with one argument, the new initial.
-
- If an entry has four braced fields, then the second and third
- constitute primary and secondary names.
- In this case, each change of primary name
- generates a \primary line which contains only the primary name,
- and in between these are \secondary lines which contain
- just a secondary name and page numbers. */
-
-/* The last primary name we wrote a \primary entry for.
- If only one level of indexing is being done, this is the last name seen. */
-char *lastprimary;
-/* Length of storage allocated for lastprimary. */
-int lastprimarylength;
-
-/* Similar, for the secondary name. */
-char *lastsecondary;
-int lastsecondarylength;
-
-/* Zero if we are not in the middle of writing an entry.
- One if we have written the beginning of an entry but have not
- yet written any page numbers into it.
- Greater than one if we have written the beginning of an entry
- plus at least one page number. */
-int pending;
-
-/* The initial (for sorting purposes) of the last primary entry written.
- When this changes, a \initial {c} line is written */
-
-char *lastinitial;
-
-int lastinitiallength;
-
-/* When we need a string of length 1 for the value of lastinitial,
- store it here. */
-
-char lastinitial1[2];
-
-/* Initialize static storage for writing an index. */
-
-void
-init_index ()
-{
- pending = 0;
- lastinitial = lastinitial1;
- lastinitial1[0] = 0;
- lastinitial1[1] = 0;
- lastinitiallength = 0;
- lastprimarylength = 100;
- lastprimary = (char *) xmalloc (lastprimarylength + 1);
- bzero (lastprimary, lastprimarylength + 1);
- lastsecondarylength = 100;
- lastsecondary = (char *) xmalloc (lastsecondarylength + 1);
- bzero (lastsecondary, lastsecondarylength + 1);
-}
-
-/* Indexify. Merge entries for the same name,
- insert headers for each initial character, etc. */
-
-void
-indexify (line, ostream)
- char *line;
- FILE *ostream;
-{
- char *primary, *secondary, *pagenumber;
- int primarylength, secondarylength = 0, pagelength;
- int nosecondary;
- int initiallength;
- char *initial;
- char initial1[2];
- register char *p;
-
- /* First, analyze the parts of the entry fed to us this time. */
-
- p = find_braced_pos (line, 0, 0, 0);
- if (*p == '{')
- {
- initial = p;
- /* Get length of inner pair of braces starting at `p',
- including that inner pair of braces. */
- initiallength = find_braced_end (p + 1) + 1 - p;
- }
- else
- {
- initial = initial1;
- initial1[0] = *p;
- initial1[1] = 0;
- initiallength = 1;
-
- if (initial1[0] >= 'a' && initial1[0] <= 'z')
- initial1[0] -= 040;
- }
-
- pagenumber = find_braced_pos (line, 1, 0, 0);
- pagelength = find_braced_end (pagenumber) - pagenumber;
- if (pagelength == 0)
- abort ();
-
- primary = find_braced_pos (line, 2, 0, 0);
- primarylength = find_braced_end (primary) - primary;
-
- secondary = find_braced_pos (line, 3, 0, 0);
- nosecondary = !*secondary;
- if (!nosecondary)
- secondarylength = find_braced_end (secondary) - secondary;
-
- /* If the primary is different from before, make a new primary entry. */
- if (strncmp (primary, lastprimary, primarylength))
- {
- /* Close off current secondary entry first, if one is open. */
- if (pending)
- {
- fputs ("}\n", ostream);
- pending = 0;
- }
-
- /* If this primary has a different initial, include an entry for
- the initial. */
- if (initiallength != lastinitiallength ||
- strncmp (initial, lastinitial, initiallength))
- {
- fprintf (ostream, "\\initial {");
- fwrite (initial, 1, initiallength, ostream);
- fprintf (ostream, "}\n", initial);
- if (initial == initial1)
- {
- lastinitial = lastinitial1;
- *lastinitial1 = *initial1;
- }
- else
- {
- lastinitial = initial;
- }
- lastinitiallength = initiallength;
- }
-
- /* Make the entry for the primary. */
- if (nosecondary)
- fputs ("\\entry {", ostream);
- else
- fputs ("\\primary {", ostream);
- fwrite (primary, primarylength, 1, ostream);
- if (nosecondary)
- {
- fputs ("}{", ostream);
- pending = 1;
- }
- else
- fputs ("}\n", ostream);
-
- /* Record name of most recent primary. */
- if (lastprimarylength < primarylength)
- {
- lastprimarylength = primarylength + 100;
- lastprimary = (char *) xrealloc (lastprimary,
- 1 + lastprimarylength);
- }
- strncpy (lastprimary, primary, primarylength);
- lastprimary[primarylength] = 0;
-
- /* There is no current secondary within this primary, now. */
- lastsecondary[0] = 0;
- }
-
- /* Should not have an entry with no subtopic following one with a subtopic. */
-
- if (nosecondary && *lastsecondary)
- error ("entry %s follows an entry with a secondary name", line);
-
- /* Start a new secondary entry if necessary. */
- if (!nosecondary && strncmp (secondary, lastsecondary, secondarylength))
- {
- if (pending)
- {
- fputs ("}\n", ostream);
- pending = 0;
- }
-
- /* Write the entry for the secondary. */
- fputs ("\\secondary {", ostream);
- fwrite (secondary, secondarylength, 1, ostream);
- fputs ("}{", ostream);
- pending = 1;
-
- /* Record name of most recent secondary. */
- if (lastsecondarylength < secondarylength)
- {
- lastsecondarylength = secondarylength + 100;
- lastsecondary = (char *) xrealloc (lastsecondary,
- 1 + lastsecondarylength);
- }
- strncpy (lastsecondary, secondary, secondarylength);
- lastsecondary[secondarylength] = 0;
- }
-
- /* Here to add one more page number to the current entry. */
- if (pending++ != 1)
- fputs (", ", ostream); /* Punctuate first, if this is not the first. */
- fwrite (pagenumber, pagelength, 1, ostream);
-}
-
-/* Close out any unfinished output entry. */
-
-void
-finish_index (ostream)
- FILE *ostream;
-{
- if (pending)
- fputs ("}\n", ostream);
- free (lastprimary);
- free (lastsecondary);
-}
-
-/* Copy the lines in the sorted order.
- Each line is copied out of the input file it was found in. */
-
-void
-writelines (linearray, nlines, ostream)
- char **linearray;
- int nlines;
- FILE *ostream;
-{
- char **stop_line = linearray + nlines;
- char **next_line;
-
- init_index ();
-
- /* Output the text of the lines, and free the buffer space. */
-
- for (next_line = linearray; next_line != stop_line; next_line++)
- {
- /* If -u was specified, output the line only if distinct from previous one. */
- if (next_line == linearray
- /* Compare previous line with this one, using only the
- explicitly specd keyfields. */
- || compare_general (*(next_line - 1), *next_line, 0L, 0L, num_keyfields - 1))
- {
- char *p = *next_line;
- char c;
-
- while ((c = *p++) && c != '\n')
- /* Do nothing. */ ;
- *(p - 1) = 0;
- indexify (*next_line, ostream);
- }
- }
-
- finish_index (ostream);
-}
-
-/* Assume (and optionally verify) that each input file is sorted;
- merge them and output the result.
- Returns nonzero if any input file fails to be sorted.
-
- This is the high-level interface that can handle an unlimited
- number of files. */
-
-#define MAX_DIRECT_MERGE 10
-
-int
-merge_files (infiles, nfiles, outfile)
- char **infiles;
- int nfiles;
- char *outfile;
-{
- char **tempfiles;
- int ntemps;
- int i;
- int value = 0;
- int start_tempcount = tempcount;
-
- if (nfiles <= MAX_DIRECT_MERGE)
- return merge_direct (infiles, nfiles, outfile);
-
- /* Merge groups of MAX_DIRECT_MERGE input files at a time,
- making a temporary file to hold each group's result. */
-
- ntemps = (nfiles + MAX_DIRECT_MERGE - 1) / MAX_DIRECT_MERGE;
- tempfiles = (char **) xmalloc (ntemps * sizeof (char *));
- for (i = 0; i < ntemps; i++)
- {
- int nf = MAX_DIRECT_MERGE;
- if (i + 1 == ntemps)
- nf = nfiles - i * MAX_DIRECT_MERGE;
- tempfiles[i] = maketempname (++tempcount);
- value |= merge_direct (&infiles[i * MAX_DIRECT_MERGE], nf, tempfiles[i]);
- }
-
- /* All temporary files that existed before are no longer needed
- since their contents have been merged into our new tempfiles.
- So delete them. */
- flush_tempfiles (start_tempcount);
-
- /* Now merge the temporary files we created. */
-
- merge_files (tempfiles, ntemps, outfile);
-
- free (tempfiles);
-
- return value;
-}
-
-/* Assume (and optionally verify) that each input file is sorted;
- merge them and output the result.
- Returns nonzero if any input file fails to be sorted.
-
- This version of merging will not work if the number of
- input files gets too high. Higher level functions
- use it only with a bounded number of input files. */
-
-int
-merge_direct (infiles, nfiles, outfile)
- char **infiles;
- int nfiles;
- char *outfile;
-{
- struct linebuffer *lb1, *lb2;
- struct linebuffer **thisline, **prevline;
- FILE **streams;
- int i;
- int nleft;
- int lossage = 0;
- int *file_lossage;
- struct linebuffer *prev_out = 0;
- FILE *ostream = stdout;
-
- if (outfile)
- {
- ostream = fopen (outfile, "w");
- }
- if (!ostream)
- pfatal_with_name (outfile);
-
- init_index ();
-
- if (nfiles == 0)
- {
- if (outfile)
- fclose (ostream);
- return 0;
- }
-
- /* For each file, make two line buffers.
- Also, for each file, there is an element of `thisline'
- which points at any time to one of the file's two buffers,
- and an element of `prevline' which points to the other buffer.
- `thisline' is supposed to point to the next available line from the file,
- while `prevline' holds the last file line used,
- which is remembered so that we can verify that the file is properly sorted. */
-
- /* lb1 and lb2 contain one buffer each per file. */
- lb1 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer));
- lb2 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer));
-
- /* thisline[i] points to the linebuffer holding the next available line in file i,
- or is zero if there are no lines left in that file. */
- thisline = (struct linebuffer **)
- xmalloc (nfiles * sizeof (struct linebuffer *));
- /* prevline[i] points to the linebuffer holding the last used line
- from file i. This is just for verifying that file i is properly
- sorted. */
- prevline = (struct linebuffer **)
- xmalloc (nfiles * sizeof (struct linebuffer *));
- /* streams[i] holds the input stream for file i. */
- streams = (FILE **) xmalloc (nfiles * sizeof (FILE *));
- /* file_lossage[i] is nonzero if we already know file i is not
- properly sorted. */
- file_lossage = (int *) xmalloc (nfiles * sizeof (int));
-
- /* Allocate and initialize all that storage. */
-
- for (i = 0; i < nfiles; i++)
- {
- initbuffer (&lb1[i]);
- initbuffer (&lb2[i]);
- thisline[i] = &lb1[i];
- prevline[i] = &lb2[i];
- file_lossage[i] = 0;
- streams[i] = fopen (infiles[i], "r");
- if (!streams[i])
- pfatal_with_name (infiles[i]);
-
- readline (thisline[i], streams[i]);
- }
-
- /* Keep count of number of files not at eof. */
- nleft = nfiles;
-
- while (nleft)
- {
- struct linebuffer *best = 0;
- struct linebuffer *exch;
- int bestfile = -1;
- int i;
-
- /* Look at the next avail line of each file; choose the least one. */
-
- for (i = 0; i < nfiles; i++)
- {
- if (thisline[i] &&
- (!best ||
- 0 < compare_general (best->buffer, thisline[i]->buffer,
- (long) bestfile, (long) i, num_keyfields)))
- {
- best = thisline[i];
- bestfile = i;
- }
- }
-
- /* Output that line, unless it matches the previous one and we
- don't want duplicates. */
-
- if (!(prev_out &&
- !compare_general (prev_out->buffer,
- best->buffer, 0L, 1L, num_keyfields - 1)))
- indexify (best->buffer, ostream);
- prev_out = best;
-
- /* Now make the line the previous of its file, and fetch a new
- line from that file. */
-
- exch = prevline[bestfile];
- prevline[bestfile] = thisline[bestfile];
- thisline[bestfile] = exch;
-
- while (1)
- {
- /* If the file has no more, mark it empty. */
-
- if (feof (streams[bestfile]))
- {
- thisline[bestfile] = 0;
- /* Update the number of files still not empty. */
- nleft--;
- break;
- }
- readline (thisline[bestfile], streams[bestfile]);
- if (thisline[bestfile]->buffer[0] || !feof (streams[bestfile]))
- break;
- }
- }
-
- finish_index (ostream);
-
- /* Free all storage and close all input streams. */
-
- for (i = 0; i < nfiles; i++)
- {
- fclose (streams[i]);
- free (lb1[i].buffer);
- free (lb2[i].buffer);
- }
- free (file_lossage);
- free (lb1);
- free (lb2);
- free (thisline);
- free (prevline);
- free (streams);
-
- if (outfile)
- fclose (ostream);
-
- return lossage;
-}
-
-/* Print error message and exit. */
-
-void
-fatal (s1, s2)
- char *s1, *s2;
-{
- error (s1, s2);
- exit (TI_FATAL_ERROR);
-}
-
-/* Print error message. S1 is printf control string, S2 is arg for it. */
-
-void
-error (s1, s2)
- char *s1, *s2;
-{
- printf ("%s: ", program_name);
- printf (s1, s2);
- printf ("\n");
-}
-
-void
-perror_with_name (name)
- char *name;
-{
- char *s;
-
- if (errno < sys_nerr)
- s = concat ("", sys_errlist[errno], " for %s");
- else
- s = "cannot open %s";
- error (s, name);
-}
-
-void
-pfatal_with_name (name)
- char *name;
-{
- char *s;
-
- if (errno < sys_nerr)
- s = concat ("", sys_errlist[errno], " for %s");
- else
- s = "cannot open %s";
- fatal (s, name);
-}
-
-/* Return a newly-allocated string whose contents concatenate those of
- S1, S2, S3. */
-
-char *
-concat (s1, s2, s3)
- char *s1, *s2, *s3;
-{
- int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
- char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
-
- strcpy (result, s1);
- strcpy (result + len1, s2);
- strcpy (result + len1 + len2, s3);
- *(result + len1 + len2 + len3) = 0;
-
- return result;
-}
-
-/* Just like malloc, but kills the program in case of fatal error. */
-void *
-xmalloc (nbytes)
- int nbytes;
-{
- void *temp = (void *) malloc (nbytes);
-
- if (nbytes && temp == (void *)NULL)
- memory_error ("xmalloc", nbytes);
-
- return (temp);
-}
-
-/* Like realloc (), but barfs if there isn't enough memory. */
-void *
-xrealloc (pointer, nbytes)
- void *pointer;
- int nbytes;
-{
- void *temp;
-
- if (!pointer)
- temp = (void *)xmalloc (nbytes);
- else
- temp = (void *)realloc (pointer, nbytes);
-
- if (nbytes && !temp)
- memory_error ("xrealloc", nbytes);
-
- return (temp);
-}
-
-memory_error (callers_name, bytes_wanted)
- char *callers_name;
- int bytes_wanted;
-{
- char printable_string[80];
-
- sprintf (printable_string,
- "Virtual memory exhausted in %s ()! Needed %d bytes.",
- callers_name, bytes_wanted);
-
- error (printable_string);
- abort ();
-}
-
-#ifndef STDC_HEADERS
-void
-bzero (b, length)
- register char *b;
- register int length;
-{
-#ifdef VMS
- short zero = 0;
- long max_str = 65535;
-
- while (length > max_str)
- {
- (void) LIB$MOVC5 (&zero, &zero, &zero, &max_str, b);
- length -= max_str;
- b += max_str;
- }
- (void) LIB$MOVC5 (&zero, &zero, &zero, &length, b);
-#else
- while (length-- > 0)
- *b++ = 0;
-#endif /* not VMS */
-}
-#endif /* not STDC_HEADERS */
OpenPOWER on IntegriCloud