Newer texinfo.tex was imported from texinfo 5.1.
/xshogi/scanner.c
/xshogi/parser.c
/xshogi/xshogi
+
+/doc/gnushogi*.info
+/doc/gnushogi*.html
+/doc/*.ps
+/doc/*.pdf
+/doc/*.aux
+/doc/*.cp
+/doc/*.cps
+/doc/*.dvi
+/doc/*.fn
+/doc/*.ky
+/doc/*.log
+/doc/*.pg
+/doc/*.toc
+/doc/*.tp
+/doc/*.vr
# Cleanup.
#
-clean: gnushogi_clean @XSHOGICLEAN@
+clean: gnushogi_clean @XSHOGICLEAN@ doc_clean
gnushogi_clean:
cd $(GNUSHOGIDIR); $(MAKE) clean
xshogi_clean:
cd $(XSHOGIDIR); $(MAKE) clean
+doc_clean:
+ cd doc; $(MAKE) clean
+
#
# Building a distribution.
distclean: clean
rm -rf $(DISTCLEANFILES)
-
+ cd doc; $(MAKE) distclean
#
# Extra cleanup, for the maintainer only.
#
-MAINTAINERCLEANFILES = configure config.h.in doc/gnushogi.info
+MAINTAINERCLEANFILES = configure config.h.in
maintainerclean: distclean
rm -f $(MAINTAINERCLEANFILES)
-
+ cd doc; $(MAKE) maintainerclean
-DISTCLEANFILES = *.info* *.ps *.html
-
+MAINTAINERCLEANFILES = *.info*
+DISTCLEANFILES = *.ps *.html
CLEANFILES = *.log *.dvi *.aux *.dlog \
*.cp *.cps *.fn *.ky *.pg *.toc *.tp *.vr
info:
makeinfo gnushogi.texinfo
-tex:
+dvi:
texi2dvi gnushogi.texinfo
+pdf:
+ texi2pdf gnushogi.texinfo
+
# I do some egregious hacks to get around limitations of
# texi2html.
html:
texi2html -split_node gnushogi.texinfo
-view:
- xdvi gnushogi.dvi
-
-ps:
+ps: dvi
dvips -t letter gnushogi.dvi -o gnushogi.ps
-ps2:
+ps2: dvi
dvi2ps gnushogi.dvi > gnushogi.ps
spell:
do if [ -f $$file ]; then rm $$file; fi; \
done
-
-
+maintainerclean: distclean
+ @for file in $(MAINTAINERCLEANFILES); \
+ do if [ -f $$file ]; then rm $$file; fi; \
+ done
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: GNU Shogi manual</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: GNU Shogi manual">
-<META NAME="keywords" CONTENT="GNU Shogi manual: GNU Shogi manual">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC_Top"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1>GNU Shogi manual</H1></P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_1.html#SEC1">1. Introduction</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">What is GNU shogi?</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_2.html#SEC2">GNU GENERAL PUBLIC LICENSE</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The GNU General Public License.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_5.html#SEC5">2. About the game of shogi</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">General information, rules, etc.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_19.html#SEC19">3. gnushogi</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to play GNU shogi (gnushogi).</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_20.html#SEC20">4. xshogi</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The X interface to GNU shogi.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_21.html#SEC21">5. References and links</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Where to go for more information.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_22.html#SEC22">6. Acknowledgements</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_23.html#SEC23">7. Bugs</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Where and how to report bugs.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_24.html#SEC24">8. Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-This is gnushogi.info, produced by makeinfo version 4.3 from
-gnushogi.texinfo.
-
- This file describes how to use GNU shogi, a program which plays
-Shogi (Japanese chess).
-
- Copyright (C) 1999 Michael C. Vanier and 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 Free Software Foundation.
-
-\1f
-Indirect:
-gnushogi.info-1: 926
-gnushogi.info-2: 49337
-\1f
-Tag Table:
-(Indirect)
-Node: Top\7f926
-Node: Introduction\7f1484
-Node: License\7f2565
-Node: About shogi\7f21724
-Node: The rules of shogi\7f24319
-Node: The moves of the pieces\7f25979
-Node: The opening setup\7f29145
-Node: Promotion of pieces\7f30677
-Node: Drops\7f32518
-Node: Winning the game\7f34770
-Node: Draws\7f35484
-Node: Handicaps\7f37889
-Node: Notes for chess players\7f41315
-Node: Sample game\7f42033
-Node: Mating problems\7f49337
-Node: Shogi variants\7f51585
-Node: Differences between shogi and chess\7f55943
-Node: gnushogi\7f60351
-Node: xshogi\7f71829
-Node: References and links\7f87937
-Node: Acknowledgements\7f91081
-Node: Bugs\7f92590
-Node: Index\7f93073
-\1f
-End Tag Table
+++ /dev/null
-This is gnushogi.info, produced by makeinfo version 4.3 from
-gnushogi.texinfo.
-
- This file describes how to use GNU shogi, a program which plays
-Shogi (Japanese chess).
-
- Copyright (C) 1999 Michael C. Vanier and 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 Free Software Foundation.
-
-\1f
-File: gnushogi.info, Node: Top, Next: (dir), Prev: (dir), Up: (dir)
-
-GNU Shogi (Japanese chess)
-**************************
-
-* Menu:
-
-* Introduction:: What is GNU shogi?
-* License:: The GNU General Public License.
-* About shogi:: General information, rules, etc.
-* gnushogi:: How to play GNU shogi (gnushogi).
-* xshogi:: The X interface to GNU shogi.
-* References and links:: Where to go for more information.
-* Acknowledgements::
-* Bugs:: Where and how to report bugs.
-* Index::
-
-\1f
-File: gnushogi.info, Node: Introduction, Next: License, Prev: Top, Up: Top
-
-Introduction
-************
-
- GNU shogi is a program that plays shogi, the Japanese version of
-chess, against a human (or computer) opponent. This file describes how
-to use GNU shogi and also gives background information about the game
-of shogi.
-
- This file describes GNU shogi version 1.3.2. It was written by me,
-Mike Vanier, the current maintainer of GNU shogi. My email address is
-<mvanier@cs.caltech.edu>.
-
- GNU shogi is actually two programs:
-
-
-`gnushogi'
- is the text-based program which also contains the game-playing
- engine.
-
-`xshogi'
- is the X-windows graphical interface to gnushogi.
-
-
- Since xshogi invokes gnushogi, most players will just type "xshogi"
-and start playing.
-
- Disclaimer: I use the personal pronouns "him", "his" etc. to refer
-to a shogi player regardless of gender. That's easier than writing
-"his or her" all over the place. I don't mean to infer that women
-don't play shogi; in fact shogi is very popular in Japan among women as
-well as men.
-
-\1f
-File: gnushogi.info, Node: License, Next: About shogi, Prev: Introduction, 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
- 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
-
-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.
-
-\1f
-File: gnushogi.info, Node: About shogi, Next: gnushogi, Prev: License, Up: Top
-
-About the game of shogi
-***********************
-
- "Japanese chess cedes nothing in depth or beauty to the European
- game... it is at least as interesting."
-
- -- Alexander Alekhine
- (quoted in David Pritchard, `The Encyclopedia of Chess Variants')
-
-
- "... shogi [is] by far the most complex form of chess that has ever
- achieved widespread popularity."
-
- -- R. Wayne Schmittberger, `New Rules for Classic Games'
-
-
- Shogi is the version of chess played in Japan. It is strikingly
-different from standard chess (which I shall refer to henceforth as
-"international chess") and also to all other regional variants, because
-captured pieces can re-enter play on the side of the capturer. This
-has several interesting effects on the play of the game:
-
-
- 1. Shogi is much more complex than international chess, at least in
- terms of the average number of possible moves per turn (estimated
- at about 35 for chess and at about 80 for shogi).
-
- 2. There are almost no draws (about 1-2% of all games in professional
- play).
-
- 3. Exchanges complicate the play rather than simplifying it.
-
- 4. There are no "endgames" in the standard chess sense; all pieces
- remain in play throughout the game. Games typically end in a race
- to checkmate the other player before being checkmated oneself.
-
- 5. Ownership of a piece is not indicated by the color of the piece;
- instead, pieces are wedge-shaped and point towards the opponent.
- The name of the piece is inscribed in Kanji characters on the
- front of the piece.
-
- 6. Most importantly: it's more fun than other forms of chess :-)
-
-
-
- Shogi is extremely popular in Japan; it has been estimated that 20
-million Japanese can play shogi, of which perhaps 1 million are active
-players. It is even more popular there than the game of go, Japan's
-other favorite board game. There are a number of professional players
-who make a considerable amount of money playing in shogi tournaments,
-and the game receives extensive newpaper and television coverage.
-Despite this, the game has yet to become popular outside of Japan. Part
-of this is because the Kanji characters on the pieces scare away some
-people, but mostly it's due, I think, to lack of exposure to the game
-and to the difficulty of finding opponents. I hope that GNU shogi will
-help introduce shogi to a wider audience.
-
-* Menu:
-
-* The rules of shogi::
-* Sample game::
-* Mating problems::
-* Shogi variants::
-* Differences between shogi and chess::
-
-\1f
-File: gnushogi.info, Node: The rules of shogi, Next: Sample game, Prev: About shogi, Up: About shogi
-
-The rules of shogi
-==================
-
- Shogi is a two-person abstract strategy board game with full
-information (i.e. all pieces and moves are visible to both players at
-all times). It is in the chess family, being descended from the same
-ancestral game as international chess: the Indian game of Chaturanga.
-The two players are referred to as "Black" and "White", with Black
-moving first (unlike in international chess, where White moves first),
-and with movement alternating between the two players. Note that
-"Black" and "White" are just names; the pieces are not colored.
-Instead, they are flat, wedge-shaped pieces which point towards the
-opponent. The identity of a given piece is indicated by two Japanese
-Kanji characters on each piece. In fact, only the top character is
-needed to identify the piece and thus only the top character is used in
-shogi diagrams. I will use alphabetical equivalents in the diagrams
-here; to see what the Kanji characters look like, start up xshogi
-(*note xshogi::) and compare the starting setup there with the starting
-setup in this file (*note The opening setup::).
-
- The object of the game is to capture the opponent's King. The board
-is a grid of 9x9 uncolored squares, and pieces are placed on the
-squares. Each player begins with 20 pieces, described in the next
-section. Capture is by displacement, as in international chess.
-
-* Menu:
-
-* The moves of the pieces::
-* The opening setup::
-* Promotion of pieces::
-* Drops::
-* Winning the game::
-* Draws::
-* Handicaps::
-* Notes for chess players::
-
-\1f
-File: gnushogi.info, Node: The moves of the pieces, Next: The opening setup, Prev: The rules of shogi, Up: The rules of shogi
-
-The moves of the pieces
------------------------
-
- Each player at the beginning of a shogi game has a total of 20
-pieces of eight different types. The moves of the shogi pieces can be
-divided into three classes: "stepping" pieces, that only move one
-square at a time; "ranging" pieces that move any number of unobstructed
-squares in a line, and "jumping" pieces that can jump over obstructing
-pieces to reach their destination squares. Most pieces can also
-promote to different (usually stronger) pieces under certain
-circumstances (see the next section). All pieces capture the same way
-that they move (even pawns). The piece moves and promotions are as
-follows; each piece name is followed by the standard piece abbreviation:
-
- 1. The king (K). The king can move one square in any horizontal,
- vertical, or diagonal direction, just like the king in
- international chess. The king does not promote.
-
- 2. The rook (R). The rook can move any number of squares in a
- horizontal or vertical direction. The rook is the same as the
- rook in international chess (except that it can promote). A rook
- promotes to a "dragon king" or "dragon" for short (often just
- referred to as a "promoted rook"), which can move as a rook or can
- move one square in any diagonal direction.
-
- 3. The bishop (B). The bishop can move any number of squares in a
- diagonal direction. The bishop is the same as the bishop in
- international chess (except that it can promote). A bishop
- promotes to a "dragon horse" or "horse" for short (often just
- referred to as a "promoted bishop"), which can move as a bishop or
- can move one square in any horizontal or vertical direction.
- Note: the horse should not be confused with a knight (see below),
- as they are two completely different pieces.
-
- 4. The gold general (G). A gold general can move one square in any
- horizontal or vertical direction, or one square in a forward
- diagonal direction. Gold generals do not promote.
-
- 5. The silver general (S). A silver general can move one square in
- any diagonal direction, or one square straight forward. A silver
- general promotes to a gold general.
-
- 6. The knight (N). A knight can move one square straight forward
- followed by one square to either forward diagonal, jumping over
- intervening pieces if any. In other words, a knight moves like
- its international chess counterpart, but forward only. A knight
- promotes to a gold general. The knight is the only jumping piece,
- as in chess.
-
- 7. The lance (L). A lance can move any number of squares straight
- forward. A lance promotes to a gold general.
-
- 8. The pawn (P). A pawn can move one square straight forward. The
- pawn captures the same way that it moves, in contrast to
- international chess. There is also no initial two-space move for
- pawns and no _en-passant_ capture. A pawn promotes to a gold
- general; a promoted pawn is usually known as a "Tokin".
-
-
-\1f
-File: gnushogi.info, Node: The opening setup, Next: Promotion of pieces, Prev: The moves of the pieces, Up: The rules of shogi
-
-The opening setup
------------------
-
- The opening setup for shogi is as follows:
-
- 9 8 7 6 5 4 3 2 1
-+--------------------------------------------+
-| wL | wN | wS | wG | wK | wG | wS | wN | wL | a
-+--------------------------------------------+
-| | wR | | | | | | wB | | b
-+--------------------------------------------+
-| wP | wP | wP | wP | wP | wP | wP | wP | wP | c
-+--------------------------------------------+
-| | | | | | | | | | d
-+--------------------------------------------+
-| | | | | | | | | | e
-+--------------------------------------------+
-| | | | | | | | | | f
-+--------------------------------------------+
-| bP | bP | bP | bP | bP | bP | bP | bP | bP | g
-+--------------------------------------------+
-| | bB | | | | | | bR | | h
-+--------------------------------------------+
-| bL | bN | bS | bG | bK | bG | bS | bN | bL | i
-+--------------------------------------------+
-
-
- Here, "b" stands for "black" and "w" stands for "white", so that,
-for instance, "bL" means "black lance". The numbers above the files
-and the letters to the right of the ranks represent the most common
-notation system used for shogi by westerners (the Japanese also use
-Arabic numerals for the files but use Japanese numerals for the ranks).
-
-\1f
-File: gnushogi.info, Node: Promotion of pieces, Next: Drops, Prev: The opening setup, Up: The rules of shogi
-
-Promotion of pieces
--------------------
-
- In sharp contrast to international chess, where only pawns can
-promote to higher-ranked pieces, most of the pieces in shogi can
-promote. The promoted ranks are discussed in the section on piece
-moves (*note The moves of the pieces::) but are repeated here for
-reference:
-
-Pawn
- promotes to gold general (called a `tokin' in this case only).
-
-Lance
- promotes to gold general.
-
-Knight
- promotes to gold general.
-
-Silver general
- promotes to gold general.
-
-Gold general
- does not promote.
-
-Bishop
- promotes to "dragon horse" or just "horse" for short. The horse
- can move as a bishop or can move one square in any orthogonal
- direction.
-
-Rook
- promotes to "dragon king" or just "dragon" for short. The dragon
- can move as a rook or can move one square in any diagonal
- direction.
-
-King
- does not promote.
-
-
- The three ranks furthest away from each player constitute his/her
-"promotion zone". A player may, but is not required to, promote a
-piece after making a move in which the piece begins and/or ends in the
-promotion zone. Thus you can promote a piece when moving the piece into
-the promotion zone, out of the promotion zone, or entirely within the
-promotion zone. Promotion is mandatory in these cases:
-
-
- 1. You must promote a pawn or a lance after moving it to the last
- rank.
-
- 2. You must promote a knight after moving it to either of the last
- two ranks.
-
-
-
- These forced promotions ensure that a piece cannot be moved to a
-square from which it would have no further move.
-
- Pieces "dropped" onto the board (*note Drops::) always drop in the
-unpromoted state, even if they drop into the promotion zone.
-
-\1f
-File: gnushogi.info, Node: Drops, Next: Winning the game, Prev: Promotion of pieces, Up: The rules of shogi
-
-Drops
------
-
- When a player captures a piece, that piece is not removed from play.
-Instead, it becomes the property of the capturer and can re-enter play
-by being placed on (almost) any vacant square during the player's move.
-This is known as a "drop" and counts as a full move (in other words,
-you can either move a piece on the board or drop a piece onto the board
-during your move, but not both). All pieces drop in the unpromoted
-state. Pieces may be legally dropped in their promotion zone, but they
-do not promote on that turn.
-
- There are several restrictions on drops:
-
- 1. A pawn may not be dropped onto a file if there is already an
- unpromoted pawn belonging to the same player on that file. It is
- legal to drop a pawn on a file which contains a _promoted_ pawn
- belonging to the same player, however.
-
- 2. A pawn may not be dropped to give immediate checkmate on the move.
- A pawn is, however, permitted to be moved on the board to give
- immediate checkmate. This is a curious rule, and if anyone knows
- the reason for it I would appreciate it if they would contact me
- and explain it to me :-)
-
- 3. A pawn or piece may not be dropped onto a square from which they
- would have no legal move. This means that pawns and lances may
- not be dropped onto the last rank, and the knight may not be
- dropped onto the last or second-to-last rank.
-
-
- It is entirely permissible (and often advisable) to drop a piece or
-pawn between one's King and an attacking ranging piece. For this
-reason, the final checkmating move is nearly always an attack on the
-King from an adjacent square (except for an attack by a Knight).
-
- Captured pieces are said to be pieces "in hand".
-
- The drop is the primary distinguishing feature of Japanese chess,
-shared with no other popular chess-type game. It gives shogi a very
-aggressive quality, and dramatically increases the number of possible
-moves once a few pieces have been captured. Another interesting
-feature of shogi is that exchanges complicate play rather than
-simplifying it (as in international chess), because of the drop rule.
-
-\1f
-File: gnushogi.info, Node: Winning the game, Next: Draws, Prev: Drops, Up: The rules of shogi
-
-Winning the game
-----------------
-
- A game of shogi is won by capturing the opponent's king. In general,
-this is done by checkmating the king: attacking the king in such a way
-that the king cannot be defended no matter what the defending player
-moves. Note, though, that there is no rule that requires a player to
-defend a king which is being attacked. However, if he does not defend
-his king, the opponent is entirely free to capture it on the next move,
-thus winning the game. As in international chess, in practice most
-games end by resignation when one player realizes that he cannot escape
-checkmate.
-
-\1f
-File: gnushogi.info, Node: Draws, Next: Handicaps, Prev: Winning the game, Up: The rules of shogi
-
-Draws
------
-
- There are very few draws in shogi; only about 1-2% of professional
-games end in a draw. One reason for this is that material can never be
-depleted as in chess, because captured pieces are constantly re-entering
-play as a consequence of the drop rule. In fact, most of the ways a
-game can be drawn in chess are not allowed in shogi:
-
-
- * Draws cannot be offered.
-
- * There is no fifty-move rule.
-
- * A stalemate counts as a win for the stalemater. Stated otherwise:
- if you can't move, you lose.
-
- * Perpetual check is illegal (see below).
-
-
-
- There are only two legal ways in which a draw can occur:
-
-
- 1. A position (including the pieces in hand) occurs 4 times with the
- same player to move (called "Sennichite"). However, if this is
- caused by consecutive checks (direct attacks on the King,
- threatening to capture it on the next move) by one side, the
- player giving these checks loses the game. In other words,
- perpetual check results in a loss for the attacker who recreates
- the same position the 4th time.
-
- 2. Both players have moved their King into the the promotion zone (or
- they cannot be prevented from doing so) and the Kings cannot be
- checkmated. A King who has entered the promotion zone is known as
- an "entering King"; due to the forward orientation of most shogi
- pieces, it is very hard to mate such a King. In that case the
- players may decide to count their pieces as follows: the King does
- not count, the Rook and Bishop count as 5 points, and all other
- pieces as one point. Promotion is disregarded. If both players
- have at least 24 points the game is a draw (called "Jishogi"). If
- a player has less, he loses the game.
-
- Of course, a player can refuse to count pieces when he still has
- mating chances or chances to gain material which would affect the
- outcome of the counting. There is no strict rule about what to do
- if this is not the case, but nonetheless a player refuses to count
- up (e.g. because he does not have enough points for a draw). It
- has been generally accepted that in such a case the game ends and
- the pieces are counted after one player has managed to get all his
- pieces protected in the promotion zone.
-
-
-
-\1f
-File: gnushogi.info, Node: Handicaps, Next: Notes for chess players, Prev: Draws, Up: The rules of shogi
-
-Handicaps
----------
-
- Unlike international chess, shogi has a well-established handicap
-system which is used when players of different strengths play against
-each other. Handicaps range from small to huge, which makes it
-possible for weak players to play against even very strong players and
-have an even chance of winning.
-
- Shogi players are ranked as follows: the weakest rank is around 15
-"kyu", which represents a beginner. 14 kyu is higher than 15 kyu, 13
-kyu is higher still, and so on until you get to 1 kyu. The next highest
-rank is 1 "dan", followed by 2 dan, 3 dan and so forth. The highest
-amateur rank is 6 dan; professionals go up to 9 dan. However,
-professional ranks are not the same as amateur ranks; a professional 1
-dan is _much_ stronger than an amateur 1 dan. This system is similar
-to that used by go players (and also other Japanese sports such as
-karate).
-
- A handicap consists of the stronger player playing White and removing
-one or more pieces from his side of the board at the start of the game.
-These pieces are permanently removed from play; they are not in hand.
-
- The following is a list of the accepted handicaps, from weakest to
-strongest. The degree of the handicap, represented by the position in
-the list, represents the difference in rank between the two players for
-which the handicap is appropriate. These rules are taken from the books
-"Shogi for Beginners" by John Fairbairn and "The Art of Shogi" by Tony
-Hoskings (*note References and links::) and, I believe, represent
-current Japanese practice.
-
-
- 1. The stronger player removes his left lance (on 1a).
-
- 2. The players play a two-game match; in the first game the stronger
- player removes his left lance (on 1a), while in the second game he
- removes his bishop.
-
- 3. The stronger player removes his bishop.
-
- 4. The stronger player removes his rook.
-
- 5. The stronger player removes his rook and left lance.
-
- 6. The players play a two-game match; in the first game the stronger
- player removes his rook and left lance (on 1a), while in the
- second game he removes his rook and bishop.
-
- 7. The stronger player removes his rook and bishop. This is usually
- called a "two-piece" handicap.
-
- 8. The stronger player removes his rook, bishop, and both lances.
- This is called a "four-piece" handicap.
-
- 9. The stronger player removes his rook, bishop, both lances, and both
- knights. This is called a "six-piece" handicap.
-
- 10. The stronger player removes his rook, bishop, both lances, both
- knights, and both silvers. This is called an "eight-piece"
- handicap.
-
-
-
- Another advantage of playing handicap games is that the handicaps
-alter the optimal strategy for both players. For instance, handicaps
-all have their own opening lines which may bear little or no
-resemblance to those used in non-handicap shogi. This means that when
-learning handicap shogi, you are essentially learning completely new
-games which use the same equipment!
-
- The reader may wonder how on earth a player giving an eight-piece
-handicap, say, could possibly hope to win. Don't forget, though, that
-in shogi the opponent's pieces can be captured and then become part of
-one's own army. Thus, if the opponent plays badly enough, the number of
-pieces will soon even out.
-
-\1f
-File: gnushogi.info, Node: Notes for chess players, Prev: Handicaps, Up: The rules of shogi
-
-Notes for chess players
------------------------
-
- Here are a few miscellaneous things that may confuse chess players.
-Some of these have been mentioned elsewhere, but they bear repeating.
-
-
- 1. There is no queen.
-
- 2. Pawns capture the same way they move. There is no initial
- two-space pawn move and no _en-passant_ move.
-
- 3. There is no special castling move. There _are_ a large number of
- possible defensive formations referred to as "castles" (*note
- Sample game::) but there is no need for special moves to create
- them.
-
- 4. A given piece can only promote to _one_ other kind of piece.
-
-
-
-\1f
-File: gnushogi.info, Node: Sample game, Next: Mating problems, Prev: The rules of shogi, Up: About shogi
-
-Sample game
-===========
-
- This game was annotated by Pieter Stouten (*note References and
-links::). I have made some minor corrections. Note that captures are
-denoted by the "x" symbol e.g. Rx3f and drops are denoted by the "*"
-symbol e.g. R*3f. Check is indicated by a "+" after the move, e.g.
-R3f+. I recommend you use gnushogi/xshogi to play along with this
-game. In xshogi simply hit the "Force Moves" button after starting up,
-while in gnushogi enter the word "force" at the prompt. This will
-allow you to enter moves for both sides.
-
- Note also that the move numbering system used here is the chess-type
-system where one move means one move by each player. The Japanese count
-one move made by each player as two moves.
-
---------------------------------------------------------------------------
-
- Below you will find (the English translation of) an annotated game
-which was published in the Dutch Shogi magazine "81" and in the Dutch
-beginners booklet. It has proven to be a very useful game to explain
-some basic principles of Shogi. Also, it is a rather straightforward
-game compared to professional games where in most cases very diffuse
-middle game fights take place.
-
- Pieter Stouten, 14th May 1990.
-
---------------------------------------------------------------------------
-
- Black: Michael Trent (1-dan). White: David Murphy (2-dan).
-
- 1. P2f P3d 2. P2e B3c
-[ This move is necessary, as otherwise white can exchange pawns: 3. P2d
-Px2d 4. Rx2d. He would thus get a pawn in hand and open up his rook
-file. ]
-
- 3. P7f P4d
-[ White closes the bishop diagonal again. He plans to play ranging rook
-(the rook goes to 5b, 4b, 3 or 2b; a defensive strategy) and in that
-case he'd better avoid an exchange of bishops. One of the reasons is
-that he will have problems developing his pieces without leaving holes
-for bishop drops. ]
-
- 4. S4h R3b 5. P3f S4b 6. K6h K6b
-[ In general the rook plays an important role in the attacks. It is
-wise to move the king away from the area where the initial fights will
-be and both players act according to the Shogi proverb "keep the rook
-and king apart". ]
-
- 7. K7h K7b 8. P5f P5d 9. G4i-5h G4a-5b
-[ Both players use their second gold general to build their castle. ]
-
- 10. S6h
-[ In itself this move is not bad. However, it will become clear that
-black plans a quick attack and in that case it is wiser to omit this
-move. ]
-
- 10... S5c 11. P1f P1d
-[ The advance of the edge pawns must be timed very well. The remark at
-black's tenth move applies here too: this move is good if black wants to
-play a slow game, because it eliminates a future B1e. ]
-
- 12. P4f K8b 13. N3g S7b
-[ Black develops his knight in order to start an attack over the second,
-third and fourth files. White strengthens his king's position and
-awaits the attack. He aims at a counterattack as soon as black has
-broken through into the white camp. Probably white's breakthrough will
-take place later, but he has good compensation in the form of a stronger
-castle. This theme occurs very often in static rook versus ranging rook
-games. ]
-
- 14. P4e R4b
-[ Black starts his attack and white puts up a very passive defence. His
-rook has a hard task now to penetrate the black position. Moreover, he
-blocks his own bishop. It seems much better to start a counterattack
-with 14... P3e, later to be followed by B2b, B5a or Bx4d in order to use
-his rook more actively. ]
-
- 15. Px4d Sx4d 16. P*4e S5c
-[ 16... Sx4e is more active. A silver general is normally more valuable
-than a knight, but white gets two pawns in hand and black none, while
-the knight might come in handy for white too. ]
-
- 17. Bx3c+ Nx3c 18. P2d Px2d
-[ Black threatens to break through and white has to consider taking the
-pawn on 2d or starting a counterattack with Nx4e. If he chooses the
-latter, black can play Px2c+ followed by +P3c. The disadvantage is the
-black "tokin" (=promoted pawn) that white will get in his camp; the
-advantage is that it will cost black two more moves to promote his rook.
-Because white did not trust that the result after engaging in a
-"semeai" (=mutual attack) with 18...Nx4e would give a positive result,
-he captured the pawn on 2d. Making the right decision in moments like
-this often makes the difference between a win and a loss: miss one
-attacking chance and you will be forced to defend the whole game until
-the unavoidable defeat; on the other hand, an unsound attack can destroy
-all "aji" (=potential, meaning possibilities, threats) without getting
-anything in return. ]
-
- 19. Rx2d Nx4e 20. Nx4e Rx4e 21. R2a+ P*4g
-[ Now it becomes clear why black's 10. S6h was not good. Had this move
-been omitted, then white would not have had the time to play 13... S7b
-and after R2a+ the gold on 6a would hang. Thus black would have kept
-"sente" (=initiative). Instead of 21... P*4g, B*6d is a very good
-move, because after 22. P*2h black does not have a pawn in hand anymore
-and he is being threatened with the annoying 22... N*4f 23. G5g N3h+
-24. S4g +N4h also. Black can also counter 21... B*6d with 22. N*3g.
-White would then reply with 22... R4b 23. B*3c P*4g 24. Bx4b+ Sx4b. The
-white rook has played its role and instead of spending moves on saving
-it white starts to scatter black's defences by successive pawn drops on
-the fourth file: 25. Gx4g P*4f 26. G5g N*6e 27. G5h P4g+ 28. Gx4g P*4f.
-This analysis was provided by Kato Hifumi, 9-dan professional (the
-highest regular grade). Destroying the coherence of the enemy pieces
-(their shape) by dropping pawns is one of the most important Shogi
-techniques. With the actual move 21... P*4g white missed a good
-chance. ]
-
- 22. Sx4g P*4f 23. B*3g Px4g+ 24. +Rx6a +Px3g
-[ 23. B*3g seems pointless, but a closer look reveals that it is
-actually quite mean. On move 24 white cannot capture black's "Ryu"
-(=dragon =promoted rook) with his silver: 24... Sx6a 25. N*7d K7b 26.
-G*8b mate. By attacking the front of the white castle and threatening
-to mate him there, black has the chance to break down the white
-defences from the side. ]
-
- 25. +Rx5b S*6b
-[ Here 25... B*4d would be much better, because it is defensive and
-attacking at the same time. After e.g. 26. G*4c Bx9i+ 27. Gx5c black
-threatens 28. +Rx7b Kx7b 29. S*6a K8b 30. S*7a Kx7a 31. G*7b mate.
-White is one move quicker, however. He has the following beautiful
-"tsume" (mating sequence where every move is check): 27... N*8f 28. Px8f
-S*8g 29. Kx8g B*9h 30. K7h Bx8i+ 31. K8g +B8i-8h 32. K9f L*9e mate.
-This illustrates the sharpness of Shogi: one move can make the
-difference between winning and losing. ]
-
- 26. P*4f Rx4f
-[ This move eliminates white's last chances. 26... R4b 27. +Rx4b Sx4b
-28. R*4a seems annoying, but after 28... B*3c 29. S7g B*3b white wins
-the rook and with his "tokin" on 3g there still is some hope. ]
-
- 27. N*6e +P4g
-[ White cannot defend anymore, so he starts a desperate attack. Black
-does not lose the right track, however. ]
-
- 28. Nx5c+ +Px5h 29. +Nx6b +Px6h 30. Gx6h N*8f 31. Px8f B*6i 32.
-Gx6i R4h+ 33. N*6h +Rx6h 34. Gx6h S*8g 35. Kx8g N*9e 36. K7h
-Resigns
-[ White resigns here, because after 36... B*8g 27. K7g his attack has
-petered out. ]
-
+++ /dev/null
-This is gnushogi.info, produced by makeinfo version 4.3 from
-gnushogi.texinfo.
-
- This file describes how to use GNU shogi, a program which plays
-Shogi (Japanese chess).
-
- Copyright (C) 1999 Michael C. Vanier and 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 Free Software Foundation.
-
-\1f
-File: gnushogi.info, Node: Mating problems, Next: Shogi variants, Prev: Sample game, Up: About shogi
-
-Mating problems
-===============
-
- One good way to improve at shogi is to solve mating problems. There
-are several types of these problems, but the most common is called a
-"tsume-shogi" problem, or "tsume" problem for short. In a tsume
-problem, all pieces that are not on the board are assumed to be in the
-opponent's hand (except for your King, which is usually not shown).
-Every move you make must be check until the final checkmate. Your
-opponent may play any piece on the board or drop any of his pieces in
-hand in order to prevent the mate. In a properly constructed tsume
-problem, all of your pieces on the board and in hand must be essential
-to the solution. One consequence of this is that all of your pieces in
-hand must be played during the solution. There should only be one
-correct solution for the given number of moves. Tsume problems use
-Japanese-style move numbering; thus, a problem where you move (and give
-check), your opponent moves, and you move to give checkmate is called a
-three-mover. Here is a really trivial three-mover:
-
-
- 3 2 1
----------------+
-| | | | a
----------------+
-| | | wK | b
----------------+
-| | | | c
----------------+
-| bN | | | d
----------------+
-| | | | e
----------------+
-| | bN | | f
----------------+
-
-Black in hand: S, G
-
-
- Here, Black plays G*2b, White plays K1c, and Black plays G*1d mate.
-More typical tsume problems range from 5 moves to arbitrarily high
-numbers of moves, and they can be quite brain-busting. Tsume problems
-may seem artificial, but in the closing stages of the game where both
-players have a lot of pieces in hand, it is often necessary to give
-check at every move, or else your opponent will start a counterattack
-and will mate you before you mate him. A tsume problem is a worst-case
-scenario for the attacker: you have to mate your opponent even though he
-has every piece not on the board in hand, which means you have to
-develop sharp attacking skills. Many more tsume problems can be found
-on the internet; I particularly recommend Patrick Davin's "Shogi Nexus"
-(*note References and links::).
-
-\1f
-File: gnushogi.info, Node: Shogi variants, Next: Differences between shogi and chess, Prev: Mating problems, Up: About shogi
-
-Shogi variants
-==============
-
- Several historical variants of shogi exist. Most of these were
-invented before modern shogi (in some cases hundreds of years before),
-are much larger than modern shogi and are not played with drops. Thus,
-in many ways they are really more like giant chess games than like
-modern shogi. The only one of these games to have survived in Japan is
-Chu (middle) shogi, which is still played a little bit. Thanks to the
-efforts of George Hodges and John Fairbairn of the Shogi Association
-(two British shogi enthusiasts), these games were resurrected and rules
-and sets for them can still be purchased from George Hodges (*note
-References and links::). I hope to eventually extend GNU shogi so that
-it can play at least some of these games. There are also several
-non-historical variants of shogi; I don't know much about them but you
-can find information about them on the internet (*note References and
-links::).
-
- The historical variants include:
-
-
- 1. Tori (bird) shogi, played on a 7x7 board with 32 pieces in all;
- this is the only variant that is known to have been played with
- drops.
-
- 2. Wa shogi, played on an 11x11 board with 54 pieces. This game can
- be played with or without drops but the historical evidence favors
- the view that it was played without drops. However, most people
- who have tried it claim it is a much better game with drops, being
- even more intricate than standard shogi.
-
- 3. Chu (middle) shogi, played on a 12x12 board with 92 pieces. This
- was (and is) by far the most popular of the variants, and has 21
- different kinds of pieces in the starting line-up alone (along
- with several others that appear upon promotion). Unlike modern
- shogi, there are a tremendous number of ranging pieces and the
- game is definitely not played with drops. There is also an
- amazing piece called the Lion which has a double king move and can
- capture two pieces at once! Chu shogi has a small but fanatical
- following, some of whom consider it better than modern shogi.
-
- 4. Dai (great) shogi, played on a 15x15 board with 130 pieces. Other
- than the larger board, this game is very similar to Chu shogi.
-
- 5. Tenjiku (exotic) shogi, played on a 16x16 board with 176 pieces.
- This game is possibly the most complex tactical game in existence.
- There are many astoundingly powerful pieces, including one (the
- Fire Demon) that can capture up to eight opposing pieces in a
- single move! Despite the size of the game, checkmates can occur
- very suddenly (and often very early on) if one player makes a
- wrong move. Tenjiku also has a small but fanatical following, one
- of whom (Colin Adams) has written a book on the game which is
- available for download at
- `http://www.colina.demon.co.uk/tenjiku.html'.
-
- 6. Dai-dai (great-great) shogi, played on a 17x17 board with 192
- pieces. The opening setup alone has 64 different kinds of pieces!
- This game and the larger ones that follow sound pretty
- outlandish, but they have actually been played; a game of Dai-dai
- can supposedly be played in about 12 hours.
-
- 7. Maka-dai-dai (great-great-great) shogi, played on a 19x19 board
- with 192 pieces. For those for whom Dai-dai shogi is just too
- small :-)
-
- 8. Tai (grand) shogi, played on a 25x25 board with 354 pieces! Until
- recently, this was thought to be the biggest chess game ever
- devised, but now there is...
-
- 9. Kyoku tai (extremely grand?) shogi, played on a 36x36 board with
- 402 pieces. The rules for this have just been unearthed in an old
- Japanese book. Hopefully someone will soon organize a postal
- Kyoku tai shogi championship; maybe their distant ancestors could
- finish it :-)
-
- It is thought that the really huge games (Dai-dai and up) were
- never really played to any significant extent (gee, wonder why?)
- and were devised merely so that the creators could have the fun of
- inventing enormous games, amazing their friends and confounding
- their enemies. However, the games up to Tenjiku shogi at least
- appear to be quite playable, assuming one has the time.
-
-
-
-\1f
-File: gnushogi.info, Node: Differences between shogi and chess, Prev: Shogi variants, Up: About shogi
-
-Differences between shogi and chess
-===================================
-
- Some differences between shogi and international chess have been
-mentioned elsewhere in this document; I summarize them here for people
-who are interested in game comparisons. I won't try to deal with the
-thorny question of which game is "better" although my bias may have
-already come through :-) In fact, the drop rule makes the two games so
-different in character that arguing over which game is better is like
-comparing apples to oranges (you'd be better off comparing chess to Chu
-shogi (*note Shogi variants::). However, I believe that if you are a
-chess fan you'll really like shogi as well, and shogi is also popular
-with many people who don't particularly like chess.
-
- Here are the significant differences between chess and shogi:
-
-
- 1. In shogi, captured pieces become the property of the capturer and
- can re-enter play by being dropped onto almost any vacant square.
- In chess, captured pieces are out of the game. Thus, in shogi,
- piece exchanges complicate the play significantly while in chess
- they simplify it.
-
- 2. The shogi board is 9x9; the chess board is 8x8.
-
- 3. Shogi has five pieces with no counterpart in chess: the gold and
- silver generals, the lance, the promoted rook and the promoted
- bishop. Chess has one piece with no counterpart in shogi: the
- queen. The knight's move in shogi is much more restrictive than
- in chess. Pieces in shogi generally have a much smaller range of
- movement than in chess (unless they are in hand).
-
- 4. In shogi, all pieces except the gold general and the king can
- promote, but only to one kind of piece. Promotion is easier in
- shogi because the promotion zone is closer to the starting
- position of the pieces (especially pawns). In chess, only the
- pawn can promote, but it can promote to any other piece except the
- king.
-
- 5. In shogi, pawns capture the same way they move. There is no
- initial two-space pawn move and hence no _en-passant_ captures.
- In chess, pawns capture diagonally which means that opposing pawns
- can block each other.
-
- 6. In shogi, you only have one rook and one bishop. Note that the
- bishop is not restricted to only one "color" square (squares in
- shogi aren't colored, but never mind) because promoted bishops can
- also move one square orthogonally.
-
- 7. There is no special castling move in shogi. The term "castle" is
- used in shogi to denote a defensive formation consisting of
- (usually) three generals which protect the king. There are many
- such castles (about 40 or so have names). *Note Sample game::.
-
- 8. Draws are much rarer in shogi than in chess. Perpetual check is
- not allowed. Stalemate is a virtual impossibility, and is a loss
- for the stalematee.
-
- 9. Since pieces are never out of play in shogi, chess-type endgames
- involving only a few pieces do not occur.
-
- 10. Shogi games are generally longer than chess games (about 60-70
- moves is typical).
-
- 11. Shogi has a well-developed handicap system which is in general use;
- chess does not.
-
-
-
- The effects of all these differences on play include (in my opinion):
-
-
- 1. Piece/pawn structures in chess are more rigid than in shogi. Pawns
- block each other and pawns, once advanced, cannot ever retreat. In
- shogi, you can repair the hole caused by a pawn advance by
- exchanging the pawn and dropping it back where you want it. Thus
- shogi is more fluid than chess and less "structural".
-
- 2. Counterattack is MUCH more common in shogi than in chess. Games
- typically end in mutual mating attacks, where each player is
- trying to checkmate the other player before being checkmated
- himself. This makes tempo incredibly important and also makes
- sacrificial play quite common.
-
- 3. Attacks involving only ranging pieces are more a feature of chess
- than of shogi. A shogi attack typically uses a ranging piece or
- pieces to support an attack by short-range pieces (especially
- generals). It is very rare to mate a king with a non-adjacent
- ranging piece in shogi since the player whose king is threatened
- can almost always interpose by dropping a piece.
-
-
-
-\1f
-File: gnushogi.info, Node: gnushogi, Next: xshogi, Prev: About shogi, Up: Top
-
-gnushogi
-********
-
- This section describes how to run the "gnushogi" program.
-
-
- SYNOPSIS
-
-
- gnushogi [ [[-]a] [-b bookfile] [-B binbookfile] [-C] [-h langfile]
-[-L langfile] [-r length] [-R] [-s pathname] [-l pathname] [-S
-binbooksize] [-t] [-c size] [-T size] [-v] [-x] [-X] arg1 arg2 ]
-
-
- DESCRIPTION
-
-
- GNU shogi (gnushogi) plays a game of japanese chess (shogi) against
-the user or it plays against itself.
-
- At startup gnushogi reads the binbook file if it is present. It then
-looks for a book file. If it is present it adds its contents to the
-binbook data. If the binbook file is writable a new combined binbook
-file is written.
-
- Gnushogi is a modified version of the gnuchess program. It has a
-simple alphanumeric board display, or it can be used with the xshogi
-program under X windows. The program gets its opening moves from the
-file gnushogi.bbk which is located in a directory specified in the
-Makefile. To invoke the program type:
-
-
-`gnushogi -C'
- simple curses based version
-
-`gnushogi -X (or just gnushogi)'
- xshogi compatible version
-
-`gnushogi -R'
- raw test display version
-
-
- TIME CONTROLS
-
-
- If one argument is given, it is the search time per move in
-[minutes:]seconds. So gnushogi 30 will generate one move every 30
-seconds, while gnushogi 5:00 will generate one move every 5 minutes.
-
- If two or more arguments are given, they will be used to set
-tournament time controls with the first argument of each pair being the
-number of moves and the second being the total clock time in
-minutes[:seconds]. Thus, entering gnushogi 60 5 will set the clocks
-for 5 minutes (300 seconds) for the first 60 moves, and gnushogi 30
-3:30 will allow 3 minutes and 30 seconds for 30 moves.
-
- gnushogi 30 5 1 :30 will allow 5 minutes for the first 30 moves and
-30 seconds for each move after that. Up to 4 pairs of controls may be
-specified.
-
- If no argument is given the program will prompt the user for level of
-play.
-
- For use with xshogi see the documentation on that program. *Note
-xshogi::.
-
-
- BOOK
-
-
- The book gnushogi.tbk consists of a sequence of openings. An opening
-begins with a line starting with a # (the rest of the line is a
-comment). Following this is a series of moves in algebraic notation
-alternating between black and white separated by whitespace. A move
-may have a ? after it indicating this move should never be made in
-this position. Moves are stored as position:move so transpositions
-between openings can take place.
-
-
- HASHFILE
-
-
- The hashfile if created should be on the order of 4 megabytes; you
-can create such a hashfile by typing "gnushogi -c 22" (see below). This
-file contains positions and moves learned from previous games. If a
-hashfile is used the computer makes use of the experience it gained in
-past games. Tests run so far show that it plays no worse with the
-hashfile than without, but it is not clear yet whether it provides a
-real advantage.
-
-
- LEGAL MOVES
-
-
- Note: Piece letters are determined by the language file. What is
-specified here is the default (English).
-
- Once gnushogi is invoked, the program will display the board and
-prompt the user for a move. To enter a move, use the notation 7g7f
-where the first letter-number pair indicates the origin square and the
-second letter-number pair indicates the destination square. An
-alternative is to use the notation P7f where the first letter indicates
-the piece type (P,L,N,S,G,B,R,K). To promote append a + the type of
-the new piece to the move, as in 2d2c+ or P2c+. Note that you must use
-capital letters for the pieces by default.
-
-
- COMMAND-LINE OPTIONS
-
-
-`-a'
- Do not search on opponent's time.
-
-`a'
- Do search on opponent's time.
-
-`-b BOOKFILE'
- Use bookfile for opening book.
-
-`-B BINBOOKFILE'
- Use binbookfile for binary opening book.
-
-`-c SIZE'
- Create a new HASHFILE. File size is 2^size entries of
- approximately 65+? bytes.
-
-`-C'
- Use curses-based display mode.
-
-`-h'
- Do not use hashfile.
-
-`h'
- Do use hashfile.
-
-`-l PATHNAME'
- Pathname of the loadfile used with get or xget.
-
-`-L LANG'
- Use language lang from the file gnushogi.lang. If -L is not
- specified it uses the first language in the file.
-
-`-P PLYLEVELS'
- Number of plys to include in the binbookfile. For generating a
- binbookfile.
-
-`-r LENGTH'
- Rehash _length_ times in searching entries for position in
- transposition table.
-
-`-R'
- Use raw text display mode. This can be used for dumb terminals or
- for systems that don't have curses.
-
-`-s PATHNAME'
- Pathname of the save file to use with the save command.
-
-`-S SIZE'
- Size of binbookfile for memory based books. For creating a
- binbookfile.
-
-`-t'
- Show statistics for HASHFILE.
-
-`-T SIZE'
- Set the transposition table size to 2^size entries.
-
-`-v'
- Show version and patchlevel.
-
-`-x VALUE'
- Use value as the evaluation window xwndw.
-
-`-X'
- Use xshogi display mode (the default).
-
-
- COMMANDS
-
-
- In addition to legal moves, the following commands can be entered at
-the gnushogi prompt. Note: command names are determined by the language
-file and may vary with the implementation. The default language is
-English.
-
-`alg'
- allow algebraic input (not implemented).
-
-`Awindow'
- change Alpha window (default score + 90).
-
-`Bwindow'
- change Beta window (default score - 90).
-
-`beep'
- toggles beeping after each move (default: on).
-
-`bd'
- updates the current board position on the display.
-
-`book'
- turns off use of the opening library.
-
-`both'
- causes the computer to play both sides of a shogi game.
-
-`black'
- causes the computer to play as White, if the computer was to move
- first.
-
-`bsave'
- saves a game to disk as a book textfile. The program will prompt
- the user for a file name.
-
-`gamein'
- toggles game mode time control. Assumes the time specified for
- time control is the time for a complete game. Input with the
- level command should be the game time and the expected number of
- moves in a game. go command must be given.
-
-`coords'
- show coordinates on the display (visual only).
-
-`contempt'
- allows the value of _contempt_ to be modified.
-
-`debug'
- asks for a piece as color piece, as wb or bn, and shows its
- calculated value on each square.
-
-`debuglevel'
- sets level of debugging output if compiled with debug options.
-
-`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. If depth is set to (say) 4 ply, the program will 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). If you set a maximum time per move and also use the
- depth command, the search will stop at the specified time or the
- specified depth, whichever comes first.
-
-`easy'
- toggles easy mode (thinking on opponents time) on and off. The
- default is easy mode ON. If easy mode is disabled, the keyboard
- is polled for input every so often and when input is seen the
- search is terminated. It may also be terminated with a sigint.
-
-`edit'
- allows the user to set up a board position.
- - # clear the board.
-
- - c toggle piece color.
-
- - . command will exit setup mode.
-
- - p3b place a pawn on 3b
-
- - p3b+ place a promoted pawn on 3b
-
- - p* place a pawn in hand (among the captured pieces)
-
-
- Pieces are entered by typing a letter (p,l,n,s,g,b,r,k) for the
- piece followed by the coordinate. Here, letter case is ignored.
-
- The usual warning about the language file applies.
-
-`exit'
- exits gnushogi.
-
-`first'
- tells the computer to move first. Computer begins searching for a
- move. (same as "go").
-
-`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 "black"
- or "white" commands.
-
-`get'
- retrieves a game from disk. The program will prompt the user for
- a file name.
-
-`go'
- tells the computer to move first. Computer begins searching for a
- move. (same as "first").
-
-`hash'
- use/don't use hashfile.
-
-`hashdepth'
- allows the user to change the minimum depth for using the hashfile
- and the number of moves from the beginning of the game to use it.
-
-`help'
- displays a short description of the commands and the current
- status of options.
-
-`hint'
- causes the program to supply the user with its predicted move.
-
-`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.
-
-`list'
- writes the game moves and some statistics on search depth, nodes,
- and time to the file "shogi.lst".
-
-`material'
- toggle material flag - draws on no pawns and both sides < rook.
-
-`new'
- starts a new game.
-
-`p'
- evaluates the board and shows the point score for each piece. The
- total score for a position is the sum of these individual piece
- scores.
-
-`post'
- causes the program to display the principal variation and the score
- during the search. A score of 100 is equivalent to a 1 pawn
- advantage for the computer.
-
-`quit'
- exits the game.
-
-`random'
- causes the program to randomize its move selection slightly.
-
-`rcptr'
- set recapture mode.
-
-`remove'
- backout the last level for both sides. Equal to 2 undo's.
-
-`reverse'
- causes the board display to be reversed. That is, the Black's
- pieces will now appear at the top of the board.
-
-`rv'
- reverse board display.
-
-`save'
- saves a game to disk. The program will prompt the user for a file
- name.
-
-`switch'
- causes the program to switch places with the opponent and begin
- searching.
-
-`test'
- performs some speed tests for MoveList and CaptureList generation,
- and ScorePosition position scoring for the current board.
-
-`time'
- set computer's time remaining, intended for synchronizing clocks
- among multiple players.
-
-`tsume'
- toggle tsume mode. In tsume mode, not all possible moves will be
- generated. If a king is in check, only moves that get the king out
- of check are generated. If the king is not in check, only moves
- that give check to the opponent's king are generated.
-
-`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).
-
-`white'
- causes the computer to play as Black; if the computer is to move
- first the go command must be given.
-
-`xget'
- read an xshogi position file.
-
-`xsave'
- save as an xshogi position file.
-
-`xwndw'
- change X window. The window around alpha/beta used to determine
- whether the position should be scored or just estimated. Note:
- this has _nothing_ to do with xshogi or X windows; the terms are
- completely separate.
-
-
-\1f
-File: gnushogi.info, Node: xshogi, Next: References and links, Prev: gnushogi, Up: Top
-
-xshogi
-******
-
- This section describes how to run the "xshogi" program.
-
-
- SYNOPSIS
-
-
- xshogi [ options ]
-
-
- DESCRIPTION
-
-
- xshogi provides an X11/Xt/Athena Widgets user interface for gnushogi.
-With xshogi you can play gnushogi, set up arbitrary positions, force
-variations, or watch xshogi manage a game between two shogi programs.
-Furthermore, it can be used as an interface between two players on
-different displays.
-
- xshogi can also be used as a shogi board to play out games. It will
-read through a game file or allow a player to play through a variation
-manually (force mode). This is useful for keeping track of email postal
-games or browsing games off the net.
-
- After starting xshogi, you can make moves by pressing mouse button 1
-while the cursor is over a square with your piece on it and dragging the
-mouse to another square. If the move is illegal, gnushogi will not
-allow it. xshogi will then retract the move.
-
-
- COMMAND-LINE OPTIONS
-
-
- The following command line options also correspond to X resources
-that you can set in your .Xdefaults file.
-
-
-`[standard Xt options]'
- xshogi accepts standard Xt options like -display, -geometry, and
- -iconic.
-
-`-tc or -timeControl minutes[:seconds]'
- Amount of time for a set of moves determined by movesPerSession.
- If this number of moves is played within the time control period,
- xshogi resets the time clocks. Default: 5 minutes.
-
-`-mps or -movesPerSession moves'
- Number of moves in a time control period. Default: 40 moves.
-
-`-st or -searchTime minutes[:seconds]'
- Tell gnushogi to spend at most the given amount of time searching
- for each of its moves. Without this option, gnushogi chooses its
- search time based on the number of moves and amount of time
- remaining until the next time control. Setting this option also
- sets -clockMode to False.
-
-`-sd or -searchDepth number'
- Tell gnushogi to look ahead at most the given number of moves when
- searching for a move to make. Without this option, gnushogi
- chooses its search depth based on the number of moves and amount
- of time remaining until the next time control. Setting this
- option also sets -clockMode to False.
-
-`-clock or -clockMode (True | False)'
- Determines whether or not to use the clock. If clockMode is
- False, the clock does not run, but the side that is to play next
- is still highlighted.
-
-`-td or -timeDelay seconds'
- Time delay between moves during "Load Game". This doesn't have to
- be a round number. Try -td 0.4. Default: 1 second.
-
-`-nsp or -noShogiProgram (True | False)'
- If this option is True, xshogi acts as a passive shogi board; it
- does not try to start a shogi program, not even to check whether
- moves made in Force mode are legal. It also sets -clockMode to
- False. Default: False.
-
-`-fsp or -firstShogiProgram program'
- Name of first shogi program. In matches between two machines, this
- program plays white. Default: "gnushogi".
-
-`-ssp or -secondShogiProgram program'
- Name of second shogi program, if needed. In matches between two
- machines, this program plays black; otherwise it is not started.
- Default: "gnushogi".
-
-`-fh or -firstHost host'
- Name of host the first shogi program plays on. Default:
- "localhost".
-
-`-sh or -secondHost host'
- Name of host the second shogi program plays on. Default:
- "localhost".
-
-`-rsh or -remoteShell shell_name'
- Some systems do not use rsh as the remote shell. This option
- allows a user to name the remote shell command. This should be
- done in the resource file.
-
-`-mm or -matchMode (False | Init | Position | Opening)'
- Automatically run a game between firstShogiProgram and
- secondShogiProgram. If matchMode is set to Init, xshogi will
- start the game with the initial shogi position. If matchMode is
- set to Position, xshogi will start the game with the position
- specified by the loadPositionFile resource. If matchMode is set
- to Opening, xshogi will play out the opening moves specified by
- the -loadGameFile resource. If the -saveGameFile resource is set,
- a move record for the match will be saved in the specified file.
- Default: "False".
-
-`-lgf or -loadGameFile file'
- Name of file to read a game record from. Game files are found in
- the directory named by the SHOGIDIR environment variable. If this
- variable is not set, the current directory is used unless the file
- name starts with a /.
-
-`-lpf or -loadPositionFile file'
- Name of file to read a game position from. Position files are
- found in the directory named by the SHOGIDIR environment variable.
- If this variable is not set, the current directory is used unless
- the file name starts with a /.
-
-`-sgf or -saveGameFile file'
- Name of file to save a game record to. Game files are saved in the
- directory named by the SHOGIDIR environment variable. If this
- variable is not set, the current directory is used unless the file
- name starts with a /.
-
-`-spf or -savePositionFile file'
- Name of file to save a game position to. Position files are saved
- in the directory named by the SHOGIDIR environment variable. If
- this variable is not set, the current directory is used unless the
- file name starts with a /.
-
-`-coords or -showCoords (True | False)'
- If this option is True, xshogi displays algebraic coordinates
- along the board's left and bottom edges. The default is False.
- The coordFont resource specifies what font to use.
-
-`-mono or -monoMode (True | False)'
- Determines whether xshogi displays its pieces and squares with two
- colors or four. You shouldn't have to specify monochrome. xshogi
- will determine if this is necessary.
-
-`-pc or -pieceColor color'
- Color specification for pieces suitable for XParseColor().
- Default: #FFFFD7.
-
-`-sc or -squareColor color'
- Same for squares. Default: #EBDFB0.
-
-`-wps or -westernPieceSet (True | False)'
- Choose the Western style piece set.
-
-`-npb or -normalPawnBitmap file'
-
-`-nnb or -normalKnightBitmap file'
-
-`-nbb or -normalBishopBitmap file'
-
-`-nrb or -normalRookBitmap file'
-
-`-nkb or -normalKingBitmap file'
- Names of the bitmap files for the bitmap piece icons.
-
-`-rpb or -reversePawnBitmap file'
-
-`-rnb or -reverseKnightBitmap file'
-
-`-rbb or -reverseBishopBitmap file'
-
-`-rrb or -reverseRookBitmap file'
-
-`-rkb or -reverseKingBitmap file'
- Names of the bitmap files for the outline piece icons.
-
-`-debug or -debugMode (True | False)'
- Turns on debugging printout.
-
-
- OTHER X RESOURCES
-
-
-`initString'
- The actual string that is sent to initialize the shogi program can
- be set from .Xdefaults. It can't be set from the command line
- because of syntax problems. The default value is
- "new\nbeep\nrandom\neasy\n". The "new" and "beep" commands are
- required. You can remove the "random" command if you like;
- including it causes gnushogi to randomize its move selection
- slightly so that it doesn't play the same moves in every game.
- Even without "random", gnushogi randomizes its choice of moves
- from its opening book. You can also remove "easy" if you like;
- including it toggles easy mode off, causing gnushogi to think on
- your time. That is, if "easy" is included in the initString, GNU
- Shogi thinks on your time; if not, it does not. (Yes, this does
- seem backwards, doesn't it.) You can also try adding other
- commands to the initString; see the gnushogi documentation (*note
- gnushogi::) for details.
-
-`blackString and whiteString'
- These resources control what is sent when the Machine Black and
- Machine White buttons are selected. This is mostly for
- compatibility with obsolete versions of gnushogi.
-
- Alternate bitmaps for piece icons can be specified either by
- choosing one of the built-in sets or with the file name resources
- described above. There are three built-in sets of piece bitmaps
- available, large (the default), medium, or small. It is easiest
- to select the set you prefer in the .Xdefaults file:
-
- XShogi*boardSize: Medium
-
- The font used for button labels and comments can be changed in the
- .Xdefaults file. You may want to choose a smaller font if you are
- using the small pieces:
-
- XShogi*font: helvetica_oblique12
-
- The font used for coordinates (when the showCoords option is True)
- can be set similarly:
-
- XShogi*coordFont: helvetica_10
-
- If you are using a grayscale monitor, try setting the colors to:
-
- XShogi*pieceColor: gray100
- XShogi*squareColor: gray60
-
- COMMAND BUTTONS AND KEYS
-
-
-`Quit'
- Quits xshogi. Q or q is a keyboard equivalent.
-
-`Reset'
- Resets xshogi to the beginning of a shogi game. It also deselects
- any game or position files.
-
-`Flip View'
- inverts the view of the shogi board.
-
-`Hint'
- displays a move hint from gnushogi.
-
-`Load Game'
- plays a game from a record file. If no file is specified a popup
- dialog asks for a filename. Game files are found in the directory
- named by the SHOGIDIR environment variable. If this variable is
- not declared then the current directory is used unless the file
- name starts with a /. G or g is a keyboard equivalent. The game
- file parser will accept almost any file that contains moves in
- algebraic notation. If the first line begins with `#', it is
- assumed to be a title and is displayed. Text enclosed in
- parentheses or square brackets is assumed to be commentary and is
- displayed in a pop-up window. Any other text in the file is
- ignored.
-
-`Load Position'
- sets up a position from a position file. If no file is specified a
- popup dialog asks for a filename. Position files are found in the
- directory named by the SHOGIDIR environment variable. If this
- variable is not declared then the current directory is used unless
- the file name starts with a /. Position files must be in the
- format that the Save Position command writes.
-
-`Save Game'
- saves a game to a record file. If no file is specified a popup
- dialog asks for a filename. If the filename exists, the user is
- asked whether the current game record is be appended to this file
- or if the file should be replaced. Game files are saved in the
- directory named by the SHOGIDIR environment variable. If this
- variable is not declared then the current directory is used unless
- the file name starts with a /. Game files are human-readable, and
- can also be read back by the Load Game command. Furthermore, they
- are accepted as gnushogi text bookfiles.
-
-`Save Position'
- saves a position to a position file. If no file is specified a
- popup dialog asks for a filename. Position files are saved in the
- directory named by the SHOGIDIR environment variable. If this
- variable is not declared then the current directory is used unless
- the file name starts with a /. Position files are human-readable,
- and can also be read back by the Load Position command.
-
-`Machine White'
- forces gnushogi to play white.
-
-`Machine Black'
- forces gnushogi to play black.
-
-`Force Moves'
- forces a series of moves. That is, gnushogi stops playing and
- xshogi allows you to make moves for both white and black.
-
-`Two Machines'
- plays a game between two computer programs.
-
-`Forward'
- moves forward through a series of remembered moves. F or f is a
- keyboard equivalent.
-
-`Backward'
- moves backward through a series of remembered moves. As a side
- effect, puts xshogi into Force Moves mode. B or b is a keyboard
- equivalent.
-
-`Pause'
- pauses the clocks or (in Load Game mode) pauses the game being
- loaded. Press Pause again to continue. P or p is a keyboard
- equivalent.
-
-`Edit Position'
- lets you set up an arbitrary board position. Use mouse button 1
- to drag pieces to new squares, or to delete a piece by dragging it
- off the board or dragging an empty square on top of it. To drop a
- new piece on a square, press mouse button 2 or 3 over the square.
- This brings up a menu of black pieces (button 2) or white pieces
- (button 3). Additional menu choices let you empty the square or
- clear the board. You can set the side to play next by clicking on
- the Black or White indicator at the top of the screen.
-
-`Challenge'
- allows you to make a two display game between two human players.
- Enter the display you want to connect to. If you are allowed to
- connect, a new board is displayed at the remote display.
- Challenge mode can only be stopped by pressing "quit".
-
-`Select Level'
- allows you to reset the clocks for both players. Enter the number
- of moves and the number of minutes in which the moves should be
- done.
-
-`Move NOW'
- force computer to stop thinking and to make the current best move.
-
-`Iconify I, i, C or c'
- iconifies xshogi.
-
-
- LIMITATIONS
-
-
- If you press the Pause button during GNU Shogi's turn, xshogi
-will stop the clocks, but gnushogi will still make a move.
-
- After a mate or draw when playing against gnushogi, if you back up
-with the Backward button, the clocks are reset (because gnushogi
-has exited and must be restarted).
-
- The game parser recognizes only algebraic notation.
-
-
- AUTHORS
-
-
- Original authors of XBoard: Chris Sears and Dan Sears.
-
- Enhancements for XBoard (Version 2.0): Tim Mann.
-
- Conversion to XShogi (Version 1.1): Matthias Mutz.
-
- Current maintainer: Mike Vanier.
-
-
- COPYRIGHT INFORMATION
-
-
- XShogi borrows its piece bitmaps from CRANES Shogi.
-
- Copyright 1991 by Digital Equipment Corporation, Maynard,
-Massachusetts. Enhancements Copyright 1992 Free Software Foundation,
-Inc. Enhancements Copyright 1993 Matthias Mutz. Further enhancements
-copyright 1999 by Michael Vanier and the Free Software Foundation, Inc.
-
- The following terms apply to Digital Equipment Corporation's
-copyright interest in XBoard:
-
- All Rights Reserved
-
- Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
- DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
- The following terms apply to the enhanced version of XShogi
-distributed by the Free Software Foundation:
-
- This file is part of XSHOGI.
-
- XSHOGI 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
-XSHOGI General Public License for full details.
-
- Everyone is granted permission to copy, modify and redistribute
-XSHOGI, but only under the conditions described in the XSHOGI General
-Public License. A copy of this license is supposed to have been given
-to you along with XSHOGI 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.
-
-\1f
-File: gnushogi.info, Node: References and links, Next: Acknowledgements, Prev: xshogi, Up: Top
-
-References and links
-********************
-
- There are very few English-language books for people learning shogi.
-The two I recommend are:
-
-
- 1. `Shogi for Beginners, 2nd. Edition', by John Fairbairn. This is a
- superb beginner's book in every way, covering all phases of the
- game. It was out of print for a long time, but has now been
- reprinted and is available either from Kiseido
- (`http://www.labnet.or.jp/~kiseido') or from George Hodges (see
- below).
-
- 2. `The Art of Shogi', by Tony Hoskings. This is one step up from the
- Fairbairn book. It covers a lot of ground, and is especially
- noteworthy for its detailed treatment of opening lines. You can
- order this book from Amazon.com's UK branch
- (`http://www.amazon.co.uk').
-
-
-
- Another book you may find is `Shogi: Japan's Game of Strategy' by
-Trevor Leggett. This book is very elementary and is somewhat outdated,
-having been published first in 1966. However, it does feature a paper
-shogi board and punch-out pieces, so if you want a really cheap shogi
-set you might pick this book up. It is still in print.
-
- Two books that are no longer in print but are definitely worth
-getting if you find them are `Guide to Shogi Openings' and `Better
-Moves for Better Shogi', both by Aono Teriuchi. They are published in a
-bilingual edition (English/Japanese) and are the only books on shogi in
-English written by a Japanese professional shogi player. John Fairbairn
-did the translation from Japanese to English.
-
- Shogi sets are available from:
-
-
- George F. Hodges
- P.O. Box 77
- Bromley, Kent
- United Kingdom BR1 2WT
-
-
- George also sells equipment for all the historical shogi variants
-(*note Shogi variants::) (except for Kyoku tai shogi) and also sells
-back issues of the magazine "Shogi" which he published for 70 issues in
-the late 70's to late 80's. This magazine is STRONGLY recommended; it
-contains more information about shogi in English than you will ever
-find anywhere else.
-
- Here are some useful URLs:
-
-
-Pieter Stouten's shogi page: `http://www.shogi.net'
- This is the main shogi-related site on the internet, with links to
- almost all the other sites.
-
-Roger Hare's shogi page: `http://www.ed.ac.uk/~rjhare/shogi'
- This has lots of information, including full rules to most of the
- shogi variants.
-
-Patrick Davin's Shogi Nexus: `http://www.vega.or.jp/~patrick/shogi/'
- There's lots of cool stuff on this site; my favorite is the
- extensive collection of Tsume-shogi (mating) problems, both for
- beginners and more advanced players.
-
-Steve Evans' shogi page: `http://www.netspace.net.au/~trout/index.html'
- Steve has written a program that plays almost all of the shogi
- variants, unfortunately it only runs on Windows :-(
-
-Hans Bodlaender's chess variant pages: `http://www.cs.ruu.nl/~hansb/d.chessvar'
- This page has an almost unimaginable variety of rules for different
- chess variants, including many shogi variants (historical and
- non-historical).
-
-
-\1f
-File: gnushogi.info, Node: Acknowledgements, Next: Bugs, Prev: References and links, Up: Top
-
-Acknowledgements
-****************
-
- I would like to thank the following people:
-
-
- * Matthias Mutz, who originally developed GNU shogi as a spin-off of
- GNU chess and who very kindly let me take over the maintenance of
- this very interesting project.
-
- * Richard Stallman and the Free Software Foundation, for creating an
- organization where anyone can contribute software for the common
- good of all, for making GNU/Linux possible, and especially for
- writing emacs and gcc, without which my working life would be
- intolerable.
-
- * Georges Hodges, for starting the Shogi Association in England,
- without which I would probably never have heard of shogi, for
- supplying shogi equipment, for publishing the excellent magazine
- "Shogi" (now sadly defunct), for personally answering all my silly
- questions by mail, and for being the ambassador of shogi to the
- West.
-
- * Pieter Stouten, for having the most comprehensive shogi site on the
- World Wide Web (`http://www.shogi.net'), and for maintaining the
- shogi-l mailing list. Go to Pieter's web site for more
- information on subscribing to the list. Also thanks to everyone
- who contributes and has contributed to that list.
-
- * Matt Casters, for testing GNU shogi. Matt and I will be working
- together on improving the solution engine in future versions of
- this program.
-
-
-
-\1f
-File: gnushogi.info, Node: Bugs, Next: Index, Prev: Acknowledgements, Up: Top
-
-Bugs
-****
-
- The motto of GNU shogi is "100% bug-free or you don't pay!" :-) In
-the extremely unlikely case (*ahem*) that you do find a bug, please
-send me (Mike Vanier) an email at <mvanier@cs.caltech.edu>. Also, feel
-free to send me comments, complaints, out-and-out raves, suggestions,
-plane tickets to Hawaii, and/or large suitcases filled with unmarked,
-untraceable hundred-dollar bills.
-
-\1f
-File: gnushogi.info, Node: Index, Prev: Bugs, Up: Top
-
-Index
-*****
-
-* Menu:
-
-* Acknowledgements: Acknowledgements.
-* Books: References and links.
-* Chu Shogi: Shogi variants.
-* Dai Shogi: Shogi variants.
-* Dai-dai Shogi: Shogi variants.
-* Draws: Draws.
-* Drops: Drops.
-* gnushogi: gnushogi.
-* GPL: License.
-* Handicaps: Handicaps.
-* Introduction: Introduction.
-* Kyoku Tai Shogi: Shogi variants.
-* License: License.
-* Mailing lists: References and links.
-* Maka-dai-dai Shogi: Shogi variants.
-* Opening setup: The opening setup.
-* Piece moves: The moves of the pieces.
-* Piece promotion: Promotion of pieces.
-* References: References and links.
-* Rules: The rules of shogi.
-* Sample game: Sample game.
-* Shogi variants: Shogi variants.
-* Shogi vs. Chess: Differences between shogi and chess.
-* Tai Shogi: Shogi variants.
-* Tenjiku Shogi: Shogi variants.
-* Tori Shogi: Shogi variants.
-* Variants: Shogi variants.
-* Wa Shogi: Shogi variants.
-* Web sites: References and links.
-* Winning the game: Winning the game.
-* xshogi: xshogi.
-
-
+++ /dev/null
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
-%%Title: gnushogi.dvi
-%%Pages: 52
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 612 792
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t letter gnushogi.dvi -o gnushogi.ps
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource: TeX output 2004.07.07:1715
-%%BeginProcSet: texc.pro
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-TeXDict begin 40258431 52099146 1000 600 600 (gnushogi.dvi)
-@start
-%DVIPSBitmapFont: Fa cmbxti10 14.4 1
-/Fa 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A
-EA0FE0121271912B>46 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmti9 9 1
-/Fb 1 47 df<121C127F12FFA412FE12380808778718>46 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmr9 9 52
-/Fc 52 122 df<B512F0A514057F921A>45 D<123C127E12FFA4127E123C08087A8715>
-I<13075B5B137FEA07FFB5FC13BFEAF83F1200B3B3A2497E007FB51280A319327AB126>
-49 D<EB3FC0EBFFF0000313FC380F80FF391E007F80001CEB3FC048EB1FE048130F15F0
-0060130712FC6C14F87E1403A3007E1307123CC7FC15F0A2140F15E0EC1FC0A2EC3F8015
-00147E5C495A5C495A495A495A49C7FC133E133C4913185B485A48481330485A48C7FC00
-1C1470001FB512F05A5AB612E0A31D327CB126>I<EB1FE0EBFFFC4813FF3907E03F8039
-0F001FC0001EEB0FE0001CEB07F0123F018013F8140313C01380A2381F0007C7FC15F0A2
-EC0FE015C0141FEC3F80EC7E00EB01F8EB7FE014FCEB003FEC1FC0EC0FE0EC07F015F814
-0315FC140115FEA3127EB4FCA415FC48130312780070EB07F86C14F0003C130F001FEB1F
-E0390FE03F800003B51200C613FCEB1FE01F347DB126>I<EC01C0A214031407A2140F14
-1FA2143F147F146F14CF1301EB038F140F1307130E130C131C13381330137013E013C0EA
-0180120313001206120E120C5A123812305A12E0B71280A3C7380FC000A94A7E0107B512
-80A321337EB226>I<000C14C0380FC00F90B5128015005C5C14F014C0D80C18C7FC90C8
-FCA9EB0FC0EB7FF8EBF07C380FC03F9038001F80EC0FC0120E000CEB07E0A2C713F01403
-A215F8A41218127E12FEA315F0140712F8006014E01270EC0FC06C131F003C14806CEB7F
-00380F80FE3807FFF8000113E038003F801D347CB126>I<14FE903807FF80011F13E090
-383F00F0017C13703901F801F8EBF003EA03E01207EA0FC0EC01F04848C7FCA248C8FCA3
-5A127EEB07F0EB1FFC38FE381F9038700F809038E007C039FFC003E0018013F0EC01F813
-0015FC1400A24814FEA5127EA4127F6C14FCA26C1301018013F8000F14F0EBC0030007EB
-07E03903E00FC03901F81F806CB51200EB3FFCEB0FE01F347DB126>I<1230123C003FB6
-FCA34814FEA215FC0070C7123800601430157015E04814C01401EC0380C7EA0700140614
-0E5C141814385CA25CA2495A1303A3495AA2130FA3131F91C7FCA25BA55BA9131C20347C
-B126>I<EB0FE0EB7FFC90B5FC3903F01F803907C007C0390F0003E0000EEB01F0001E13
-00001C14F8003C1478A3123EA2003F14F86D13F0EBC001D81FF013E09038F803C0390FFE
-07803907FF0F006C13DE6C13F87EEB3FFE8001F713C0D803E313E0D8078013F0390F007F
-F8001E131F003EEB07FC003C1303481301EC007E12F848143EA2151EA37E153C1278007C
-14787E6C14F0390F8003E03907F01FC00001B5120038007FFCEB1FE01F347DB126>I<EB
-0FE0EB7FF8EBFFFE3803F83F3907E00F80390FC007C0D81F8013E0EC03F0EA3F0048EB01
-F8127EA200FE14FC1400A415FEA5007E1301A2127F7E1403EA1F80000F13073807C00E38
-03E01C3801F03838007FF090381FC0FC90C7FC1401A215F8A215F01403001F14E0383F80
-0715C0140FEC1F809038003F00001C137E381F01FC380FFFF0000313C0C690C7FC1F347D
-B126>I<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC187FA34A6C7EA202707FEC601F
-A202E07FECC00FA2D901807F1507A249486C7EA301066D7EA2010E80010FB5FCA2498001
-18C77EA24981163FA2496E7EA3496E7EA20001821607487ED81FF04A7ED8FFFE49B512E0
-A333367DB53A>65 D<B7FC16E016F83A03FC0003FE0001EC00FFEE7F80EE3FC0161F17E0
-160F17F0A617E0161F17C0EE3F80EE7F0016FEED03FC90B612F05E9039FC0007FCED00FE
-EE3F80EE1FC0EE0FE017F0160717F8160317FCA617F81607A2EE0FF0EE1FE0163FEE7FC0
-0003913803FF00B75A16F816C02E337DB236>I<DA03FE130C91393FFF801C91B512E090
-3A03FE01F83C903A0FF0003C7CD91FC0EB0EFCD97F80130701FEC7120348481401000315
-005B4848157C485A173C485A171C123F5B007F160CA390C9FC481600AB7E6D150CA3123F
-7F001F161C17186C7E17386C6C15306C6C15706D15E012016C6CEC01C0D97F80EB0380D9
-1FC0EB0F00D90FF0131ED903FE13FC0100B512F0023F13C0DA03FEC7FC2E377CB437>I<
-B77E16F016FE3A01FE0001FF00009138003FC0EE0FE0707E707E707E707E177E177FEF3F
-80A2EF1FC0A3EF0FE0A418F0AA18E0A3171F18C0A21880173F18005F17FE5F4C5AEE07F0
-4C5AEE3FC000014AB45AB748C7FC16F8168034337EB23B>I<DA03FE130C91393FFF801C
-91B512E0903A03FE01F83C903A0FF0003C7CD91FC0EB0EFCD97F80130701FEC712034848
-1401000315005B4848157C485A173C485A171C123F5B007F160CA390C9FC4893C7FCAA03
-03B512E07E7F92390003FE00705A123F7F121FA26C7E7F12076C7E7F6C6C14036C7E6D6C
-1307D91FC0EB0E7CD90FF0EB1C3CD903FEEBF81C0100B5EAF00C023F01C0C7FCDA03FEC8
-FC33377CB43C>71 D<B5D8FE03B512F8A3000190C73807FC006C486E5AB390B7FCA349C7
-1203B3A3486C4A7EB5D8FE03B512F8A335337EB23A>I<B512FEA3000113006C5AB3B3A7
-487EB512FEA317337EB21C>I<B500FE903807FFF8A3000190C7000113006C48EC00FC17
-F04C5A4C5A4CC7FC160E5E5E5E5E4B5A4B5A4BC8FC150E5D5D15F84A7E14034A7EEC0EFF
-5C4A6C7E4A6C7EECE01FD9FFC07F4A6C7E4A6C7E5B6F7E6F7EA26F7E707EA2707E707E16
-0F83707E707EA283486C913807FF80B500FE013F13FCA336337EB23C>75
-D<B512FEA3D803FEC9FC6C5AB3A9EE0180A416031700A45EA25E5E5E5E16FE00031407B7
-FCA329337DB230>I<D8FFFC923801FFF86D5DA20003EFFE00D801BFED06FCA3D99F8014
-0CA2D98FC01418A3D987E01430A2D983F01460A3D981F814C0A3D980FCEB0180A2027EEB
-0300A36E1306A26E6C5AA36E6C5AA36E6C5AA26E6C5AA36E6C5AA3913800FD80A2037FC7
-FCA3486C133ED80FF04B7EB5011C90387FFFF8A33D337CB246>I<EC07FC91387FFFC090
-3901FC07F0903907E000FCD90F80133E013FC76C7E017E6E7E496E7E48486E7E48486E7E
-A248486E7E000F8249157E001F167FA24848ED3F80A2007F17C0A290C9121FA24817E0AB
-6C17C06D153FA3003F17806D157FA2001F17006D5D000F5E6C6C4A5AA26C6C4A5A00015E
-6C6C4A5A017E4A5A6D4A5AD91FC0017FC7FCD907E013FC903901FC07F09039007FFFC0DA
-07FCC8FC33377CB43C>79 D<B612FEEDFFC016F03A03FC0007FC0001EC00FE167FEE3F80
-EE1FC017E0160FA217F0A617E0A2EE1FC0A2EE3F80EE7F0016FEED07F890B65A168001FC
-C9FCB3A2487EB512F8A32C337DB234>I<B612FCEDFF8016F03A01FE0007FC0000EC01FE
-ED007F707E707E83160F83A65FA24C5AA24C5A047EC7FC4B5AED0FF090B612C093C8FC90
-39FE001FC0ED07F06F7E6F7E150082167E167FA583A5180C17C0A2043F131C486C1618B5
-00FEEB1FE0040F1338933807F070C93801FFE09338003F8036357EB239>82
-D<90381FE00390387FFC0748B5FC3907F01FCF390F8003FF48C7FC003E80814880A20078
-8000F880A46C80A27E92C7FC127F13C0EA3FF013FF6C13F06C13FF6C14C06C14F0C68001
-3F7F01037F9038003FFF140302001380157F153FED1FC0150F12C0A21507A37EA26CEC0F
-80A26C15006C5C6C143E6C147E01C05B39F1FC03F800E0B512E0011F138026C003FEC7FC
-22377CB42B>I<007FB712FEA390398007F001D87C00EC003E0078161E0070160EA20060
-160600E01607A3481603A6C71500B3AB4A7E011FB512FCA330337DB237>I<B500F09038
-03FFF8A3D807FEC8EA7FC06C48ED1F000001161E6D151C00001618A26D15386D1530A26D
-6C5CA26E14E0011F5DA26D6C495AA28001074AC7FCA26D6C1306A28001015CA26E131C01
-001418806E5BA2ED8070023F1360A26E6C5AA215E1020F5BA2DA07F3C8FCA215FBEC03FE
-A36E5AA26E5AA31570A235357EB23A>86 D<B5D8F007B539800FFFF0A3000390C7273FF0
-00011300D801FC6E48EB007C1A386D140F00001930836D020715706D1860A26E496C14E0
-013F60A26ED919FC1301011F60A26ED930FE1303010F95C7FCA26ED9607F5B01071706A2
-6E9039C03F800E0103170CA2913BFC01801FC01C01011718A2913BFE03000FE038010017
-30A2DAFF06EB07F0027F5EA2038CEB03F8023F5EA203D8EB01FC021FEDFD80A203F0EB00
-FF020F93C8FCA24B800207157EA24B143E0203153CA24B141C020115184C357FB24F>I<
-EB7F803803FFF0380F80FC381C003E003F133F6D6C7E6E7EA26E7EEA1F00C7FCA4EB01FF
-131FEBFF873803FC07EA0FF0EA1FC0EA3F80127F13004815C05AA3140FA26C131F6C133B
-3A3F8071F180391FC1E1FF2607FFC013003900FE003C22237DA126>97
-D<EA03F012FFA312071203AEEC3F80ECFFE09038F3C0F89038F7007E01FE7F49EB1F8049
-EB0FC05BED07E016F0A2150316F8AA16F0150716E0A2ED0FC07F6DEB1F8001ECEB3F0001
-CF137C90388381F8903801FFE0C76CC7FC25357EB32B>I<EB07F8EB3FFF9038FC07C039
-01F000E03903E003F03807C007120FEA1F80123F90380003E04890C7FCA2127E12FEAA12
-7FA26C14187F001F14386D1330000F14706C6C13E03903F001C03900FC0F8090383FFE00
-EB07F01D237EA122>I<153FEC0FFFA3EC007F81AEEB07F0EB3FFCEBFC0F3901F003BF39
-07E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E6C6C5BA26C6C5B6C6C
-4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B>I<EB0FE0EB7FFCEB
-F83F3903F00F80D807E013C0390FC007E0381F800315F0EA3F0014014814F8127EA212FE
-A2B6FCA248C8FCA5127E127FA26C1418A26C6C1338000F14306D13706C6C13E03901F003
-C03900FC0F00EB3FFEEB07F01D237EA122>I<EB01FCEB07FF90381F078090383E0FC0EB
-7C1F13FCEA01F8A20003EB070049C7FCACB512F0A3D803F0C7FCB3A7487E387FFFE0A31A
-357FB417>I<151F90391FC07F809039FFF8E3C03901F07FC73907E03F033A0FC01F8380
-9039800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C6C48C7FCEBF07C380E
-FFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C14FC4880381F000100
-3EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390FC001F83903F007E0C6
-B51280D91FFCC7FC22337EA126>I<EA03F012FFA312071203AEEC1FC0EC7FF09038F1E0
-FC9038F3807C9038F7007E13FE497FA25BA25BB3486CEB7F80B538C7FFFCA326347EB32B
->I<EA0780EA0FC0EA1FE0A4EA0FC0EA0780C7FCAAEA07E012FFA3120F1207B3A6EA0FF0
-B5FCA310337EB215>I<EB03C0EB07E0EB0FF0A4EB07E0EB03C090C7FCAAEB03F013FFA3
-13071303B3B01238127C00FE13E0130714C0130F007C138038381F00EA1FFCEA07F01443
-84B217>I<EA03F012FFA312071203AF913803FFE0A36E1300EC00F8EC01E05D4A5A020F
-C7FC141C5C5C14F0EBF3F8EBF7FC13FEEBFC7EEBF87F496C7E141F6E7E8114076E7E8114
-016E7E81486CEBFF80B500C313F0A324347EB329>I<EA07E012FFA3120F1207B3B3A7EA
-0FF0B5FCA310347EB315>I<2703F01FE013FF00FF90267FF80313C0903BF1E07C0F03E0
-903BF3803E1C01F02807F7003F387FD803FE1470496D486C7EA2495CA2495CB3486C496C
-487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FFEB7FF09038F1E0FC9038F3
-807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7FFFCA326217EA02B>I<EB
-07F0EB3FFE9038FC1F803901F007C03903C001E000078048486C7E48C7127CA248147E00
-3E143E007E143FA300FE1580A8007E1500A36C147EA26C147C6D13FC6C6C485A00075C39
-03F007E03900FC1F80D93FFEC7FCEB07F021237EA126>I<3903F03F8000FFEBFFE09038
-F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0ED07F0A3ED03F8A9150716
-F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381F89038F1FFE0D9F07FC7FC
-91C8FCAA487EB512C0A325307EA02B>I<3803E07C38FFE1FF9038E38F809038E71FC0EA
-07EEEA03ECA29038FC0F8049C7FCA35BB2487EB512E0A31A217FA01E>114
-D<EBFF06000713CE381F00FE003C133E48131E140E5A1406A27EA200FE90C7FC6C7EEA7F
-FC383FFFC014F0000F7F6C7FC67FEB0FFF1300EC3F8000C0131F140F6C1307A37E15006C
-5B6C130E6C5B38F7807838E1FFE038C07F8019237EA11E>I<1330A51370A313F0A21201
-A212031207381FFFFEB5FCA23803F000AF1403A814073801F806A23800FC0EEB7E1CEB1F
-F8EB07E0182F7FAD1E>I<D803F0133F00FFEB0FFFA30007EB007F000380B35DA35D1201
-6D4813800000903803BFFC90387E073FEB1FFED907F8130026227EA02B>I<B5EBFFF0A3
-D80FF0EB3F800007EC1F000003140E150C6D131C00011418A26C6C5BA26D1370017E1360
-137F6D5BA290381F8180A214C3010F90C7FCA2EB07E6A214FE6D5AA26D5AA36D5AA21460
-24217E9F29>I<B53A1FFF81FFF0A33C07F801FC003F8001F049EB1E0000030100141C81
-6C6C017C1318A26D017E1338000002FE1330A290267E01FF5B159F168090263F030F5BA2
-16C0903A1F8607C180A202C613E390260FCC0390C7FCA2D907FC13F6ECF80116FE6D486C
-5AA36D481378A36D48133034217F9F37>I<B53801FFF8A32603FE0013806C48EB7C0000
-001478017E1370017F5B90383F81C090381F8380D90FC3C7FCEB07E614FE6D5A6D5A6D7E
-80805B9038039F809038071FC09038060FE0EB0C0790381C03F0496C7E01707FEBF00000
-0180000FECFF8026FFFC0313FCA326207F9F29>I<3A7FFF807FF8A33A07F8001FC00003
-EC0F800001EC070015066C6C5BA26D131C017E1318A26D5BA2EC8070011F1360ECC0E001
-0F5BA2903807E180A214F3010390C7FC14FBEB01FEA26D5AA31478A21430A25CA214E05C
-A2495A1278D8FC03C8FCA21306130EEA701CEA7838EA1FF0EA0FC025307F9F29>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmti10 10.95 18
-/Fd 18 118 df<387FFFFCA3B5FCA21605799521>45 D<120FEA3FC0127FA212FFA31380
-EA7F00123C0A0A77891C>I<147E49B47E903907C1C38090391F80EFC090383F00FF017E
-137F4914804848133F485AA248481400120F5B001F5C157E485AA215FE007F5C90C7FCA2
-1401485C5AA21403EDF0385AA21407EDE078020F1370127C021F13F0007E013F13E0003E
-137FECF3E1261F01E313C03A0F8781E3803A03FF00FF00D800FC133E252977A72E>97
-D<EC1FC0ECFFF0903803F03C903807C01E90381F800E90383F000F017E133F4913FF485A
-485A000714FE5B000F14FC48481300A2485AA3127F90C8FCA35A5AA6481403007E140715
-0F151E003E143C15786C14F0EC03E0390F800F803903E07E003801FFF838003FC0202977
-A72A>99 D<EE3F80ED1FFF1700A2ED007FA2167EA216FEA25EA21501A25EA21503A25EA2
-1507A25E147E903801FF8F903807C1CF90391F80EFC090383F00FF017E137F5B48486D5A
-485AA2485A000F92C7FC5B001F5CA24848137EA215FE127F90C75AA214015A485CA21403
-16384814F0A21407167891380FE070127C021F13F0007E013F5B003E137FECF3E1261F01
-E35B3A0F8781E3802703FF00FFC7FCD800FC133E294077BE2E>I<EC3F80903801FFE090
-3807E0F890381F803CEB3E0001FC131E485A485A12074848133E49133C121F4848137C15
-F8EC03F0397F000FE0ECFF809038FFFC00B512C048C8FCA45AA61506150E151E007C143C
-15786C14F0EC01E06CEB07C0390F801F003807C0FC3801FFF038007F801F2976A72A>I<
-EC03F0EC0FFC91383E0E1C9138FC077E903901F003FE1303903807E001D90FC013FCEB1F
-80A2EB3F004914F8137E01FE1303A2484814F0A2150712034914E0A2150F12074914C0A2
-151FA216805B153F1203ED7F006D5BA200015B0000495A9038F80F7E90387C1EFEEB1FF8
-903807E0FC90C7FC1401A25DA21403A25D001C1307007F5C48130F5D4A5A4AC7FC48137E
-00F85B387C03F0381FFFC0D803FEC8FC273B7CA72A>103 D<EB01FC13FF5CA21303A25C
-A21307A25CA2130FA25CA2131FA25CA2133FA291C8FCEC03F890387F0FFE91383E0F80D9
-7E7813C0ECE007D9FFC013E014801400A2485A5BA25B0003140F16C05BA20007141F1680
-5BA2000F143F16005B5D001F147EEDFE074913FCA2003F0101130FEDF80E1300161E48EC
-F01CA2007E1538A200FE1570020013E048EC7FC00038EC1F0028407ABE2E>I<1478EB01
-FCA21303A314F8EB00E01400AD137C48B4FC38038F80EA0707000E13C0121E121CEA3C0F
-1238A2EA781F00701380A2EAF03F140012005B137E13FE5BA212015BA212035B14381207
-13E0000F1378EBC070A214F0EB80E0A2EB81C01383148038078700EA03FEEA00F8163E79
-BC1C>I<EB07F0EA03FF14E0A2EA000FA214C0A2131FA21480A2133FA21400A25BA2137E
-A213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123FA290C7
-FCA25A1307127EA2EAFE0F130E12FCA2131E131CA2EA7C381378EA3C70EA1FE0EA078014
-4079BE17>108 D<D801F0D93F80137F3D07FC01FFE003FFC03D0F3E07C1F80F83F03D0E
-1F0F00FC1E01F8001E011C90387C3800001C49D97E707F003C01F05C0038157F4A5C2678
-3FC05C12704A91C7FC91C7127E00F003FE1301494A5CEA007EA20301140301FE5F495CA2
-03031407000160495C180F03075D0003051F13E0494A1480A2030FEC3F810007F001C049
-5CA2031F91383E0380120F494AEC0700A2033F150E001FEF1E1C4991C7EA0FF80007C700
-0EEC03E0432979A74A>I<D801F0EB3F803A07FC01FFE03A0F3E07C1F83A0E1F0F00FC00
-1E011C137C001C49137E003C13F012385C38783FC012705C91C7FC00F015FE495CEA007E
-A2150101FE5C5BA2150300015D5B15075E0003020F13704914C0A2031F13F00007ED80E0
-5B1681EE01C0120F49EC0380A2EE0700001FEC0F0E49EB07FC0007C7EA01F02C2979A733
->I<EC1FC0ECFFF8903803F07C90380FC01FEB1F8090393F000F80017E14C04913074848
-14E0485A12075B000F15F0485AA2485AA2ED0FE0127F90C7FCA2151F4815C05AA2ED3F80
-A2ED7F00A248147E007C5C007E13015D4A5A003E495A6C495A4A5A260F803EC7FC3807C0
-FC3801FFF038003F80242977A72E>I<903903E001F890390FF807FE903A1E7C1E0F8090
-3A1C3E3C07C0013C137801389038E003E0EB783F017001C013F0ED80019038F07F0001E0
-15F8147E1603000113FEA2C75AA20101140717F05CA20103140F17E05CA20107EC1FC0A2
-4A1480163F010F15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA9C1FC7FCEC0FFC
-EC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0B5FCA22D3A80A72E>
-I<D801F013FC3A07FC07FF803A0F3E0F03C0260E1F1C13E0001EEB380F001C1370003CEB
-E01F123814C0D8783F14C00070903880070092C7FC91C8FC12F05BEA007EA313FE5BA312
-015BA312035BA312075BA3120F5BA3121F5B0007C9FC232979A726>114
-D<EC7F80903801FFE0903807C0F890381F003C013E131C013C131E017C133E49137E15FE
-A2000114FCA215706D13007FEBFFC014FC6C13FF15806D13C06D13E0010F13F01300140F
-14071403120C123F387F80011403D8FF0013E0A300FCEB07C000F0EB0F8012700078EB1F
-006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB01C0EB03F01307A25CA2130F
-A25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500D8007EC7FC13FEA25BA21201
-A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380A2003F133C1438EB00781470
-14F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B81E>I<137C48B4141C26038F
-80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001805BA2D8F03F13
-03140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1C0491481A2153F
-1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C9039
-1FFC07F8903907F001F02A2979A731>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmbx12 13.14 35
-/Fe 35 122 df<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E0
-1010778F22>46 D<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B200
-7FB712E0A52B4777C63D>49 D<ECFFF80107EBFF80013F14F090B612FC4881480101EBFF
-802707F8003F13C0D80FE0010F13E0D81F806D13F0003F80D87FF06D13F86D15FC6D7F00
-FF16FE6D147FA217FF82A36C5A6C5A6C5A6C5AC95A17FEA3EEFFFCA24B13F817F05D17E0
-4B13C017804B13004B5A4B5A5EED7FE04B5A4A5B4A90C7FCEC07FC4A5A4A5A4B131FEC3F
-804AC7FC14FE4948143E495AEB07E0495A4948147E49C8FC017E15FE90B7FC4816FC5A5A
-5A5A5A5AB8FC17F8A430477AC63D>I<EC3FFE0103B512E0010F14FC013F14FF90267FE0
-1F7F9026FF000713E0D801FC6D7FD803F07F486C6D7FD80FFE817F486D80167FA3805C16
-FF7E91C75B6C5A6C5AD80020495B90C75C5D5F4B5B5F031F90C7FCED3FFC4AB45A49B512
-E0168016E016FC90C7EA3FFF030713C06F7F6F7F6F7F83707E83A2701380A318C0EA07E0
-EA1FF8487E487EA2B5FCA31880A25E491600127F494A5A6C485D01E05B001F4A5BD80FFC
-495B2707FFC03F13C06C90B65AC64BC7FC013F14F8010714E09026007FFEC8FC32487BC6
-3D>I<EE07E0160FA2161F163F167F16FFA25D5D5DA25D5D5DA2157D15FDEC01F915F1EC
-03E11407EC0FC1EC1F811501143F147E14FC14F8EB01F01303EB07E014C0EB0F80131FEB
-3F00133E5B13FC485A485A5B1207485A485A90C7FC123E127E5AB912FCA5C80003EBE000
-AD023FB612FCA536487DC73D>I<D8038015E001E0140301FC143F9039FFE003FF91B612
-C017801700A25E5E16F05E5E93C7FC15FC15F001E790C8FC01E0C9FCAAEC1FFC01E1B512
-C001E714F001EF14FC9039FFE01FFFDA0007138001FC6D13C001F06D13E04915F0497F17
-F8C913FC167F17FEA417FFA3EA0FC0EA3FF0487EA2487EA317FEA34914FF6C4815FC5B01
-8015F86CC74813F07F6C6C4913E0D80FF04913C0D807FC011F13806CB46CB512006C90B5
-12FC6C5D013F14C0010F91C7FC010113F030487AC63D>I<ED7FF8913807FFFE021F6D7E
-027F80903A01FFF01FE0010790388003F04948486C7E49486D7ED93FF013074948130F01
-FF4A7E4849133F5C5A4890C7FCA25A705A48486E5A705A003F92C8FCA3485AA215209138
-07FFE0021F13FC00FF497F4A6D7EDAFC017F9026FDF0007F4A6D7ED9FFC06D7E4A6D7E83
-91C7FC8382491680A318C05BA3127FA6123FA27F001F1780A3000F4B1300A26C6C5DA26C
-6D495A6C6D5C6C6D495A6D6C48485A90263FFC075B6DB65A6D4AC7FC01035C010014F002
-0F90C8FC32487BC63D>I<121F7F7F13FE90B812E0A45A18C0188018005F5FA25F485E90
-C8EA07E0007E4B5A5F007C151F4CC7FC167E5E485D15014B5A4B5AC8485A4B5AA24BC8FC
-157EA25D1401A24A5A1407A24A5AA2141FA24A5AA2147FA314FFA3495BA45BA55BAA6D5B
-A26D90C9FCEB007C334B79C93D>I<EC1FFF49B512F0010714FC011F14FF90263FF00713
-C049C77F01FCEC3FF04848EC0FF848481407000782491403000F821601A2121F7FA27F13
-FE6D140302C05C14F002FC495A6C6D130FDAFF805B9238E01FE06C6E485A9238FCFF806C
-91B5C7FC6C15FC6C5D7F6D14FE6D806D15C06D81011F81017F81D9FFDF804813072603FE
-018048486C804848133F4848010F1480003F8049130148486D6C13C0161F824848140382
-A282A2177FA218807F127FEFFF007F6C6C4A5AA2D81FFC4A5A6C6CEC0FF86C6C6CEB3FF0
-6C9039F003FFE06C90B612806C6C92C7FC011F14FC010714E09026003FFEC8FC32487BC6
-3D>I<B912F0F0FF8019F019FC19FFD8001F902680000114C0DD001F7F060713F806017F
-726C7E737E737F737F737F8587737F8587A2747EA38786A21C80A51CC0A586A462A51C80
-A51C00A26263A2631AFF636163614F5B634F5B073F90C7FC4F5A4F5A06035B061F5B4DB5
-12C0BBC8FC19FC19F0198006F0C9FC524B7CCA5E>68 D<B7D8FC01B712FCA5D8001F01C0
-C8001FEBC000B3AA92B9FCA503C0C8121FB3AEB7D8FC01B712FCA5564B7BCA60>72
-D<B600E092B612FC8181A281D8001F6D9239001FE0006F705A82A28202BF7F029F7FA202
-8F7F02877F02837F8214810280806F7F6F7F83816F7F6F7F6F7F83816F80707F707F8482
-707F707F707FA2707F7014807113C019E0837113F07113F87113FC19FE837113FF71148F
-7213CF1AEF847213FF8484A284848485A2858585A285858585497EB600F8167F1A3F1A1F
-1A0FA2564B7BCA60>78 D<B912C018FCF0FF8019F085D8001F902680000713FE05007F06
-3F1380060F13C07213E01AF0841AF8A27213FCA31AFEA81AFCA34E13F8A21AF0601AE04E
-13C0063F138095B51200050713FC92B75A19E096C7FC18F803C0CAFCB3ABB712FCA5474B
-7BCA54>80 D<003FBB12C0A5DA80019038FC001FD9FC001601D87FF09438007FE001C018
-3F49181F90C7170FA2007E1907A3007C1903A500FC1AF0481901A5C894C7FCB3B3A749B8
-12FCA54C4A7CC955>84 D<B7D8E007B791B612C0A5D8003F0180C7000101FCC9387F8000
-6F7070C7FC6D70183EA26F70167E6D71177C876F1BFC6D715F6F831E016D656F4B6D1403
-6D65876F92B515076D656F4A8007F3160F6E647001036E141F6E04E194C8FCA27001076E
-5C6E04C0163E8770010F177E6E4C6C157C70011F814F6C15FC6E637049EDC0016E033E6D
-5D1CE070017E16036E037C6D5D7001FC15F04E6D14076E63DCFF01EEF80F6F4A6D5DA205
-83EEFC1F6F4A6D92C9FC1CFE05C75F6F4A6D143E05EF16FF4E6E137E6F197C05FF17FC6F
-91C86C5BA36F496F5BA24D816F61A26F496F5BA370486F5BA370486F90CAFCA24D81041F
-5FA27048167C7A4C7ECA7F>87 D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFF
-2703FC00077F486C6D7F486C6D7F6E7E83707EA3707E6C90C7FC6C5A6C5AC9FCA4ED1FFF
-021FB5FC49B6FC130F013FEBC03F9038FFFE00000313F04813C04890C7FC485A485AA248
-5AA2485AA4167FA26D14FF007F15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C90
-38E07F076C9038FFFE0300014A7ED8003F9038F0007F0103018090C7FC37337CB13C>97
-D<91380FFF8091B512F8010314FF010F158090263FFE0013C0D97FF8EB1FE0D9FFE0EB3F
-F04849EB7FF8484913FF4890C7FC5A5B121F5B003FED7FF0EE3FE0007FED1FC093C7FC5B
-A212FFAC127F7FA2123FA26D153E121F6D157E6C167C6C6D14FC6C16F86C6D13036C01F0
-EB07F0D97FFCEB1FE06DB4EBFFC0010F90B5120001035C010014F0020F13802F337CB137
->99 D<EF1FF0EE3FFFA51600177FB3A2EC0FFF91B512E0010314F8010F14FE013FEB01FF
-903A7FF8003FFFD9FFE0130F48497F48497F4890C77E4881485AA2485AA3127F5BA212FF
-AC127FA37F123FA2121F7F000F5D6C6C5C5E6C6D5B6C01E0497F6C6D017FEBFFE090393F
-FE03FE6DB512F801075C010114C09027001FFC00EBC0003B4D7CCB44>I<EC0FFF91B512
-F0010314FC010F14FF90263FFE077F90267FF0007F4948EB3FE04801806D7E48824890C7
-6C7E4848140783485A003F6F7EA3485A701380A312FFA290B8FCA401F8CAFCA5127FA27F
-A2123FA26C6CED0F80A2000F161F6C6C16006E5C6C6D147E6C6D5C6C6D495AD97FFCEB07
-F0903A1FFF803FE06D90B55A010392C7FCD9007F13FC020713C031337DB138>I<ED7FE0
-913807FFFC021F7F027F7F902601FFE0138049018113C0902607FE0113E049485A14F813
-1FEB3FF0A26F13C0EB7FE06F1380EE3E0093C7FCADB77EA526007FF0C8FCB3B3A2003FB5
-12F8A52B4D7DCC26>I<DA7FFCEB0FF00103B538807FF8011F9138F1FFFC4991B512FE90
-267FF01F13F32701FFC007138348EB0001A248486DEBC1FC000FEEE0F849027F1300A200
-1F82A8000F5EA26D14FF00075E6C6C495BA26CD9C00790C7FC6C9038F01FFC4890B55A5E
-D803C314809026C07FFCC8FC000790CAFCA47FA27F13FC90B612FCEEFFC06C16F817FE6C
-8218806C17C06D16E00003B812F0120FD81FFCC7000F13F8D83FF0140049153F4848ED1F
-FC00FF160F491507A56D150F007F17F86D151F6C6CED3FF06C6CED7FE0D80FFE913801FF
-C06C6C6C010713806C01F8017F1300C690B612FC013F15F001071580D9003F01F0C7FC37
-487DB03D>I<EB7FC0B5FCA512037EB3A2923801FFC0030F13F8033F13FE4B7F9126C1FE
-077F9126C3F0037F9138C7C001DACF8080150002DE7F02FC81A25CA25CA35CB3A9B6D8C0
-7FEBFFE0A53B4C7BCB44>I<13FCEA03FF487F487FA2487FA66C5BA26C5B6C90C7FCEA00
-FC90C8FCACEB7FC0B5FCA512037EB3B3B61280A5194D7BCC22>I<EB7FC0B5FCA512037E
-B3B3B3AAB61280A5194C7BCB22>108 D<90287FC001FFE0EC7FF8B5010F01FC0103B5FC
-033F6D010F804B6D6C4814E0DBFE079026C03F817F9126C3F0019138FC007F0003D9C7E0
-DAE1F8806CDA8000D9F1E06D7E02CFC7EBF3C002DE91267FF780131F02FC03FFC77FA24A
-5DA24A5DA34A5DB3A9B6D8C03FB5D8F00FB512FCA55E317BB067>I<903A7FC001FFC0B5
-010F13F8033F13FE4B7F9126C1FE077F9126C3F0037F00039038C7C0016CD9CF80801500
-02DE7F02FC81A25CA25CA35CB3A9B6D8C07FEBFFE0A53B317BB044>I<913807FF80027F
-13F80103B6FC010F15C090261FFE017F903A7FF0003FF8D9FFC0EB0FFC48496D7E4890C7
-6C7E4817804980000F17C048486E13E0A2003F17F049157FA2007F17F8A400FF17FCAB00
-7F17F8A36C6CEDFFF0A3001F17E06D5C000F17C06C6C4A13806C17006C6D495A6C01E0EB
-1FFC6D6C495A903A3FFE01FFF0010FB612C0010392C7FCD9007F13F80207138036337DB1
-3D>I<90397FC00FFFB5017F13F002C1B512FC02C714FF9126CFF80F7F9126FFC00313E0
-000391C77F6C01FC6E7E4A6E7E5C4A6E7E848319808319C0A47113E0AC4D13C0A319805F
-A219004D5A804D5A6E4A5A6E4A5A02FF495BDB80075B9126EFF01F5B02E7B548C7FC02E3
-14F802E014E0DB0FFEC8FC92CAFCAFB612C0A53B467CB044>I<9039FF803FE0B5EBFFF8
-028113FE02837FDA87E11380EC8F830003D99F0713C06C139E14BCA214F8A24A6C13806F
-13004A6C5A93C7FCA45CB3A7B612E0A52A317CB032>114 D<90390FFF8070017FEBF1F0
-48B6FC1207380FFC01391FE0003F4848130F491307127F90C712035A1501A27FA213E06D
-90C7FC13FE387FFFF0ECFFC015F06C14FC6C14FF6C15806C15C06C15E0C615F0013F14F8
-010714FCEB007F14019138003FFE150F0078140700F81403A26C1401A37E16FC6C14036D
-14F87F6DEB07F001F8EB1FE001FFEBFFC091B51280D8FC7F1400D8F81F13FCD8E00313C0
-27337CB130>I<14F8A61301A41303A21307A2130FA2131F133F137F13FF1203000F90B5
-12F0B7FCA426007FF8C7FCB3A6167CAA013F14F880A290391FFE01F0010F1303903907FF
-87E06DEBFFC06D14806D6C1300EC0FFC26467EC430>I<D97FE0EC3FF0B5EC7FFFA50003
-15016C81B3AB5EA25EA25E7E6EEB0F7F017F021E7F6E017CEBFFE090393FFE01F86DB512
-F0010714E0010114C09027003FFE00EBC0003B327BB044>I<B66C90B512C0A5000101E0
-C73807F0006E5D6C5F6E140F017F5E80171F013F93C7FC6E5C011F153E6E147E6D157C6F
-13FC6D5DEDC001A26D01E05B16036D5DEDF0076D5DEDF80F027F5CEDFC1F023F91C8FC15
-FE5E021F133EEDFF7E6E137C16FC6E5BA26E5BA36E5BA26E5BA26F5AA26FC9FCA23A317D
-AF41>I<B60081B500FC90387FFFF0A500019026E000030180903803FC006E715A6C6F5E
-6E6F1303017F61A26E496D1307013F616E6F130F011F4A5EA26E6F131F6D4A93C7FCDD9F
-FC5B6DD9801F153E170F03C06E137E6D023F157C93383E07FFDBE07E15FC6DDA7C035C03
-F015816D02FC5D4C7E03F815C3DA7FF95E9226FDF00013E7DA3FFF5E4C137F19FF6E5F4C
-7FA26E496D90C8FCA26E5E93C7120FA26E486E5AA202015E4B1403A26E486E5A54317EAF
-59>I<007FB500C090387FFFE0A5C601F0C73803F8006E5D017F5E6E1407013F5E6E140F
-011F5E6E141FA26D6D91C7FC5F6D153E6F137E6D157C6F13FC6D5DEDF0016D5DEDF80302
-7F5C15FC1607DA3FFE5B160F021F5CEDFF1F6E91C8FC16BF6E13BE16FE6E5BA36E5BA26E
-5BA26F5AA26F5AA26F5AA393C9FC5D153E157E157CD81F8013FC486C5B387FE001D8FFF0
-5B14035D14074A5A49485A007F49CAFCEBC07E383F81FC6CB45A6C5B6C13C0C648CBFC3B
-467EAF41>121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmsl10 10.95 42
-/Ff 42 123 df<EEFF80030F13F092383FC0789238FE001CDA03F8130E4A48133FDA1FE0
-13FF4A5A4B5AEC7F005C5CEE00FE010115784A1400A513035CA4EE01FC0003B7FC17F8A2
-3A0007F0000F1607A2130F4A14F0A4160F131F4A14E0A4161F133F4A14C0A4163F137F91
-C71380A4167F5B491500A31201486C903801FF80B5D8F83F13FCA25D30407EBF33>12
-D<EA0780EA1FE0123F13F0A6EA0F30120013701360A213E013C0A21201EA038013005A12
-0E120C121C5A5A5A5A0C1C71BE19>39 D<EA0780EA0FE0EA1FF0123FA5121FEA0F301200
-A213701360A213E013C0120113801203EA07001206120E5A5A5A5A5A0C1C7A8919>44
-D<121EEA3F80EA7FC012FFA41380EA7F00123C0A0A788919>46 D<EC01FE91380FFFE002
-3F13F89138FC07FC903901E001FE903907C000FF49C7EA7F80011E15C0163F4915E05B01
-70141F13FF80A35A163FA26C90C7FC137E0118EC7FC090C8FCEEFF80A24B1300A24B5A5E
-4B5A4B5A4B5A5E4B5A4BC7FC15FEEC01F84A5A4A5A4A5A4AC8FC143E5C5CEB01E0494813
-0E49485B49C7FC131E495C13705B48485C484814F0000FB6FC5A485D5AB7FC5EA22B3D7C
-BC2D>50 D<13F0EA01FC1203EA07FEA313FCA2EA03F8EA01E0C7FCB3121EEA3F80EA7FC0
-12FFA41380EA7F00123C0F2778A619>58 D<17E016011603831607A2160FA2161F83163F
-A2167F167716F7EEE7FCED01E316C3150316831507EE03FEED0F01150E151E151C153C03
-387FED7800157015F05D4A4880177F4A5AA24AC7FCA2020E81173F5C021FB6FC5CA20270
-C7EA3FE0171F5CA2495AA2494881170F49C8FCA2130EA24982013C1507A2137CD801FE4B
-7E2607FF80EC3FFEB500F00107B512FC19F85E3E417DC044>65 D<013FB7FC18E018FC90
-3B007FE00007FE6E48903801FF809438007FC05DF03FE0F01FF0A3027F16F892C8FCA54A
-16F04A153F19E0187F19C0F0FF8001014B13004A4A5A4D5AEF1FF04D5ADC03FFC7FC49B6
-12F8EFFF8002F8C7EA3FE0EF0FF0EF07FC717E010715014A81711380A319C0130F5CA501
-1F4B13805C19005F601707013F4B5A4A4A5A4D5A4D5A017F913801FF8001FF020F90C7FC
-B812FC17F094C8FC3D3E7DBD40>I<DCFFC01338030F01F01378037F01FC13F0913A01FF
-803F01913A07FC000781DA1FE0EB03C3DA7FC0EB01E74AC812FF4948ED7FE0D907FC153F
-495A4948151F495A4948150F494816C018074890C9FC485AA2485A000F1880491603121F
-A248481607A295C7FC485AA412FF5BA75BA2181C183C1838A27F007F1778187018F0003F
-5F6D150160001F16036C6C4B5A95C7FC6C6C5D6C6C151E6C6C5D6C6C15F86D6C495A6D6C
-EB07C0D91FF0EB1F80D907FE01FEC8FC0101B512F86D6C13E0DA07FEC9FC3D4276BF42>
-I<013FB812F8A39026007FF0C7127F6E48140F18034B14011800A31978147F4B1570A502
-FF147092C7FCA3190017F0495D4A1301A21607161F91B6FC495DA29138FC003F160F1607
-160301075D5CA219E0180119C0010FEC07004A90C712031980A218071900011F5E5C181E
-A2183E183C013F167C4A15FC4D5A1707017F151F01FF4AB45AB9FCA2603D3E7DBD3E>69
-D<4BB46C1370031F01F013F0037F9038FC01E0913A03FF807E03913A0FF8000F83DA1FE0
-EB07C7DA7F80EB01EF4AC812FFD903FE16C04948157F4948153F495A4948151F495A4948
-168091C9120F5A485AA2485A000F18004982121FA248485EA295C7FC485AA412FF5BA604
-3FB512E05BA29339001FFC00715AA2607F127FA2171F123F6D5EA2121F7F000F163F6C7E
-6C6C4B5A7F6C6C15FF6C6DEB01EFD93FC0EB07C7D91FF0EB1F87D907FE9038FE03800101
-B5EAF8016D6C01E0C8FCDA07FEC9FC3C4276BF47>71 D<021FB512FCA3DA000713006F5A
-A25EA41507A25EA4150FA25EA4151FA25EA4153FA25EA4157FA25EA415FFA293C7FCA45C
-121FD87F805BEAFFC0A214035D13804A5AEAFE0000F8495A48495A00705C6C495A6C01FE
-C8FC380F81FC3803FFE0C690C9FC2E407ABD2F>74 D<90263FFFF093381FFFF85013F062
-9026007FF8EFF000023F4D5AA2023B933801DFC0A2DA39FCED039FA2F1073F1479027104
-0E5BEC70FE191C19381A7F02F01670DAE07F94C7FC19E0A2F001C06201016D6C495A02C0
-5FF00700A2180E6F6C14010103161C028003385BA218706F7EF0E00313070200DA01C05B
-A2923907F00380A294380700075B010E902603F80E5C5FA25F190F011E6D6C5A011C605F
-A2EEFDC0DB00FF141F013C5D013860013C92C7FC017C5C01FE027E143F2607FF80017C4A
-7EB500FC037FB512E004785E4A1338553E7CBD53>77 D<90263FFFE0023FB5FC6F16FEA2
-9026003FF8020313C0021F030013004A6C157C023B163C6F15381439810238167802787F
-DA707F157082153F82031F15F002F07FDAE00F5D8215078203031401010180DAC0015D82
-811780047F1303010315C04A013F5C17E0161F17F0040F1307010715F891C7000791C7FC
-17FC160317FE04015B4915FF010E6E130E188E177F18CEEF3FDE011E16FE011C6F5AA217
-0FA21707133C01386F5A133C017C150113FE2607FF801400B512FC18705C483E7DBD44>
-I<923803FF80031F13F09238FE01FE913903F0003FDA0FC0EB1FC0DA3F80EB07E0027EC7
-6C7E49486E7E49488149486E7E4948157F495A013F17804948ED3FC049C9FCA24848EE1F
-E012035B000718F05B120FA2485A19F8123F5BA2127FA219F04848163FA5F07FE0A35BF0
-FFC0A219805F19007F4D5A127F4D5A60003F160F6D5E001F4C5A4D5A6C6C4B5A95C7FC6C
-6C15FE00034B5A6C6C4A5A6C6C4A5A017FEC1FC06D6C495AD90FE001FEC8FC903903F807
-F80100B512C0DA0FFCC9FC3D4276BF47>I<013FB612F017FF18E0903B007FF0003FF86E
-48EB07FCEF01FE4B6D7EF07F8019C0183F19E0147F4B15F0A502FFED7FE092C8FCA219C0
-F0FF80A2494B13004A5D4D5AEF0FF04D5AEF7F800103DA07FEC7FC91B612F017809139FC
-0007E0EE03F8EE00FC0107814A147F717EA284A2130F5CA484011F157F5CA41902013F17
-075CA2F0F00F017F170E496C143FB600E0011F131C94380FF83C4B01071378CA3801FFE0
-9438003F8040407DBD43>82 D<9238FF80070207EBE00F021FEBF81E91387F00FE02FCEB
-1F3ED903F0EB0FFE49481307494813034AEB01FC49C7FC491400133E137E177C491578A5
-7F1770A26D1500808080EB7FFEECFFE06D13FEEDFFC06D14F06D14FC010380010080143F
-02031480DA003F13C015031500EE7FE0163F161FA2160F121CA31607160F003C16C0A317
-80003E151F1700007E5D007F153E6D5C16FC01E0495AD87DF0495AD8FCFCEB0FC03AF87F
-803F8027F01FFFFEC7FCD8E00713F839C0007FC030427BBF33>I<0007B912F0A33C0FFE
-000FF8003F01F0160F01C04A13034848160190C7FC121EF000E048141F5E1238A2127812
-70153F5E5AA3C81600157F5EA515FF93C9FCA55C5DA514035DA514075DA5140F5DA3141F
-EC7FFC0003B7FCA33C3D76BC42>I<B6020FB5FC19FEA2000301E0020113E06C01809138
-007F8091C9EA7E006C173C18386E15781870017F16F0604D5A804D5A133F4DC7FCA26E14
-0E171E011F151C173C17386E1478010F15705FA24C5A8001074A5AA24CC8FC5E6E130E01
-03141E161C163C16386E5B13015EA24B5A14FF6D495AA24BC9FC5D158EEC7F9E159C15B8
-A215F0143F5DA25DA26E5AA292CAFCA2140E404074BD44>86 D<EC7FC0903803FFF89038
-0FC07E90383E003F496D7E01FF6D7E82A248140782A26C5A137890C7120FA25EA2EC03FF
-147F903807FF1FEB1FE0D97F805B3801FE00EA03F8485A4848133F485A003F5D49EC81C0
-48C7FCA2157F48ED03804814FFA2007F5B913903BF0700903880073F3A3FC00E1F8E260F
-E03C13FC3A03FFF00FF83A007FC003E02A2A7CA82D>97 D<EB3F80EA1FFFA3C6FC137FA2
-91C9FCA55B5BA512015BA4EC07F80003EB3FFF9039F8F80FC09039FBE003E09039FF8001
-F891C77E5B4848147E49147F5B821780A2120F5B17C0A3167F001F16805BA4EEFF00123F
-5B4B5AA24B5A5E007F4A5AA24B5A6D495A4BC7FCD87CE0137E39F87001F839F03C07E039
-E00FFF80260003FCC8FC2A4077BE33>I<EC1FF0ECFFFE903903F01F8090390FC003C0D9
-3F0013E0017E130F49131F000115F04848EB3FE0485AA24848EB1FC0001FEC0F004990C7
-FC123FA2485AA412FF90C9FCA96CEC0380150716006C6C5B151E001F5C6C6C5B6C6C5B6C
-6C485A3901F80F8026007FFEC7FCEB0FF0242A7AA828>I<EE03F8ED01FFA3ED000F1607
-A217F0A4160FA217E0A4161FA217C0A491380FF03FECFFFC902603F81F138090390FC007
-BF90391F8003FF90387E0001497F0001157F48481500485A120F5B001F5D485A5E5B127F
-A2150112FF90C75BA41503A25EA37E1507A26C4A5A7F001F141F6C6C133F6C6CEBFFF83B
-03F001EFFFC03900F80F8F90383FFE0FD90FF0EBE0002D407ABE33>I<EC3FE0903801FF
-F8903807E07E90380F801F90393F000F80017E14C049EB07E0485A12034848EB03F0485A
-A2121F5B123FA248481307A290B6FCA2D8FF80C8FC90C9FCA87EED01C015036C15806D13
-07001FEC0F006D131E000F5C6C6C5B6C6C485A3900FC07C0D93FFFC7FCEB07F8242A7BA8
-28>I<ED07F0ED3FFCEDFC1E913803F03F4A48B4FC4A481380141FEC3F81DA7F01130081
-02FE137C93C7FCA213015CA513035CA50007B512F8A3260007F0C8FCA3130F5CA5131F5C
-A5133F5CA5137F91C9FCA55B5BA4EA03FF007F13FEB5FCA229407DBF1C>I<177C913907
-F803FE91393FFE0F8F9139FC0F9C3F903901F007F8903907E003E0D90FC013F0011F9038
-01F80C02801400133FD97F007FA315035B495CA3017E495A5E150F6D5C6D495A90263F80
-3EC7FCECC0FC903871FFF09038E07F8091C9FC485AA47FA27F90B512F8EDFF806C15E016
-F86D8048B6FC3A07E0000FFED80F801300003FC8127F003E815A00FC815AA25E163EA25E
-6C15FC007C4A5A6C4A5A6CEC0FC0D80FC0013FC7FC3903F801FCC6B512F0010F90C8FC30
-3D7FA82D>I<147FEB3FFFA313017FA25CA513015CA513035CA4ED07F80107EB1FFF9139
-F0781FC09138F1E00F9139F38007E0ECF70002FE14F0495A5CA25CA24A130F131F4A14E0
-A4161F133F4A14C0A4163F137F91C71380A4167F5B491500A300015D486C491380B5D8F8
-7F13FCA32E3F7DBE33>I<1478EB01FE130314FFA25B14FE130314FCEB00F01400ACEB03
-F8EA01FF14F0A2EA001F130FA314E0A5131F14C0A5133F1480A5137F1400A55B5BA4EA03
-FF007F13F0A2B5FC183E7DBD1A>I<147FEB3FFFA313017FA25CA513015CA513035CA501
-070103B5FC02F014FEA26F13F06F1380EEFE00010F14F84A485AED03C04B5A031FC7FC15
-3E011F13784A5AECC3E0ECC7F0ECCFF814FF497F14F9ECE1FE14C04A7E4A7E4980017E13
-3F82151F82150F01FE8049130782A2000181486C49B4FCB5D8F03F13F04B13E0A2303F7E
-BE30>107 D<143FEB1FFF5BA213017FA214FEA5130114FCA5130314F8A5130714F0A513
-0F14E0A5131F14C0A5133F1480A5137F1400A55B5BA4EA03FF007F13F8A2B5FC183F7DBE
-1A>I<902707F007F8EB03FCD803FFD91FFF90380FFF80913CE0781FC03C0FE09126E1E0
-0FEBF0073E001FE38007E1C003F090260FE700EBE38002EEDAF70013F802FC14FE02D85C
-14F84A5CA24A5C011F020F14074A4A14F0A5013F021F140F4A4A14E0A5017F023F141F91
-C74914C0A549027F143F4992C71380A300014B147F486C496DEBFFC0B5D8F87FD9FC3F13
-FEA347287DA74C>I<903907F007F8D803FFEB1FFF9139E0781FC09138E1E00F3B001FE3
-8007E090380FE70002EE14F014FC14D814F85CA24A130F131F4A14E0A4161F133F4A14C0
-A4163F137F91C71380A4167F5B491500A300015D486C491380B5D8F87F13FCA32E287DA7
-33>I<EC0FF0ECFFFE903903F01F8090390FC007C049C66C7E013E6D7E01FC6D7E484880
-49147C0003157E485A000F157F5B121FA2485AA2007F1680A2170048C85AA54B5AA25E5A
-6C4A5A7E4B5A5E6C140F6C6C5C4B5A6C6C013EC7FC6C6C5B6C6C485A3900FC0FE090383F
-FF80D90FF8C8FC292A7BA82D>I<91387F01FE903A7FFF0FFFC09139FE3E03F09238F801
-F8903A03FFE000FE6D49137F4B7F92C713804A15C04A141FA218E0A20103150F5C18F0A3
-171F010716E05CA3173F18C0130F4A147F1880A2EFFF004C5A011F5D16034C5A6E495AEE
-1FC06E495AD93FDC017EC7FC91388F01F8913883FFE0028090C8FC92C9FC137FA291CAFC
-A45BA25BA31201487EB512F8A3343A81A733>I<903907F01F80D803FFEB7FE09138E1E1
-F09138E387F839001FE707EB0FE614EE02FC13F002D813E09138F801804AC7FCA25C131F
-A25CA4133F5CA5137F91C8FCA55B5BA31201487EB512FEA325287EA724>114
-D<9138FF81C0010713E390381F807F90397C003F8049131F4848130F5B00031407A24848
-1400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C7F011F7F13079038007FFE
-1403140100381300157EA2123C153E157E007C147CA2007E147815F8007F495A4A5A486C
-485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>I<EB0380A4130791C7FCA25BA25B
-A2133EA2137E13FE12011207001FB512C0B6FCA2D801FCC7FCA312035BA512075BA5120F
-5BA41407001F130E13C0A4141E141C1380A26D5AA2000F5B14F03807E1E03801FF80D800
-7EC7FC1A3978B723>I<01FE147F00FFEC7FFF4914FEA20007140300031401A34914FCA4
-150312074914F8A41507120F4914F0A4150F121F4914E0A2151FA3153F4914C0157F15FF
-EC01DF3A0FC003BFE09138073FFF3803F01E3801FFF826003FE01380282977A733>I<B5
-39E007FFF05D17E02707FE000313006C48EB01FC6F5A5E00014A5A5EA24B5A6D13070000
-92C7FC5D150E6D5B7F5DA25D1480013F5B14815D14C3011F5B02C7C8FCA214CE14EEEB0F
-FCA25CA26D5A5CA25CA26D5A2C2878A630>I<B500C3B53803FFFCA204FE14F8290FFE00
-3FE00013C0D807F86D48EB7F000003173E183C150F18386D5E0001141F705B153F4D5A15
-776D4B5A0000ECE7F04DC7FCEC01C3170E9038FF0383017F5D91380703F85FEC0E01021E
-5CD93F9C14F002BC6D5A02B813FDDAF8005B4A13FF5F6D5A94C8FC5C4A137E167C6DC7FC
-1678010E14383E2878A642>I<90B539E007FFF05E18E0902707FE000313006D48EB01FC
-705A5F01014A5A5F16036E5C0100140794C7FC160E805E805E1678ED8070023F13F05EED
-81C015C191381FC38015C793C8FC15EF15EEEC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC
-5C140E141E141C5C121C003F5B5A485B495A130300FE5B4848CAFCEA701EEA783CEA3FF0
-EA0FC0343A80A630>121 D<017FB512FEA2ECC00190397E0003FC49EB07F849EB0FF049
-EB1FE049EB3FC0ED7F8000011500495B4A5A4A5A4848485A4A5AC7485A4A5A5D147F4AC7
-FC495A495A49481370494813E0495A5C133F90387F8001D9FF0013C0485A48481303485A
-4848EB078049130F4848131F003F143F397F8001FFB71200A227277EA628>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmtt10 10.95 81
-/Fg 81 127 df<EA07C0EA0FF0EA1FF8A213FCA213FE120F1207EA007EA513FE13FCA212
-0113F81203EA07F0120FEA1FE0127FEAFFC013801300127C12380F1D70B730>39
-D<141E147F14FF5BEB03FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B48
-5A120F5BA2485AA2123F5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F
-12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E
-184771BE30>I<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C013
-1FEB0FE014F01307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA21303
-14F8A2EB07F0A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE0485A
-485A90C7FC5A1278184778BE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C76C
-C8FCAF143EA229297DAF30>43 D<EA03E0EA0FF0EA1FF813FCEA3FFEA213FFA27EA27E12
-03EA007FA2137E13FEEA01FC1203EA07F8EA3FF0127FEAFFE0EA7F801300123C1019708B
-30>I<007FB612F0A2B712F8A36C15F0A225077B9E30>I<120FEA3FC0EA7FE0A2EAFFF0A4
-EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED03F8A21507A2ED0FF0A2ED1FE0A2
-ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA24A5AA24A5AA24A5AA24A5AA24AC7
-FCA2495AA25C1303A2495AA2495AA2495AA2495AA2495AA249C8FCA2485AA25B1203A248
-5AA2485AA2485AA2485AA2485AA248C9FCA25AA2127CA225477BBE30>I<14FE903807FF
-C0497F013F13F8497F90B57E48EB83FF4848C6138049137F4848EB3FC04848EB1FE04913
-0F001F15F0491307A24848EB03F8A290C712014815FCA400FEEC00FEAD6C14016C15FCA3
-6D1303003F15F8A26D1307001F15F0A26D130F6C6CEB1FE0A26C6CEB3FC06C6CEB7F806D
-13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>I<EB03
-C0497EA2130FA2131FA2133F137F13FF1203123FB5FCA213EF138FEA7E0F1200B3B0003F
-B512F84814FCB612FEA26C14FC6C14F81F3977B830>I<EB07FC90383FFFC090B512F000
-03804814FE4880261FF80F1380263FE00113C09038C0007F4848EB3FE090C7121FED0FF0
-4814075A6C15F81503A3127E1218C8FCA2150716F0150F16E0151F16C0153FED7F8015FF
-4A13005DEC07FC4A5A4A5A4A5A4A5A4A5A4990C7FC495A495AEB0FF0EB3FE0495A495A48
-90C8FC4848EB01F04848EB03F8485AEA1FE048B6FCB7FCA37E6C15F025397BB830>I<EB
-03FF013F13E090B512F84814FE4880481580260FFE0113C09038F0007F4848EB1FE0150F
-16F01507A26C5A6C5AC8FC150F16E0A2151FED3FC0157FEDFF8002071300903807FFFE49
-5B5D8115FF6D1480D9000113C09138003FE0ED1FF0ED07F8150316FC150116FE1500A212
-18127EB4FCA2150116FC4814036C15F86C6C13076DEB1FF0D83FF0133F3A1FFE01FFE06C
-B612C06C15806CECFE00C65C013F13F001031380273A7CB830>I<EC03FC4A7E140F141F
-A2143F147F157E14FEA2EB01FCEB03F8A2EB07F0A2EB0FE0EB1FC0A2EB3F80A2EB7F0013
-FEA2485A485AA2485AA2485A485AA2485AA248C7FC12FEB8FC1780A46C1600C8007EC7FC
-AA91387FFFFE91B6FCA46E5B29397DB830>I<000FB612804815C05AA316800180C8FCAE
-EB83FF019F13C090B512F015FC8181D9FE0313809039F0007FC049133F0180EB1FE06CC7
-120F000E15F0C81207A216F81503A31218127EA2B4FC150716F048140F6C15E06C141F6D
-EB3FC06D137F3A3FE001FF80261FFC0F13006CB55A6C5C6C5C6C14E06C6C1380D90FFCC7
-FC25397BB730>I<EC0FF8EC7FFF49B51280010714E0131F4914F090387FF80F9039FFC0
-07F84813803803FE005B485A4848EB03F0ED01E0484890C7FC5B123F5BA2127FEB000C90
-3803FFE0010F13F8D8FF3F13FE48B6FCB7128016C09039FE007FE001F8EB1FF001E0130F
-49EB07F849EB03FCA290C7120116FE1500A37EA46C7E15016D14FC121F6D1303000FEC07
-F86D130F6C6CEB1FF06DEB3FE03A03FF81FFC06C90B512806C15006D5B011F13F8010713
-E001011380273A7CB830>I<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC3F
-C0C8EA7F80EDFF00A24A5A4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015CA2
-13035CA213075CA4495AA6131F5CA96D5A6DC8FC273A7CB830>I<49B4FC011F13F0017F
-13FC90B57E0003ECFF804815C048010113E03A1FF8003FF049131FD83FC0EB07F8A24848
-EB03FC90C71201A56D1303003F15F86D13076C6CEB0FF06C6CEB1FE0D807FCEB7FC03A03
-FF83FF806C90B512006C6C13FC011F13F0497F90B512FE48802607FE0013C0D80FF8EB3F
-E0D81FE0EB0FF04848EB07F8491303007F15FC90C712014815FE481400A66C14016C15FC
-6D1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF01FFE06C90B512C06C1580C6ECFE
-006D5B011F13F0010190C7FC273A7CB830>I<49B4FC010F13E0013F13F890B57E488048
-8048010113803A0FFC007FC0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F8
-5A4815FC1501A416FEA37E7E6D1303A26C6C13076C6C130F6D133FD80FFC13FF6CB6FC7E
-6C14FE6C14F9013FEBE1FC010F138190380060011400ED03F8A2150716F0150F000F15E0
-486C131F486CEB3FC0157FEDFF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C6
-49C7FCEB3FF0273A7CB830>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00
-C7FCAF120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>I<EA03C0
-EA0FF0EA1FF8A2EA3FFCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA03C0EA0FF0121F13F8123F
-13FCA3121FA2120F12031200120113F8120313F01207EA1FE0123FEA7FC0EAFF80EA7F00
-127E12380E3470A630>I<16F01503ED07F8151F157FEDFFF014034A13C0021F13809138
-3FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA
-7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F
-010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7FF8151F1507ED03F0150025
-2F7BB230>I<EC1FE0ECFFF8010313FE010F7F4914804914C090397FF03FE09038FF800F
-4890380007F0D803FC13033A07F801FBF89038F007FF380FE01F4A13FCEA1FC0495A003F
-EBFF0F903800FE07903901FC03FE007FEBF801EA7E03ECF000A2EAFE0700FC49137EAA00
-FE6D13FED87E0314FCA2ECF801D87F0114F8003FEBFC03903900FE07F0903880FF0F001F
-90387FFFE06D6C13C0EA0FE06E13803A07F007FE009038F801F86C6CC7127C6CB414FE6C
-EB800390387FF01F6DB512FC6D14F86D14E0010314C00100EBFE00EC1FF0273A7CB830>
-64 D<147F4A7EA2497FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F
-80FEA590387F007FA4498049133F90B6FCA34881A39038FC001F00038149130FA4000781
-491307A2D87FFFEB7FFFB56CB51280A46C496C130029397DB830>I<007FB512F0B612FE
-6F7E82826C813A03F8001FF815076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE0
-90B65A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700
-A25E4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387EB730>I<91387F803C
-903903FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE07F48EB801F3903FE000F484813
-075B48481303A2484813015B123F491300A2127F90C8FC167C16005A5AAC7E7EA2167C6D
-14FE123FA27F121F6D13016C6C14FCA26C6CEB03F86D13076C6CEB0FF03901FF801F6C90
-38E07FE06DB512C06D14806D1400010713FC6D13F09038007FC0273A7CB830>I<003FB5
-12E04814FCB67E6F7E6C816C813A03F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80
-A2163F17C0161FA4EE0FE0AC161F17C0A3163F1780A2167F17005E4B5A15034B5A150F4B
-5AED7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A4
-7ED803F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07
-C0EE0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<003FB712804816C0B8FCA27E7ED8
-01FCC7121FA8EE0F8093C7FCA5153E157FA490B6FCA69038FC007FA4153E92C8FCAE383F
-FFF8487FB5FCA27E6C5B2A387EB730>I<02FF13F00103EBC0F8010F13F1013F13FD4913
-FF90B6FC4813C1EC007F4848133F4848131F49130F485A491307121F5B123F491303A212
-7F90C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C6D1400ED03F8A27F003F1407A2
-7F121F6D130F120F7F6C6C131FA2D803FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F
-13F30103EBC1F0010090C8FC293A7DB830>I<3B3FFF800FFFE0486D4813F0B56C4813F8
-A26C496C13F06C496C13E0D803F8C7EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0
-486D4813F0B56C4813F8A26C496C13F06C496C13E02D387FB730>I<007FB6FCB71280A4
-6C1500260007F0C7FCB3B3A8007FB6FCB71280A46C1500213879B730>I<49B512F04914
-F85BA27F6D14F090C7EAFE00B3B3123C127EB4FCA24A5A1403EB8007397FF01FF86CB55A
-5D6C5C00075C000149C7FC38003FF025397AB730>I<D83FFF90380FFF80486D4813C0B5
-6C5AA26C497E6C496C1380D803F0903803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A
-5A5D4A5A4A5A141F5D4A5A4AC8FC5C13F18101F37F13F790B57E14EFECC7F01483EC03F8
-140101FE7F496C7E5B157F497F82151F82150F826F7EA26F7E1501821500D83FFF903803
-FFC0486D4813E0B56C5AA26C497E6C496C13C02B387FB730>I<383FFFF8487FB57EA26C
-5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<
-D83FF8ECFFE0486C4913F0486C4913F8A2007F16F06C6C4913E00007160001EF14BFEC80
-0FA39039E7C01F3FA4ECE03F01E3133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214
-FDEC7DF0A3147FEC3FE0A3EC1FC0A2EC070091C7FCADD83FFC903801FFE0486C4913F0B5
-4913F8A26C486D13F06C486D13E02D387FB730>I<D83FFC90381FFF80486C4913C0B549
-13E0A26C6D6C13C06C6E13800003913801F800EBF7C0A3EBF3E0A314F013F1A214F8A213
-F014FCA2147C147EA2143E143FA2141FA21581A2140F15C1A2140715E1A2140315F1A214
-01A215F91400A3157DA3153FEA3FFF481380B5EAC01FA26CEB800F6C496C5A2B387EB730
->I<90383FFFE048B512FC000714FF4815804815C04815E0EBF80001E0133FD87F80EB0F
-F0A290C71207A44815F8481403B3A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001
-F813FF90B6FC6C15C06C15806C1500000114FCD8003F13E0253A7BB830>I<007FB512F0
-B612FE6F7E16E0826C813903F8003FED0FFCED03FE15016F7EA2821780163FA6167F1700
-5EA24B5A1503ED0FFCED3FF890B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA4
-6C5B29387EB730>I<90383FFFE048B512FC000714FF4815804815C04815E0EBF80001E0
-133F4848EB1FF049130F90C71207A44815F8481403B3A8147E14FE6CEBFF076C15F0EC7F
-87A2EC3FC7018013CF9038C01FFFD83FE014E0EBF80F90B6FC6C15C06C15806C15000001
-14FCD8003F7FEB00016E7EA21680157F16C0153F16E0151F16F0150FED07E025467BB830
->I<003FB57E4814F0B612FC15FF6C816C812603F8017F9138003FF0151F6F7E15071503
-821501A515035E1507150F4B5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE015
-1F150F821507A817F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C
-49EB7FC0C9EA1F002E397FB730>I<90390FF803C0D97FFF13E048B512C74814F74814FF
-5A381FF80F383FE001497E4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F
-7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C80011F13FF01031480D9003F13C014
-019138007FE0151FED0FF0A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F
-01F8EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB8
-30>I<003FB712C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC
-4980A46D91C7FC2B387EB730>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7
-EA3F80B3B16D147F00011600A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83F
-F06DB55A6D5C6D5C6D91C7FC9038007FFCEC1FF02F3980B730>I<D87FFE90380FFFC0B5
-4913E06E5AA24A7E6C486D13C0D807F0903801FC00A26D130300035DA46C6C495AA46C6C
-495AA46D131F6D5CA3EC803F013F5CA46D6C48C7FCA490380FE0FEA401075B14F1A30103
-5BA314FB01015BA314FFA26D5BA46E5A6E5A2B397EB730>I<D83FFC903801FFE0486C49
-13F000FF16F8A2007F16F06C486D13E0D81FC09038001FC0000F1680A76D143F00071600
-A7000390380F803E9039F01FC07EEC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA3
-14F8A300005D01F913FCA2ECF07CA201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2
-013F5CA2EC800F6D486C5A2D397FB730>I<3A3FFF01FFF84801837F02C77FA202835B6C
-01015B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F
-5B14FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F
-8181EB7F0081497F49800001143F49800003141F49800007140FD87FFEEB7FFFB590B512
-8080A25C6C486D130029387DB730>I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D8
-03F8903803F8006D1307A26C6C495AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7
-FCA290380FE0FEA214F101075BA2903803FBF8A201015B14FF6D5BA26E5AA36E5AB19038
-03FFF8497F497FA26D5B6D5B2B387EB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5
-B6FC1580A46C140019476DBE30>91 D<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA2
-6C7EA26C7EA212017FA26C7EA26D7EA26D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D
-7EA26E7EA26E7EA26E7EA26E7EA26E7EA26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED
-1FE0A2ED0FF0A2ED07F8A21503A2ED01F0150025477BBE30>I<007FB5FCB61280A47EC7
-123FB3B3B3A5007FB5FCB6FCA46C140019477DBE30>I<1307EB1FC0EB7FF0497E000313
-FE000FEBFF80003F14E0D87FFD13F039FFF07FF8EBC01FEB800F38FE0003007CEB01F000
-10EB00401D0E77B730>I<007FB612F0A2B712F8A36C15F0A225077B7D30>I<1338137CEA
-01FE12031207EA0FFC13F0EA1FE013C0EA3F8013005A127EA212FE5AA5EAFFC013E013F0
-127FA2123FA2EA1FE0EA07C00F1D70BE30>I<EB7FF80003B5FC4814C048804880488090
-38E01FFC9038C003FE14016E7E6C487F6CC77FC8123FA491B5FC130F137F48B6FC12075A
-48EB803F383FF800EA7FE0138048C7FC5AA4157F7E6C6C13FFEBC003263FF01FEBFF8090
-B712C07E6C14EF000314876CD9FE01138026003FE0C8FC2A2A7BA830>I<EA3FFC487E12
-FFA2127F123F1200AAEC03FE91381FFF80027F13E091B57E90B612FC82ECFE079138F001
-FF4A6C13804A137F4AEB3FC091C7121F17E049140FA217F01607A8160FA217E07F161F6E
-EB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495CD97E7F13C0D93C1F90
-C7FC90380003FC2C3980B730>I<ECFFE0010713FC011F7F017F7F90B612804815C048EB
-807F3907FC003F485A485A49EB1F804848EB0F004990C7FC127F90C9FCA25A5AA87E7EA2
-7F003FEC07C06DEB0FE06C7E6D131F6C6C14C0D807FE133F9039FFC0FF806C90B5FCC615
-006D5B011F13F801075B01011380232A7AA830>I<913801FFE04A7F5CA28080EC0007AA
-EB03FE90381FFF874913E790B6FC5A5A481303380FFC00D81FF0133F49131F485A150F48
-48130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607
-FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730
->I<49B4FC010713E0011F13F8017F7F90B57E488048018113803A07FC007FC04848133F
-D81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA2
-7F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0
-013F14806DEBFE00010713F8010013C0252A7CA830>I<EDFF80020713E0021F13F05C4A
-13F891B5FC491387903803FE079138FC03F0903907F800C04A1300A8003FB612C04815E0
-B7FCA36C15C0260007F0C7FCB3A9003FB512FE4880B71280A26C15006C5C25397DB830>
-I<D903FC13FF90261FFF8713C04913DF90B712E05A5A2607FE07138F903AF801FE07C048
-486C6CC7FCA2497F001F8149133FA56D137F000F92C7FC6D5BA26C6C485AEBFE0790B55A
-5D485C15C001DF5BD9C3FCC8FC01C0C9FCA37F7F6CB512F015FF6C15C04815F048814881
-3A3FE0001FFE0180130148C8127F007E8100FE168048151FA56C153F007FED7F006D5C6C
-6C495A01F013076CB4EB7FFC6C90B55A6C5D000115C06C6C91C7FC011F13FC010113C02B
-3E7DA730>I<EA3FFC487E12FFA2127F123F1200AAEC01FE91380FFF80023F13E091B57E
-90B67EA29138FE07FCECF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFF
-F8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F3880B730>I<14E0EB03F8A249
-7EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7
-FCA27E6C15C023397AB830>I<EC01C0EC07F0A2EC0FF8A3EC07F0A2EC01C091C7FCA990
-B512F04814F8A47EEB0003B3B3A5EC07F0A2123C007EEB0FE0B4131FEC3FC0147F90B512
-806C14005C6C5B000F13F0000313C01D4E7CB830>I<EA7FF8487EA4127F1200AB0203B5
-12804A14C017E0A217C06E14809139001FE0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A
-5A4A5A4A5A01FD7F90B57E8114F7ECE3F8ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E
-15076F7E6F7E3B7FFFF81FFFE0B56C4813F017F8A217F06C496C13E02D387FB730>I<38
-7FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I<02FC137E
-3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07EB03F801
-FC13FE9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13C0A4
-6C486C01071380322881A730>I<EC01FE3A3FFC0FFF80267FFE3F13E000FF90B57E90B6
-7E7E6C9038FE07FCC6EBF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFF
-F8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F2880A730>I<49B4FC010F13E0
-013F13F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848
-EB07F8491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D1303003F15F86D
-13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B512806C15006C6C13FC
-6D5B010F13E0010190C7FC272A7CA830>I<EC03FE3A3FFC1FFF80267FFE7F13E000FF90
-B57E90B612FC6C816CEBFE07C69038F001FF4A6C13804A137F4AEB3FC091C7121F17E049
-140FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC
-0FFE91B55A5E495C6E13C0021F90C7FCEC03FC91C9FCAD383FFFF8487FB57EA26C5B6C5B
-2C3C80A730>I<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F49
-131F4848130F491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F
-6C6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C190
-3803FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>I<ED07F83A3FFF803FFF48
-6DB51280B512C302CF14C06C13DF6C9038FFFC3FD8001F13E09238801F809238000F004A
-90C7FC5C5C5CA25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A287EA730>I<90381FFC
-1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC13E0
-6CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380007C147F
-00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8
-F83F13C026780FFEC7FC222A79A830>I<EB0780497E131FA9003FB612E04815F0B7FCA3
-6C15E026001FC0C7FCB216F8ED01FCA5ECE003010FEB07F814F09138FC1FF06DB512E06D
-14C016806D14009038007FFCEC1FF026337EB130>I<D83FFCEB3FFC486C497E00FF14FF
-A2007F147F003F143F00001400B3A41501A2150315076D130F903A7FC07FFFF891B612FC
-6D15FE7F6D4913FC6D9038F87FF8010001C0C7FC2F2880A630>I<3B3FFFC07FFF80486D
-B512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005DA26D130F017E5C
-A2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA214F101035B
-A3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D4813F0B5
-15F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80EC
-1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07FE0
-A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37FB580A26C5D
-6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B
-7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890381F81FC90
-383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C1148014E3A214
-C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13
-803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805BA214C0010F49C7
-FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147FA26E5AA36E
-5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C
-5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316FC90C7EA0FF8ED
-1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A4990C7FC49
-5A495A495A495A495A495A4948133E4890C7127F485A485A485A485A485A48B7FCB8FCA4
-6C15FE28277DA630>I<127CA212FEB3B3B3AD127CA207476CBE30>124
-D<017C133848B4137C48EB80FE4813C14813C348EBEFFC397FEFFFF0D8FF8713E0010713
-C0486C1380D87C0113003838007C1F0C78B730>126 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmbx12 17.28 45
-/Fh 45 121 df<167C16FC1501ED07F0150FED1FE0ED3FC0ED7F80EDFF004A5A14034A5A
-4A5A5D141F4A5A147F4A5A5D5B4990C7FCA2495A130F5C131FA2495AA2495AA213FF5C5A
-A25C5AA25A5CA25AA291C8FCA25AA35B123FA5127F5BA612FFB3A4127FA67F123FA5121F
-7FA37EA280A27EA2807EA27E80A27E80137FA26D7EA26D7EA2130F8013076D7EA26D7F7F
-816E7E143F6E7E140F816E7E6E7E14016E7EED7F80ED3FC0ED1FE0ED0FF01507ED01FC15
-00167C269071EB3F>40 D<127812FC127E6C7E7F6C7E6C7E6C7E6C7E6C7E7F6C7F6D7E13
-3F806D7E806D7E1307806D7EA26D7F817F81A26E7EA26E7EA281141F81A2140F81A21680
-80A216C0A280A216E0A38016F0A516F880A616FCB3A416F8A65C16F0A516E05CA316C0A2
-5CA21680A25C1600A25D141FA25D143F5DA24A5AA24A5AA25D5B5D4990C7FCA2495A5C13
-0F495A5C495A5C137F495A4890C8FC5B485A485A485A485A485A5B007EC9FC5A12782690
-77EB3F>I<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007C7FC
-B3B3B3B3007FB91280A6395E74DD51>49 D<913801FFF8021FEBFFC091B612F8010315FF
-010F16C0013F8290267FFC0114F89027FFE0003F7F4890C7000F7F48486E7FD807F86E14
-8048486E14C048486E14E048486F13F001FC17F8486C816D17FC6E80B56C16FE8380A219
-FFA283A36C5BA26C5B6C90C8FCD807FC5DEA01F0CA14FEA34D13FCA219F85F19F04D13E0
-A294B512C019804C14004C5B604C5B4C5B604C13804C90C7FC4C5A4C5A4B13F05F4B1380
-4B90C8FC4B5AED1FF84B5A4B5A4B48143F4A5B4A48C8FC4A5A4A48157E4A5A4A5AEC7F80
-92C9FC02FE16FE495A495A4948ED01FCD90FC0150749B8FC5B5B90B9FC5A4818F85A5A5A
-5A5ABAFCA219F0A4405E78DD51>I<92B5FC020F14F8023F14FF49B712C04916F0010FD9
-C01F13FC90271FFC00077FD93FE001017F49486D8049C86C7F484883486C6F7F14C0486D
-826E806E82487FA4805CA36C5E4A5E6C5B6C5B6C495E011FC85A90C95CA294B55A614C91
-C7FC604C5B4C5B4C5B4C5B047F138092260FFFFEC8FC020FB512F817E094C9FC17F817FF
-91C7003F13E0040713F8040113FE707F717F7113E085717FA2717F85A285831A80A31AC0
-EA03FCEA0FFF487F487F487FA2B57EA31A80A34D14005C7E4A5E5F6C495E49C8485BD81F
-F85F000F5ED807FE92B55A6C6C6C4914806C01F0010791C7FC6C9026FF803F5B6D90B65A
-011F16F0010716C001014BC8FCD9001F14F0020149C9FC426079DD51>I<F01F804E7E18
-7F18FFA25F5F5F5FA25F5F5FA294B5FC5E5E5EA25E5EEE3FBFEE7F3FA216FEED01FCED03
-F8ED07F0A2ED0FE0ED1FC0ED3F8016005D15FE4A5A4A5AA24A5A4A5A4A5A4A5AA24AC7FC
-14FE495A5C1303495A495A495A5C133F49C8FC13FE485AA2485A485A485A5B121F485A48
-C9FC12FEBCFCA6CA6CEBC000B1037FB8FCA6485E7CDD51>I<01C0EE01C0D801F8160F01
-FF167F02F0EC07FFDAFF8090B5FC92B7128019006060606060606095C7FC17FC5F17E017
-8004FCC8FC16E09026FC3FFCC9FC91CBFCADED3FFE0203B512F0020F14FE023F6E7E91B7
-12E001FDD9E00F7F9027FFFE00037F02F801007F02E06EB4FC02806E138091C8FC496F13
-C04917E07113F0EA00F090C914F8A219FC83A219FEA419FFA3EA03F0EA0FFC487E487E48
-7FA2B57EA319FEA35C4D13FC6C90C8FC5B4917F8EA3FF001804B13F06D17E0001F5E6C6C
-17C06D4B1380D807FC92B512006C6C4A5B6C6C6C01075B6C01E0011F5BD97FFE90B55A6D
-B712C0010F93C7FC6D15FC010115F0D9003F1480020301F0C8FC406078DD51>I<EE1FFF
-0303B512E0031F14F892B612FE0203814AD9FC037F021F9039C0007FC04A90C7EA1FE0DA
-FFFC6E7E494914074949EC7FF8494914FF49495B4949497F4990C7FC495D5C13FF485BA2
-5A4A6E5B5A715B48496E5B725A4894C8FCA35AA35C48913801FFE0030F13FE033F6D7E4B
-14E092B612F89126E1FE037FB53AE3F0007FFEDAE7E06D7EDAEFC06D7F4B6D7F02FFC76C
-7F4A82717F4A82A2854A8085A24A1780A54A17C0A37EA77EA47E6E1780A27EA21A007E4D
-5B7E6E5E7E6E5E6C4C5B6D7E013F4B5B6D6C4A5B6D01C0495B6D6D90B5C7FC6DD9FC0713
-FC6D90B65A6D5E023F15C0020F92C8FC020114F8DA001F1380426079DD51>I<EA07E012
-0F7F13FCEBFFFC91B912F8A45AA21AF01AE01AC01A801A00A248606161616101E0C9123F
-01804C5A48CA485A4D90C7FC60007E4C5A17074D5A4D5A4D5A485F4D5A17FF4C90C8FCC9
-485A5F4C5A160F4C5A5F163F4C5A16FF5F5D94C9FC5D5D5E150FA24B5AA2153FA24B5AA2
-15FFA34A5BA25CA35CA44A5BA45CA65CAD6E5BA26E5BDA03FECAFC6E5A456377E051>I<
-92383FFF800203B512FC021FECFF80027F15E049B712F849D9F0077F010F90C76C7ED91F
-FCEC1FFFD93FF06E7F494802037F494882717F484980854890C9127FA24884183FA25A80
-A380806E157F6E5E14FE6E7E6F4A5A6C14F003FC495B03FF495B6C1580DCE0075B6CDBF8
-0F90C7FC9338FE1FFE6C9238FF7FF84D5A6D16C06D5E6D4BC8FC6D6F7E6D16E00101826D
-16FC023F814A8149B87E010783498390263FFE3F8190267FFC0F819026FFF003814849C6
-FC48496D804849131F4890C7000780160148486E1580003F163F49150F007F7014C04915
-01717E8400FF835B8484A384A21A80A27F007F1900607F003F606D160F001F606D4C5A6C
-6D153F6C6D4B5A6C01F04B5A6C01FC02035B6C01FF021F5B6D9027F001FFFEC7FC6D90B6
-5A010F16F001035E010093C8FC020F14F8DA007F90C9FC426079DD51>I<F00FE04E7EA2
-4E7EA34E7EA24E7EA34D7FA24D80A24D80A34D80A24D80A34D80A2DD7FBF7FA2181F05FF
-8017FE04016D7FA24D7E04038217F804076D80A24D7E040F8217E0041F6D80A24D7F043F
-825F047F6E7FA294C77E4C825E03016F7FA24C800303845E03076F80A24C80030F845E03
-1F6F80A24C81033F845E037F707F93B9FCA292BA7EA24A85A203FCC912070203865D0207
-71805D86020F864B82021F865D87023F864B83027F8692CBFC874A864A840101875C496C
-728090381FFFC0B700E092B812FEA66F647BE37A>65 D<BB12F0F2FF801BF81BFEF3FFC0
-88D800010280C7000114F8DF003F7F080F13FF74807480867480757FA2757FA28987A289
-A965A26365A2515BA298B55A505C505C5091C7FC505B505B087F13F00703B512C096B6C8
-FC93B812F81BC01BF8F3FF801CE00480C8001F13F8080713FE08016D7E7480757F757F75
-7F89757F89871E80871EC0A41EE087A663A21EC0A3631E80A2511400A2515B515B6398B5
-5A505C08075C081F5C97B6C7FCBD5A1CF81CE099C8FC1BF898C9FC63627AE173>I<4DB5
-ED03C0057F02F014070407B600FE140F047FDBFFC0131F4BB800F0133F030F05FC137F03
-3F9127F8007FFE13FF92B6C73807FF814A02F0020113C3020702C09138007FE74A91C900
-1FB5FC023F01FC16074A01F08291B54882490280824991CB7E4949844949844949844986
-5D49498490B5FC484A84A2484A84A24891CD127FA25A4A1A3F5AA348491A1FA44899C7FC
-A25CA3B5FCB07EA380A27EA2F50FC0A26C7FA37E6E1A1F6C1D80A26C801D3F6C6E1A00A2
-6C6E616D1BFE6D7F6F4E5A7F6D6D4E5A6D6D4E5A6D6D4E5A6D6E171F6D02E04D5A6E6DEF
-FF806E01FC4C90C7FC020F01FFEE07FE6E02C0ED1FF8020102F8ED7FF06E02FF913803FF
-E0033F02F8013F1380030F91B648C8FC030117F86F6C16E004071680DC007F02F8C9FC05
-0191CAFC626677E375>I<BD12FCA488A2D8000102C0C71201F1000F1A01F2007F1B3F1B
-0F1B07757EA28787A288A3F43F80A31C1FA3197EA3F40FC0A499C7FC19FEA31801A21803
-1807181F18FF93B6FCA6EEC000181F180718031801A21800A21D7E197EA21DFCA696C812
-011DF8A31C03A3F407F0A31C0FA21C1F1C3F1DE01C7F1CFF63631B0F093F13C098B5FC1A
-0797B6FCBEFCA31D80A35F617AE06A>69 D<4DB5ED03C0057F02F014070407B600FE140F
-047FDBFFC0131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6C73807FF81
-4A02F0020113C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01F08291B548
-82490280824991CB7E49498449498449498449865D49498490B5FC484A84A2484A84A248
-91CD127FA25A4A1A3F5AA348491A1FA44899C8FCA25CA3B5FCB07E071FB812F880A37EA2
-96C70001ECC000A26C7FA37E807EA26C80A26C80A26C807F6D7F816D7F7F6D7F6D6D5F6D
-14C06D6E5E6E7F6E01FC5E020F01FF5E6E02C0ED7FEF020102F8EDFFC76E02FF02071383
-033F02FC013F1301030F91B638FC007F03014D131F6F6C04E01307040704801301DC007F
-02F8CAFC050191CBFC6D6677E37F>71 D<B912E0A6C702E0C7FCB3B3B3B3AEB912E0A633
-627CE13C>73 D<020FB812F0A691C70001EC8000B3B3B3ACEA03FCEA0FFF487F487F487F
-A2B57EA45E96C7FCA36C49495B604A5B6C90C75C6C484A5B01F84A5BD80FFE4A5B6C6C6C
-90B55A0001D9F80749C8FC6C90B65A013F15F0010F15C001014AC9FCD9001F13C044647C
-E153>I<B912F8A6D8000102C0CBFCB3B3B1F307E0A5F30FC0A61B1FA31B3F1C80A21B7F
-A21BFFA262A262625013006262624FB5FC1907191F4EB6FCBDFC63A553627AE161>76
-D<B700E0040FB7128082828282A2D800016EDC000101FCC7FC719338001FC08383A28302
-FD808302FC80816F7F6F806F8084816F806F806F8084707F827080708085708082708070
-8085717F83718071807180868371807180727F8672808472807280877280847280737F87
-731480857314C07314E01CF07314F8857314FC7413FE7413FF1D9F867414DF7414FF86A2
-86868787A287878787A28787888888A288888890261FFFC084B712F8881D7F1D3F1D1F77
-5A71627AE17E>78 D<BB7E1AFCF2FFC01BF81BFE757ED800010280C7001F80070114F073
-6C7F081F7F747F747F7414807414C0A27414E0A21DF0A27513F8A41DFCA91DF8A498B512
-F0A21DE0A25014C01D8062501400505B505B087F5B4FB512E0071F5C93B9C7FC1BFC1BF0
-1B8008F0C8FC04C0CCFCB3B3A2B97EA65E627AE16E>80 D<BA12F8F1FFE01AFEF2FFC01B
-F01BFED800010280C76C7F070714C0070014F0747F081F7F747F747F7480A2748089A374
-80A389A865A3505CA265A2505C9AC9FC505B505B505B087F5B4FB55A0707148096B548CA
-FC93B812F81BC050CBFC621AFF932680000314C0DE007F7F071F13F8737F737F737F7380
-8885888688A2747FA688A688A676140FF71F80A374801F3F86771400745E746E5BB96E6E
-5B746E485A75EBFE07091F90B55A090715E009015DCF003F91C7FC0A0013FC71647AE178
->82 D<DBFFFCEC01E0020FD9FFE01303027F02FC130749B7130F0107EEC01F011F16F049
-D9C007EBF83F4948C7383FFE7FD9FFF8020FB5FC4801E014014849804849153F91C97E48
-4882001F834982003F83845B007F187FA2193FA200FF181FA27F190FA27FA26D17078080
-806C01F893C7FC80ECFF8015F86CECFFC016FC6CEDFFE017FE6CEEFFE018F86C17FE6C71
-7E6C846C846D17F86D836D836D8313036D18806D6C17C0020F17E01401DA000F16F01500
-040715F8EE007F1703050014FC183F84060713FE84A2007C8300FC83A2197FA3193F7EA3
-1AFC7EA27F1AF86D177F7F1AF06D17FF6D18E06D5E01FF18C06E4B138002E04B130002F8
-4B5A02FFED3FFC01CF01E0ECFFF8018301FF010F5B010191B65A6D6C5E48011F93C7FC48
-010315FC48D9003F14E048020149C8FC476677E35A>I<001FBEFCA64849C79126E0000F
-148002E0180091C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9181F
-A4007E1C0FA600FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>I<B96C
-023FB612FEA6D8000102C0CA0007EBF000E2007FC7FCB3B3B3AA656D63A2821C01806570
-170380525A6E7F6E4F5A70171F6E626E6D4D5A6E6D177F525A6E6E030390C8FC033F01E0
-4B5A6F6DED1FFC6F01FCED7FF80303D9FF80903803FFE06F02F8017F5B6F6C90B7C9FC04
-1F5E040716F8040016C0050F4ACAFCDD003F13C06F647AE17C>I<913803FFFE027FEBFF
-F00103B612FE010F6F7E4916E090273FFE001F7FD97FE001077FD9FFF801017F486D6D7F
-717E486D6E7F85717FA2717FA36C496E7FA26C5B6D5AEB1FC090C9FCA74BB6FC157F0207
-B7FC147F49B61207010F14C0013FEBFE004913F048B512C04891C7FC485B4813F85A5C48
-5B5A5CA2B55AA45FA25F806C5E806C047D7F6EEB01F96C6DD903F1EBFF806C01FED90FE1
-14FF6C9027FFC07FC01580000191B5487E6C6C4B7E011F02FC130F010302F001011400D9
-001F90CBFC49437CC14E>97 D<903807FF80B6FCA6C6FC7F7FB3A8EFFFF8040FEBFF8004
-7F14F00381B612FC038715FF038F010014C0DBBFF0011F7FDBFFC001077F93C76C7F4B02
-007F03F8824B6F7E4B6F13804B17C0851BE0A27313F0A21BF8A37313FCA41BFEAE1BFCA4
-4F13F8A31BF0A24F13E0A24F13C06F17804F1300816F4B5A6F4A5B4AB402075B4A6C6C49
-5B9126F83FE0013F13C09127F00FFC03B55A4A6CB648C7FCDAC00115F84A6C15E091C700
-1F91C8FC90C8000313E04F657BE35A>I<92380FFFF04AB67E020F15F0023F15FC91B77E
-01039039FE001FFF4901F8010113804901E0010713C04901804913E0017F90C7FC49484A
-13F0A2485B485B5A5C5A7113E0485B7113C048701380943800FE0095C7FC485BA4B5FCAE
-7EA280A27EA2806C18FCA26C6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6DEC
-1FC06D01E0EC7F806D6DECFF00010701FCEB03FE6D9039FFC03FFC010091B512F0023F5D
-020F1580020102FCC7FCDA000F13C03E437BC148>I<F17FF8050FB5FCA6EF000F8484B3
-A892380FFF804AB512F8020F14FE023FECFF8391B712E301039138807FF3499039F8000F
-FB011F01E00103B5FC494913004990C87E49488148498148834A815A485BA2485BA25AA3
-485BA4B5FCAE7EA46C7FA37EA26C7FA26C5F806C5F6C6D5D6C6D5D017F93B5FC6D6C6C01
-03806D6D49806D01F0D91FF7EBFFFE6D9039FE01FFE7010190B612876D6CECFE07021F14
-F8020314E09127003FFE00ECC0004F657BE35A>I<92380FFFC04AB512FC020FECFF8002
-3F15E091B712F80103D9FE037F499039F0007FFF011F01C0011F7F49496D7F4990C76C7F
-49486E7F48498048844A804884485B727E5A5C48717EA35A5C721380A2B5FCA391B9FCA4
-1A0002C0CBFCA67EA380A27EA27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE6C17
-016D6C4B5A6D6D4A5A6D01E04A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7FC6D
-6C90B55A021F15F8020715E0020092C8FC030713F041437CC14A>I<EE3FFC0307B51280
-033F14C04AB612F0020715F84A9038F03FFC4AEB807F913A7FFE00FFFE4A5A4B4813FF49
-13F05B4913E0A24913C0A27013FE4949EB7FFCEF3FF8EF1FF0EF07C094C7FCB0B812C0A6
-D8001F01C0C8FCB3B3B0007FB612FCA638657CE431>I<F107F8DB7FFEEC3FFE020FB5D8
-F001B5FC027FDAFE03148049B7128F49DCDFFD13C0010FD9F00FEBFFC149D98001140149
-90C7EBFC0349486E6C7E4948EC3FFF48496E018113800780130048F0C03E97C7FC48496E
-7FA34884A96C60A36C6D4A5BA26C60A26C6D4A90C8FC6D6C4A5A6D6C4A5A6D6D485BDBF0
-0F5B4990B612C060D97C7F4AC9FCD9FC0F14F09126007FFECAFC92CCFC1201A47FA27F80
-14F091B77E18FE6CEFFFC019F06D17FC19FF6D846D846D846D84013F8490BAFC00038548
-01E0C712014890C9000F7F484816014848EE007F4848717E8512FF5B85A56D5F007F616D
-173F003F616D177F6C6C4D5A6C01C003035B6C6D4B5B6C01F8031F5BC601FF92B5C7FC6D
-01F8011F5B011F90B712F8010717E0010094C8FC020F15F0DA003F01FCC9FC4A607CC151
->I<903807FF80B6FCA6C6FC7F7FB3A8EF1FFF94B512F0040714FC041F14FF4C8193267F
-E07F7F922781FE001F7FDB83F86D7FDB87F07FDB8FC0814C7F039FC78015BE03BC8003FC
-825DA25DA25DA45DB3B2B7D8F007B71280A651647BE35A>I<EB0FE0EB3FF8497E48B5FC
-A24880A24880A76C5CA26C91C7FCA238007FFC6D5AEB0FE090C9FCAF903807FF80007FB5
-FCA6C6FC7F7FB3B3AEB712C0A622657BE42C>I<903807FF80B6FCA6C6FC7F7FB3A90503
-B61280A6DD003FEB8000DE0FFCC7FCF01FF04E5AF0FFC04D5B4D90C8FCEF07FC4D5AEF3F
-F04D5A4D5A4C90C9FC4C5AEE0FFC4C5A4C5AEE7FC04C7E03837F03877F158F039F7F03BF
-7F92B5FC838403FC804B7E03F0804B6C7F4B6C7F1580707F707F707FA270807080717FA2
-717F717F717FA2717F717F83867180727F95B57EB7D8E00FECFFF0A64C647BE355>107
-D<903807FF80B6FCA6C6FC7F7FB3B3B3B3ADB712E0A623647BE32C>I<902607FF80D91F
-FFEEFFF8B691B500F00207EBFF80040702FC023F14E0041F02FF91B612F84C6F48819326
-7FE07F6D4801037F922781FE001F9027E00FF0007FC6DA83F86D9026F01FC06D7F6DD987
-F06D4A487F6DD98FC0DBF87EC7804C6D027C80039FC76E488203BEEEFDF003BC6E4A8003
-FC04FF834B5FA24B5FA24B94C8FCA44B5EB3B2B7D8F007B7D8803FB612FCA67E417BC087
->I<902607FF80EB1FFFB691B512F0040714FC041F14FF4C8193267FE07F7F922781FE00
-1F7FC6DA83F86D7F6DD987F07F6DD98FC0814C7F039FC78015BE03BC8003FC825DA25DA2
-5DA45DB3B2B7D8F007B71280A651417BC05A>I<923807FFE092B6FC020715E0021F15F8
-027F15FE494848C66C6C7E010701F0010F13E04901C001037F49496D7F4990C87F49486F
-7E49486F7E48496F13804819C04A814819E048496F13F0A24819F8A348496F13FCA34819
-FEA4B518FFAD6C19FEA46C6D4B13FCA36C19F8A26C6D4B13F0A26C19E06C6D4B13C0A26C
-6D4B13806C6D4B13006D6C4B5A6D6D495B6D6D495B010701F0010F13E06D01FE017F5B01
-0090B7C7FC023F15FC020715E0020092C8FC030713E048437CC151>I<902607FF80EBFF
-F8B6010FEBFF80047F14F00381B612FC038715FF038F010114C09227BFF0003F7FC6DAFF
-C0010F7F6D91C76C7F6D496E7F03F86E7F4B6E7F4B17804B6F13C0A27313E0A27313F0A2
-1BF885A21BFCA3851BFEAE4F13FCA41BF861A21BF0611BE0611BC06F92B512801B006F5C
-6F4A5B6F4A5B03FF4A5B70495B04E0017F13C09226CFFC03B55A03C7B648C7FC03C115F8
-03C015E0041F91C8FC040313E093CBFCB3A3B712F0A64F5D7BC05A>I<D90FFFEB0FFCB6
-90383FFF8093B512E04B14F04B14F8923907FC7FFC92390FE0FFFEC6EC1F806DD93F0113
-FF6D133E157E157C15F8A215F07013FEA24BEB7FFCEF3FF8EF0FE04B90C7FCA55DB3B0B7
-12F8A638417BC042>114 D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48
-B8FC48EBE0014890C7121FD80FFC1407D81FF0801600485A007F167F49153FA212FF171F
-A27F7F7F6D92C7FC13FF14E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C
-826C82013F1680010F16C01303D9007F15E0020315F0EC001F1500041F13F81607007C15
-0100FC81177F6C163FA2171F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D
-0203130002C0EB0FFE02FCEB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F
-13E035437BC140>I<EC07E0A6140FA5141FA3143FA2147FA214FF5BA25B5B5B5B137F48
-B5FC000F91B512FEB8FCA5D8001F01E0C8FCB3AFEF0FC0AC171F6D6D1480A2173F6D1600
-6F5B6D6D137E6D6D5B6DEBFF836EEBFFF86E5C020F14C002035C9126003FFCC7FC325C7D
-DA3F>I<902607FFC0ED3FFEB60207B5FCA6C6EE00076D826D82B3B3A260A360A2607F60
-183E6D6D147E4E7F6D6D4948806D6DD907F0ECFF806D01FFEB3FE06D91B55A6E1500021F
-5C020314F8DA003F018002F0C7FC51427BC05A>I<B70081B600FC0103B512FCA6C66C01
-80C701FCC8381FFE006F6FED03F86D047F5F856F6E16076D646F70140F6D705F866F6E16
-1F6D646F4A6D143F6D99C7FC4E7F6F616D1B7E6F4A6D14FE6D6395B57E7001FC15016E62
-DCC0016E13036EDBF87F5D05038004E0496C14076E62DCF007ED800F6E4B6C5D050F15C0
-04F8496C141F6E62DCFC1FEDE03F6E4B6C92C8FC053F15F004FE496C5C6E197E7048EDF8
-FE6E027E6D5C05FE15FC4D6D13FD6F601BFF6F496E5BA24D806F60A26F496E5BA24D806F
-60A26F496E90C9FCA294C87E6F5FA26F486F5A047C6F5A6E417DBF75>119
-D<007FB600C0017FB512F8A6D8001F01F8C70007EBF0006D040190C7FC6D6D5D6D6D4A5A
-6D6D4A5A70495A6D4C5A6E7F6E6D495A6E6D495A7049C8FC6E4A5A6E6D485A6E6D485A6E
-13FFEF8FF06EEC9FE06FEBFFC06F5C6F91C9FC5F6F5B816F7F6F7F8481707F8493B57E4B
-805D4B80DB0FF37FDB1FE17F04C080153F4B486C7F4B486C7F4A486D7F4A486D7F4A5A4B
-6D7F020F6E7F4A486D7F4A486D804A5A4AC86C7F49486F7F4A6F7F0107707FEB3FFFB600
-F049B7FCA650407EBF55>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmsy10 10.95 3
-/Fi 3 16 df<007FB812F8B912FCA26C17F83604789847>0 D<EE7FFE0307B512E0033F
-14FC92B7FC0203D9C00313C0DA0FFCC7EA3FF0DA3FE0EC07FCDA7F80EC01FED901FEC9EA
-7F80D903F8EE1FC0D907E0EE07E04948707E4948707E49CB7E017E187E498449844848F0
-0F8000031AC04918074848F003E0A24848F001F0A248CD12F8A2001E1A78003E1A7CA200
-3C1A3C007C1A3EA200781A1EA300F81A1FA2481A0FAB6C1A1FA200781A1EA3007C1A3EA2
-003C1A3C003E1A7CA2001E1A78001F1AF8A26C6CF001F0A26C6CF003E0A26C6CF007C06D
-180F00011A806C6CF01F006D60017E187E6D606D6C4C5A6D6C4C5A6D6C4C5AD903F8EE1F
-C0D901FEEE7F809026007F80DA01FEC7FCDA3FE0EC07FCDA0FFCEC3FF0913B03FFC003FF
-C0020090B6C8FC033F14FC030714E09226007FFEC9FC50557BC05B>13
-D<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0AA6C1580A3
-6C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA72D>15
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmr10 10.95 86
-/Fj 86 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
-F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
-FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
-D<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90393F8001FE90
-387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC000315011500B3AC486C
-497EB5D8F87F13FCA32E407EBF33>I<EC03FF023F13EE9138FE01FEEB03F090380FE003
-EB1FC0EB3F80EB7F005B5B150148481300AEB7FCA3D801FCC7FCB3AE486C497EB5D8F87F
-13FCA32E407EBF33>I<DA03FE49B4FC91273FFF801F13C0913BFE03E07F01F0903C03F0
-00F1FC0078D90FE0D97FF0131C49484948133E4948484913FF494848495A5B491500A248
-485C03016E5A0300153896C7FCAA197FBBFCA3D801FCC738FE00018485B3AC486C496CEC
-FF80B5D8F87FD9FC3F13FEA347407EBF4C>I<121EEA7F80EAFFC0A9EA7F80ACEA3F00AC
-121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33
-D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013
-00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E
-0018130C0038131C003013181C1C7DBE2D>I<4B6C130C4B6C131EA20307143EA24C133C
-A2030F147CA293C71278A24B14F8A2031E5CA2033E1301A2033C5CA3037C1303A203785C
-A203F81307A24B5CA20201140F007FBAFCBB1280A26C1900C72707C0003EC8FC4B133CA3
-020F147CA292C71278A24A14F8A2021E5CA3023E1301007FBAFCBB1280A26C1900C727F8
-0007C0C8FC4A5CA20101140FA24A91C9FCA301035CA24A131EA20107143EA24A133CA201
-0F147CA291C71278A34914F8A2011E5CA2013E1301A2013C5CA201186D5A41517BBE4C>
-I<013F1603D9FFC04B7E2601E0E0150F2607C070151F48486C4BC7FC023E157E48486C15
-FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F3F13FD007E903A070FFFF1F0007C0200EB03
-E0160000FC6D6C495A170F604DC8FC5F173E5F17FC5F4C5A1603007CD907005B4C5A007E
-150F003E495C020E49C9FC003F5D6C49133E260F803C5B023813FC6C6C485B3A01E0E001
-F03800FFC090273F0003E0133F90C70007ECFFC09339C001E0E0923A0F8007C070031F49
-487E0400143C033E90381F001C037E497F037C133E4B150F0201027E7F4B137C4A5A0207
-02FCEB03805D4A5A141F92C7FC143E147E147C5CA2495A0103037CEB07005C4948147E01
-0F033E5B4A160E49C8123F496F5B013E92380F803C49173801FC6F6C5A49923801E0E049
-6FB45A0160043FC7FC41497BC34C>37 D<121EEA7F8012FF13C0A213E0A3127FEA1E6012
-00A413E013C0A312011380120313005A120E5A1218123812300B1C79BE19>39
-D<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B12015B1203A2485A
-A2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F
-120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB01C0EB00E014
-701430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA2
-7FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A614C0130FA31480
-A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A
-145A7BC323>I<EB03C0A2805CA600F0140F00FC143F00FE147F00FF14FF393FC3C3FC39
-0FE187F03903F18FC03900FDBF00EB3FFCEB0FF0EB03C0EB0FF0EB3FFCEBFDBF3903F18F
-C0390FE187F0393FC3C3FC39FF03C0FF00FE147F00FC143F00F0140F00001400A6805CA2
-20277AC32D>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113
-80120313005A120E5A1218123812300B1C798919>44 D<B512FEA617067F961E>I<121E
-EA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>I<ED0180ED03C01507A21680150FA2
-16005DA2151E153EA2153C157CA2157815F8A25D1401A25D1403A25D1407A25D140FA24A
-C7FCA2141E143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A25C130FA291C8
-FC5BA2131E133EA25BA2137813F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2
-121E123EA2123C127CA2127812F8A25A1260225B7BC32D>I<EB01FE90380FFFC090383F
-03F090387C00F849137C48487F48487F4848EB0F80A2000F15C04848EB07E0A3003F15F0
-A290C712034815F8A64815FCB3A26C15F8A56C6CEB07F0A3001F15E0A36C6CEB0FC0A26C
-6CEB1F80000315006C6C133E6C6C5B017C5B90383F03F090380FFFC0D901FEC7FC263F7D
-BC2D>I<EB01C013031307131F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8
-A31D3D78BC2D>I<EB07FC90383FFF8090B512E03903F01FF83907C007FC390F0001FE00
-1E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0
-153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A49
-5A495A495A49C71270133E133C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7
-FCA3243D7CBC2D>I<EB07FC90383FFF809038F80FE03901E003F839078001FCD80F007F
-000E6D7E001E1580D81F80137F486C14C07FA27F5BA2121F6C5AC8138015FF1600A24A5A
-A24A5A5DEC07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07F86E7E6E7E6E7E1680ED
-7FC0A216E0153FA216F0A2120C123F487E487EA316E0A249137F6CC713C01278EDFF807E
-6C4913006C495A3907C007FC3903F80FF0C6B55A013F1380D907F8C7FC243F7CBC2D>I<
-150E151E153EA2157EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01
-C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5A
-B8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5
-FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8
-496C7E49137E497F90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA4
-16E090C7121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C48
-5A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1FE0ECFFF8903803F03E90
-380FC00F90391F000780133E017EEB1FC049133F4848137F12035B12074848EB3F80ED1F
-00001F91C7FC5BA2123FA3485AA214FE903887FF8039FF8F07E090389C01F09038B800FC
-01B0137E13F0497F16804914C0A2ED1FE0A34914F0A5127FA6123F6D14E0A2121FED3FC0
-A26C6C1480A20007EC7F006C6C137E6C6C5B6C6C485A90387E07F06DB45A010F1380D903
-FCC7FC243F7CBC2D>I<1238123C123F90B612FCA316F85A16F016E00078C712010070EC
-03C0ED078016005D48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25C
-A2147C147814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407B
-BD2D>I<EB03FC90381FFF8090387C07E09038F001F83901E0007C48487F48487F48C7FC
-ED0F80121E16C0003E1407A4123FA26DEB0F807F6C6C131F6D140001FC133E6C6C5B9038
-FF80786C6D5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F013F13F801787F48486C7E
-3903E01FFF48486C1380260F800313C048487E489038007FE0003E143F007E141F007CEC
-0FF01507481403A31501A46C15E0007C1403A2007E15C06C14076CEC0F806DEB1F006C6C
-133ED807F05B3901FC03F86CB512E0011F1380D903FCC7FC243F7CBC2D>I<EB03FCEB1F
-FF90387E07C09038FC03F048486C7E48486C7E4848137C000F147E4848137F81003F1580
-5B007F15C0A2151F12FF16E0A516F0A5127F153FA36C7EA2001F147F120F6C6C13FF6D13
-DF000313013900F8039F90387E0F1FD91FFE13E0EB07F090C7FCA2ED3FC0A41680157FD8
-0F801400487E486C13FEA24A5A5D49485AEB8007391E000FE0001F495A260FC07FC7FC38
-03FFFE6C13F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FC
-B3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA
-7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A312031300
-5A1206120E120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0CDFCAE00
-7FB912E0BA12F0A26C18E03C167BA147>61 D<EB1FF890B5FC3903E01FC0390F0007F000
-1EEB03F848EB01FC4814FE140000FE14FF7E7FA46CC7FC123EC7EA01FEA2EC03FCEC07F8
-15F0EC0FC0EC1F80EC3F00143E5C147814F85C13015CA2495AA25CAB91C7FC90C8FCA8EB
-0780EB1FE0A2497EA46D5AA2EB078020407BBF2B>63 D<15074B7EA34B7EA34B7EA34B7E
-A34B7E15E7A2913801C7FC15C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D7E
-A34A6D7EA34A6D7EA349486D7E91B6FCA249819138800001A249C87EA24982010E157FA2
-011E82011C153FA2013C820138151FA2017882170F13FC00034C7ED80FFF4B7EB500F001
-0FB512F8A33D417DC044>65 D<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE70
-7E701380EF7FC0EF3FE0A2EF1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF80
-4C1300EE03FCEE0FF8EE7FE091B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3F
-E0EF1FF018F8170F18FC1707A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC00403
-138048486C90380FFE00B85A17E094C7FC373E7DBD40>I<DB3FF01306912603FFFE130E
-020F9038FF801E913A3FF007E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE494814
-0FD93FE0140749481403495A91C812014848150012034848167E5B000F173EA24848161E
-A2123F5B180E127FA349160012FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007
-173C6D16386C6C1678000117706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D
-6CEC1F00D903FE143E902600FF8013F891393FF007F0020FB512C0020391C7FC9138003F
-F037427BBF42>I<B712FCEEFF8017E000019039C0001FF86C6C48EB03FEEE00FF717E71
-7EEF0FE084717E717E170184717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A2
-1980A218FF19004D5AA24D5A6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A
-178004FCC8FC3C3E7DBD45>I<B912E0A300019038C000016C6C48EB001FEF0FF01703A2
-17011700A31870A418381638A41800A21678A216F81501150791B5FCA3EC800715011500
-1678A21638A2180EA3181C93C7FCA4183C1838A21878A318F8EF01F0A21707170F173F48
-486CEB03FFB912E0A3373E7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0
-170F1707A21703A31701A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC80
-07150115001678A21638A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C91
-2603FFFE131C021F9038FF803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948
-143DD91FE0141F4948140F4948140701FF15034890C8FC491501485A000716005B000F17
-7C5B001F173CA2485AA2181C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE
-00EF03FC123FA27F121FA26C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907
-F8141ED903FEEC3C7C902600FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC91
-38003FF03C427BBF47>I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3
-A691B7FCA30280C7120FB3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612
-F0A3C6EBF000EB3FC0B3B3B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713
-006E5A1401B3B3A6123FEA7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A
-6C495A6C495A2603E07EC7FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA300
-0101E0C7000F138026007F80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C
-5A4C5A4CC8FC163E5E5E4B5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7
-FCEC878791388F03FE91389E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2
-707E707EA2707F717E84173F717E717EA2717E848419802601FFE04A13C0B600C090B6FC
-A3403E7DBD47>I<B612F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35F
-A25F5F5F4C5A160748486C133FB8FCA3313E7DBD39>I<B500C093B512C0A300016D4BEB
-E000D8007F1880D977F0ED03BFA3D973F8ED073FA3D971FC150EA2D970FE151CA3027F15
-38A36E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A26E6C130EA36E
-6C5BA3037F5BA26F6C5AA36F6C5AA392380FE1C0A3923807F380A26FB4C7FCA36F5AA213
-F8486C6D5AD807FFEFFFE0B500F80178017FEBFFC0A34A3E7CBD53>I<B56C91B512F880
-80D8007F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA2
-6E7E6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2
-EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F17
-0FA2170701F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807
-FFFE91391FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E
-7E49C86C7E01FE6F7E00018349150300038348486F7EA248486F7EA2001F188049167F00
-3F18C0A3007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A3
-6C6C4B1300A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4A
-C7FC6D6C14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE0
-3C427BBF47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F
-80EF3FC018E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3F
-F091B612C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<ED7FE0913807FF
-FE91391FC03F8091397F000FE0D901FCEB03F8D907F0EB00FE4948147F49486E7E49486E
-7E49C86C7E498248486F7E49150300038348486F7EA2000F834981001F1880A24848EE7F
-C0A3007F18E0A249163FA200FF18F0AC007F18E0A26D167FA3003F18C0A26C6CEEFF80A3
-000F18006D5D0007DA0F805B6C6C90393FE003FCED70706C6C496C485A6C6C48486C485A
-017FD9800E5BD93F819038061FC0D91FC19038073F80D90FE14AC7FCD907F1EB03FE9026
-01FDC013F8903A007EE007E091271FF03FC013180207B5FC9139007FE1E0DB0001143883
-711378A2706C13F0EFFF0318FFA27113E0A37113C0711380711300715AEF01F83D527BBF
-47>I<B712C016FCEEFF800001D9C00013E06C6C48EB1FF0EE07FCEE01FE707E84717EA2
-717EA284A760177F606017FF95C7FCEE01FCEE07F8EE1FE0EEFF8091B500FCC8FC16F091
-388001FCED003FEE1FC0707E707E83160383160183A383A484A4F0C004190EA28218E005
-7F131E2601FFE0161CB600C0EB3FF094381FF83805071370CA3801FFE09438003F803F40
-7DBD43>I<D907FC131890391FFF8038017FEBE0783901FC03F83A03F0007CF8D807C013
-3F4848130F001F140748C7FC003E1403007E1401A2007C140012FC1678A46C1538A27EA2
-6C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C14FF6C15C0013F14E001
-0714F0EB007F020713F89138007FFC150FED07FE15031501ED00FFA200E0157FA3163FA2
-7EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07E0D8F9FCEB0FC03AF07F
-803F8090391FFFFE00D8E00713F839C0007FC028427BBF33>I<003FB91280A3903AF000
-7FE001018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0
-A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C090B512F8A3000101E0C7
-0007130026007F80EC01FC715A1870B3B3A4013F16F06E5DA21701011F5E80010F15036E
-4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91390FF00FE00203B51280
-020049C8FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0020113E06C0180913800
-7F806CEF3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C5DA26E140101
-075EA26E140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F133C023F1438
-A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191C8FCA26F5A6E
-130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>I<B500FE017F
-B5D88007B5FCA3000301C0010101E0C713F86C90C849EC3FE07148EC0F807E7215006E14
-3F017F190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A2933801C3FC6E18F001076104
-037F6E0281140101036104077F17006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0DA
-7F80160EA24CEB1FE003C0161E023F171C047814F0DBE070010F133C021F173804F014F8
-4C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA26E
-5FA24B157F020094C8FCA24B81037C153EA20378151E0338151C58407EBD5D>I<007FB5
-D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C6D
-6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BEDF8
-1E913807FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFEED
-71FF15F103E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E02386D
-7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E0007
-6DEC7FFFB500FC0103B512FEA33F3E7EBD44>I<B66C0103B51280A3000101F0C8EBF800
-6C6C48ED3FC0725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D6D
-1303606E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E13
-016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA341
-3E7FBD44>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>91
-D<486C13C00003130101001380481303000EEB070048130E0018130C0038131C00301318
-0070133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F133F
-A2003F131F01C013E0390F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFC
-A40E5B7FC319>I<EA0180120313005A120E5A12181238123012701260A312E05AA412CF
-EAFFC013E0A3127FA2123F13C0EA0F000B1C7ABE19>96 D<EB0FF8EBFFFE3903F01F8039
-078007E0000F6D7E9038E001F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5
-FC90381FF87FEB7F803801FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA315FFA3
-007F5BEC03BF3B3F80071F8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A003FC001
-F0292A7DA82D>I<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039
-FDE001F09039FFC000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA
-17F0A2160FA217E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F090
-39E0780FC09026C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F801
-7C131E4848131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290
-C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C
-6C137890383F01F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA31507150315
-01B114FF010713E190381F80F990387E003D49131FD803F81307485A4913034848130112
-1F123F5B127FA290C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C
-497ED8007C017913F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE
-90380FFFC090383F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15
-C04848130FA2127F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E150100
-0F15C06C6C13036DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7
-FC232A7EA828>I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F8114
-01137FEC00FE01FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<
-167C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC
-0600000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E039
-03FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15
-E06C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E
-157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D
-7EA82D>I<EA01FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F0
-9138E001F8D9FDC07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E
-3F7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA31207120312
-01B3AC487EB512F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC
-147FEB7FFFA313017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03
-F0381E07C0380FFF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B292B512
-80A392383FFC0016E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD
-9038FFDFC0EC9FE0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA28248
-6C14FEB539F07FFFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512
-F8A3153F7DBE1A>I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B
-7803F03C01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91
-C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>
-I<3901F801FE00FF903807FFC091381E07E091387803F000079038E001F82603F9C07F00
-01138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14
-FF010713E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F
-15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F8
-6C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFF
-F0010090C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F0
-3A07FFC001FC6C496C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0F
-F0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0
-DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C9038
-1F80F090397F00387C01FC131CD803F8130E4848EB0FFC150748481303121F485A150148
-5AA448C7FCAA6C7EA36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990
-383F81F190380FFFC1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807
-E000FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A3
-5BB3A5487EB512FEA31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E
-1307003C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C
-7F6C1480000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15
-F07E14016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<
-131CA6133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A9
-12009038FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC
-14FE00FF147FA3000714030003140100011400B3A51501A31503120015076DEB06FF017E
-010E13806D4913FC90381FC078903807FFE00100903880FE002E297DA733>I<B539E00F
-FFE0A32707FE000313006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2EC
-C007011F91C7FCA290380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFE
-F001005BA2EC7FC0A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290F
-FE003FE00013C06C486D48EB3F806C4817006D010F141E00016F131C15076D163C00004A
-6C1338A2017F5E4B7E151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE0
-017F5BEDE03F02F0140701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF
-14DE6D15FCED00076D5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<
-B539F01FFFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7
-FC90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147B
-ECF1FC903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80
-486C80000F4A7EB539803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C
-48EB01FC6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F
-130EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FC
-A2140EA2141E141C143C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA
-780EEA3C3CEA1FF8EA07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A001E
-495A121C4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A
-90393FC00380A2EB7F80EBFF005A5B484813071207491400485A48485BA248485B484813
-7F00FF495A90B6FCA221277EA628>I<BE12C0A25A0280985B>124
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmbx12 14.4 60
-/Fk 60 122 df<922601FFFC903801FFE0033F9026FF801F13F84AB6D8E07F13FE020F03
-F9B6FC023FD9C00FB500C0138091277FFC0003D9FE0113C0902601FFE049495A49494949
-4813E04990C714F049484A13E0495A19C0495A7413C0017F17804A6E6E1380719138007E
-007192C7FCAEBCFCA526007FF8C7000301C0C8FCB3B3A7007FB5D8F803B612F0A553547D
-D34E>11 D<151E153E157E15FCEC01F8EC07F0EC0FE0EC1FC01580143FEC7F0014FE1301
-495A5C1307495AA2495A133F5C137FA2495AA24890C7FCA25A5BA21207A2485AA3121F5B
-A3123FA25BA3127FA55B12FFB3A3127F7FA5123FA37FA2121FA37F120FA36C7EA21203A2
-7F7EA26C7FA26D7EA2133F80131F6D7EA26D7E1303806D7E1300147FEC3F80141F15C0EC
-0FE0EC07F0EC01F8EC00FC157E153E151E1F7973D934>40 D<127012F8127C127E7EEA1F
-C06C7E6C7E12037F6C7E6C7E7F6D7E133F806D7EA26D7E80130780A26D7EA26D7EA21580
-7FA215C0A2EC7FE0A315F0143FA315F8A2141FA315FCA5140F15FEB3A315FC141FA515F8
-A3143FA215F0A3147F15E0A3ECFFC0A21580A25B1500A2495AA2495AA25C130F5C495AA2
-495A5C137F49C7FC5B485A485A5B1207485A485A48C8FC127E127C5A12701F7979D934>
-I<EA07F0EA1FF8487E487E7FB5FC1480A314C0A37EA27E7EEA07F3EA0003A213071480A3
-130F1400A25B131E133E133C137C5BA2485A485A485A485A48C7FC121E120C1228769025
->44 D<EA07F0487E487E487E487EB51280A76C13006C5A6C5A6C5A6C5A1111769025>46
-D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7FCB3B3B3A600
-7FB712FEA52F4E76CD43>49 D<EC3FFE0103B512E0010F14FC013F14FF90B712C048D9C0
-7F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F48488001F01680486C6E13C0
-7F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05EA218C05E1880A24C13
-005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48C8FC4A5A5D4A
-48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F80140749C8FC013E15
-0F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>I<91380FFFC091B512
-FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803F86E7E491680
-D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C1300
-5FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E00301
-13F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FEA2EA03E0EA0F
-F8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F04A13C06C484A
-1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F1580010302FCC7FCD900
-1F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F167FA216FF5D5DA2
-5D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580EC1F005C147E14
-7C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207485A485A90C8FC12
-3E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<D80380150ED807E015
-7E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E16F016C093C8FC15F801E190
-C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E9026FFF8077FDAC0017F49C713
-F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A418F0A3EA0FE0487E487E487E
-487EA418E0A35B6C484A13C05B491680003EC85A003F17006C6C4A5A6D5D6C6C4A5AD807
-F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC6D14F8010314C09026007FF8
-C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91397FFE03FE903A01FFF0007F
-4901C0EB3F804990C7121F4948EC7FC0494814FF49484913E049485B01FF5C485BA2485B
-5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC5AA21508913801FFF8020713
-FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013804A15C0A24A15E07013F05C
-18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E06C6D15C07E6E4913806C6D15
-006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C0010092C7FC023F13FC020713C0
-364F7ACD43>I<121F7F7FEBFF8091B81280A45A1900606060A2606060485F0180C86CC7
-FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC812014B5A5E4B5A
-150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141FA2143FA4147F5D
-A314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13FC0103B67E010F
-15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E48488048486E13800007
-17C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE4913806C7FDBC003
-13009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C4BC7FC6D806D81
-010F15E06D81010115FC010781011F81491680EBFFE748018115C048D9007F14E0484801
-1F14F048487F48481303030014F8484880161F4848020713FC1601824848157F173FA217
-1FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F6C6CEDFF806C6C
-6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F1580010102FCC7FCD900
-0F13C0364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C
-8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E03
-1F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D84
-4AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A820103854A
-82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65
-D<BA12C019FEF1FFC01AF01AFCD8000701F0C7000313FFDE007F7F737F070F7F737F8785
-87858785A287A84F5BA263616361634F5B4F5B077F90C7FC4E485A060713F892B812E097
-C8FC861AF003F0C7000313FE9539003FFF80070F13E0737F07017F87737F747E1C807413
-C0A27413E0A31CF0A386A362A31CE0A2621CC0A250138097B5FC1C004F5B19074F5B073F
-13F04EB55ABC128098C7FC1AF81AC007F8C8FC54527CD160>I<932601FFFCEC01C0047F
-D9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F020F01FCC7
-383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F882494982494982494982
-4949824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA25AA2
-98C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D
-606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D
-6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0033F
-93C8FC030715FCDB007F14E0040101FCC9FC525479D261>I<BA7E19FCF1FF801AF01AFC
-D8000701F0C7000F13FF060014C0071F7F070713F807017F737F747E747F747F86747F74
-7F8886888688A2757EA31D8087A21DC0A51DE0A387A963A31DC0A51D80A2631D00A3515A
-A2646264505B6264505B505B5090C7FCF2FFFE4F5B07075B071F5B96B512C0060F91C8FC
-BB5A1AF01AC007FCC9FC19805B527CD167>I<BC1280A5D8000701F8C7000114C0F0001F
-19071901851A7F1A3F1A1FA2F20FE0A21A07A31A03A318F81BF01A01A497C7FC1701A317
-031707170F177F92B6FCA59238F8007F170F170717031701A317001B3EA31B7CA395C8FC
-A21BFCA21BF8A21A01A31A031BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F0603B5
-FCBCFCA21BC0A34F517CD058>I<BB12FEA5D8000701F8C700077FF0007F191F19078585
-8586861B80A21A1FA31A0FA41BC006F81307A497C7FCA31701A317031707170F177F92B6
-FCA59238F8007F170F170717031701A31700A795C9FCB3B812F8A54A517CD055>I<9326
-01FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003
-EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F88249
-49824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA24849181F
-A3485B1B0FA25AA298C8FC5CA2B5FCAE6C057FB712E0A280A36C94C7003FEBC000A36C7F
-A36C7FA27E6C7FA26C7F6C7FA26D7E6D7F6D7F6D6D5E6D7F6D01FC93B5FC6D13FF6D6C6D
-5C6E01F0EC07FB020F01FEEC1FF10203903AFFF001FFE0020091B6EAC07F033FEE001F03
-0703FC1307DB007F02E01301040149CAFC5B5479D26A>I<B8D8C003B8FCA5D8000701F8
-C9001FEBE000B3AE92BAFCA503F8C9121FB3B1B8D8C003B8FCA560527CD169>I<B812C0
-A5D8000701F8C7FCB3B3B3B2B812C0A52A527CD132>I<027FB71280A591C76C90C7FCB3
-B3B3EA07F0EA1FFC487E487EA2B57EA44C5AA34A485B7E49495BD83FF8495BD81FE05DD8
-0FFC011F5B2707FF807F90C8FC000190B512FC6C6C14F0011F14C0010101F8C9FC39537D
-D145>I<B800C091B612F8A5D8000701F8C90003EBF8009738007F8051C7FC505AF203F8
-F20FF0505A505A505A50C8FCF101FCF107F84F5A4F5A4F5A4F5A07FEC9FCF003FC4E5A4E
-5A4E5A4E5A4E5ADD01FECAFC4D5A4D5A4D5A4D7E173F4D7E4C487E4C7F5E4C804C804C80
-EEFF7F9226F9FE3F7FDBFBFC809226FFF81F7F4C7EDCC0077F0480804C7E4B6D804B6D80
-4B8284727F727F8684727F727F8784728087737F85737F87737F85737F88857380747F88
-8697B512FCB800C0013FECFFFEA55F527CD169>I<B812F8A5D8000701F8CAFCB3B3A91A
-7CA41AFC1AF8A51901A31903A219071AF0190FA2191F193F197F19FF180360183F4DB5FC
-BB12E0A546527CD151>I<B600FC073FB512FE6F61A26F96B6FCA2D80007F5C00070EF01
-EFA202EF6DEF03CFA202E76DEF078FA202E36DEF0F0FA202E16D171EA302E06D173CA26F
-6C1778A26F6C17F0A26F6DED01E0A26F6DED03C0A36F6DED0780A26F6DED0F00A26F6D15
-1EA26F6D5DA3706C5DA2706C5DA2706D495AA2706D495AA2706D495AA3706D49C7FCA270
-6D131EA2706D5BA2716C5BA3716C5BA271EB81E0A271EBC3C0A271EBE780A27101FFC8FC
-A3715BA2715BA2725AA2725AA2D93FFC6F5AB74DB712FEA2725AA2725A77527CD180>I<
-B600FC93B7FC8181A282D800076E9239003FFC0070EE07E08282A28202EF7F02E77F02E3
-80A202E18002E0806F7F6F7F6F7FA26F7F6F7F6F806F80A26F80707F707F707F707FA270
-7F7080708070808583717F717F717F717FA27114807114C07114E07213F07213F8A27213
-FC7213FE7213FF721487A27214C77214E77313F77313FF85A285858585A28586868686A2
-86868686A2D93FFC187FB7173F1B1F1B0F1B07755A60527CD169>I<93380FFFC00303B6
-FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90C7000313F0DA7FFC02
-007F494848ED7FFE4901E0ED1FFF49496F7F49496F7F4990C96C7F49854948707F494870
-7FA24849717E48864A83481B804A83481BC0A2481BE04A83A2481BF0A348497113F8A5B5
-1AFCAF6C1BF86E5FA46C1BF0A26E5F6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D
-4D5A6E5E6C626D6C4C5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A
-6D01FF02035B023F01E0011F13F0020F01FC90B512C0020390B7C8FC020016FC031F15E0
-030392C9FCDB001F13E0565479D265>I<BAFC19F819FF1AE086D8000701F0C7001F13FC
-060113FF726C13807313C0070F13E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC
-61A21BF84F13F04F13E0614F13C04F13004E485A061F5B92B812F01AC04FC7FC19E003F8
-CBFCB3AEB812C0A550527CD15C>I<B912F0F0FF8019F819FF1AC0D8000701F0C714F006
-0F7F060113FE727F737F737F85737F87A2737FA387A863A2616363A24F5B4F5B4F90C8FC
-4F5A06035B060F13F095B512C092B8C9FC19F819E019F89226F0000313FE9439007FFF80
-727F727F727F727F727F8684A28684A787A71D1C75133EA38575137E73157C7513FC7314
-01B86C6D9038F803F807039038FE07F07390B512E0736C14C0080F1400CEEA7FFC5F537C
-D164>82 D<91260FFF80130791B500F85B010702FF5B011FEDC03F49EDF07F9026FFFC00
-6D5A4801E0EB0FFD4801800101B5FC4848C87E48488149150F001F824981123F4981007F
-82A28412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86CECFF8016FC6CEDFF
-C017F06C16FC6C16FF6C17C06C836C836D826D82010F821303010082021F16801400030F
-15C0ED007F040714E01600173F050F13F08383A200788200F882A3187FA27EA219E07EA2
-6CEFFFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02F8EC7FF0903B1FFF
-C003FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D9007F90C8FC3C5479D2
-4B>I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F
-49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912
-F0A553517BD05E>I<B800C00103B612FCA5D8000701F8CAEBF000F31F80B3B3B11B3FA2
-6D97C7FC81637F1B7E6D6D17FE505A6E7E505A6E6D15076E4D5A6E6D4B5A6E6D4B5A6E01
-F84B5A6E6DDA03FFC8FC6E6CB46CEB0FFE6F9039F001FFF8030F90B65A030316C0DB007F
-92C9FC040F14F8DC007F13805E537CD167>I<B700FE031FB512FEA5D8001F01F0CA383F
-FE00F307F06D626F170F6D62811B1F6D6D601B3F6D97C7FC6F5F6D197E821BFE6E6D5E1A
-016E6D5E1A036E60701507A26E6D5E1A0F6E6D5E1A1F6E6070153FA26E6D93C8FC626E6E
-147E1AFE6F5E711301A26F6D5C19036F6D5C19076F5E71130FA26F6D5C191F6F6D5C193F
-6F93C9FC715BA26FEC807E19FE706D5A18C1705C18E3705C18F318F770EBFFE0A2705CA2
-705CA37091CAFCA2705BA2715AA3715AA2715AA2715A715A5F537DD166>I<B700FC017F
-B600FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F71EE0FC06D7161876F1C1F6D71
-96C7FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B801F016D66704A806E525A8870
-4A17076E059F5F70021F80080F160F6E6570023F806EDC3E074CC8FC8870027E5F6EDC7C
-03163E7002FC804F6C167E6E1C7C700101814F6C16FC6E745B70010317016E4C6D5D0607
-16C00580496D14036F63DDC00F16E04F6D14076F07F05BDDE01F170F6F92C76C5D1DF8DD
-F03E6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDDFCFC177E6F4A6E147C1DFFDDFF
-F06E14FC6F62A24E816F62A270496F5BA24E817061A295C97E7061A270487090CAFCA370
-48705AA24D1601040360A27048705A84537DD18B>I<003FB7D88003B7FCA5D8000749C8
-000701F8C7FC6D6D9238007F806D6E93C8FC7015FE6D17016E6D5D704A5A6E16076E6D4A
-5A6E6D5D4F5A6E6D143F6E6D4A5A7191C9FC6E16FE6EECC00171485A6F5D6F6D485A6FEB
-F80F71485A6F5D6F6D485AEFFF7F6F4ACAFC6F5C6F5CA2705B705B8482707F707FA2707F
-7080855E4C80855E4C80DC3FCF7F058F7FEE7F074C6C7FDB01FE814C7E4B486C8003076E
-7F4B48814C7F4B486D7F033F824C7F4BC76C7F4B6E7F4A5A4B6E804A486E800207844A48
-814B6F7F4A4883023F824A486F7F92C96C7F02FE840101830103718090263FFFC084B76C
-0103B712F8A55D527CD166>I<B8030FB61280A5D8000F01FCCA003F90C7FC6FEF07F86D
-6D606D4F5A826D6E4C5A6D4F5A826E6D4CC8FC6E18FE826E6D4B5A6E4D5A826E6D4B5A6E
-4D5A836E6E4A5A6E4D5A836F6D4AC9FC6F5E715C6F6D495A6F1503715C6F6D495A6F150F
-06805B6F6E485A6F153F06E05B706D48CAFC705C725A70EBFDFC7013FF61705C82705C61
-82715B96CBFCB3AA030FB712F8A561527ED166>I<EC7FFF0107B512F0013F14FE90B77E
-48D9E00F7F2703FE000113F0486C6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90
-C7FC6C5AC9FCA6037FB5FC020FB6FC91B7FC01071487013FEBF0074913803901FFFC0048
-13F0485B485B485B4890C7FC5A5BA2485AA45EA26D5C007F151D163D6C6C02797F6C6D01
-F113F86C9026C003E1EBFFE06C9026F81FC014F06C90B5487EC6ED001F011F01FC010713
-E0010101E090C8FC3C387CB641>97 D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13
-FE033FEBFFC092B612F002F301017F913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F
-4A6E7F4A824A6E7FA2727EA285A28584A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A
-5B6E4A5B6F495BDACFC04990C7FCDA87F0EB7FFC913A03FE03FFF849C6B612E0496D1480
-49011F01FCC8FC90C7000313C041547BD24B>I<913801FFF8021FEBFF8091B612F00103
-15FC010F9038C00FFE903A1FFE0001FFD97FFC491380D9FFF05B4817C048495B5C5A485B
-A2486F138091C7FC486F1300705A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F1707
-6C6D15C07E6E140F6CEE1F806C6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01F
-F0010390B55A01001580023F49C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE00
-1F1707B3A4913801FFE0021F13FC91B6FC010315C7010F9038E03FE74990380007F7D97F
-FC0101B5FC49487F4849143F484980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C
-7EA37EA26C7F5F6C6D5C7E6C6D5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0F
-FFC07FCF6D90B5128F0101ECFE0FD9003F13F8020301C049C7FC41547CD24B>I<913803
-FFC0023F13FC49B6FC010715C04901817F903A3FFC007FF849486D7E49486D7E4849130F
-48496D7E48178048497F18C0488191C7FC4817E0A248815B18F0A212FFA490B8FCA318E0
-49CAFCA6127FA27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C
-6DEC3F806D6CECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC
-020113F034387CB63D>I<ED3FFC0203B5FC020F14C0023F14E09139FFF81FF0499038C0
-3FF849EB807F49903800FFFC495A495AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB7
-12E0A526007FF8C8FCB3B3A7007FB512FEA52E547CD329>I<DA3FFF14FF0103B5D8F007
-13C0010FDAFC1F13E0013FECFF7F90267FFC0F9038FF9FF09026FFE001EBF83F48496C13
-E0484990387FF01F4890C7D83FF813E0489338FC0FC0F0078048486E6CC7FCA2003F82A9
-001F5EA26C6C4A5AA26C5E6C6D495A6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14
-FC01C314F02607C03F90C9FC91CBFCA2120FA37FA213F813FE90B7FC6C16F817FF18C06C
-836C836C836D828448B9FC12074848C700031480D81FF8EC003F4848150748486F13C083
-485A83A56D5D007F18806D5D003F18006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049
-485A6C01FE011F5B6C6CB71280010F03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>
-I<EB3FF0B5FCA51203C6FCB3A4EE1FFC93B512C0030314F0030F8092391FE07FFC92393F
-001FFE037C8003F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807
-B612C0A542537BD24B>I<137F497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC
-90C8FCADEB3FF0B5FCA512017EB3B3A6B612E0A51B547BD325>I<EB3FF0B5FCA51203C6
-FCB3A54CB512F8A59339003FFE00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE
-7FC04CC8FC4B5A4B5AED0FF8ED1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F
-7F02FE80DAF8077F4A7E6F7F6F7F83707E82707F84707F707F82707F84707F177F717E4D
-13C0B6D8F003B6FCA540537CD247>107 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C
-537BD225>I<D93FF0D91FFCEDFFE0B591B500C0010713FE030302F0011F6D7E030F6E01
-7F8092271FE07FFCD9FF037F922A3F001FFE01F8007F0003027C9126FF03E080C602F06D
-D90780137FDAF1E0038FC77FDAF3C0159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A
-5EA44A5EB3ACB6D8F807B6D8C03FB512FEA567367BB570>I<D93FF0EB1FFCB591B512C0
-030314F0030F8092391FE07FFC92393F001FFE0003027C80C602F07FDAF1E081ECF3C0DA
-F7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542367BB54B>I<913801FFE002
-1F13FE91B612C0010315F0010F9038807FFC903A1FFC000FFED97FF86D6C7E49486D7F48
-496D7F48496D7F4A147F48834890C86C7EA24883A248486F7EA3007F1880A400FF18C0AC
-007F1880A3003F18006D5DA26C5FA26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C
-495BD93FFE011F90C7FC903A0FFF807FFC6D90B55A010015C0023F91C8FC020113E03A38
-7CB643>I<903A3FF001FFE0B5010F13FE033FEBFFC092B612F002F301017F913AF7F800
-7FFE0003D9FFE0EB1FFFC602806D7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4
-721380AC1A0060A36118FFA2615F616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EB
-FFFC9126FBFE075B02F8B612E06F1480031F01FCC8FC030313C092CBFCB1B612F8A5414D
-7BB54B>I<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC00
-03D9E3E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA5
-5CB3AAB612FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003F
-D80FF81307D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFF
-C06C13FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0
-EC003F030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC
-3F8001F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7
-FC2C387CB635>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F
-90B6FCB8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6D
-EBF0FC6DEBFFF86D6C5B021F5B020313802A4D7ECB34>I<D93FF8913801FFC0B50207B5
-FCA50003ED001FC61607B3AE5FA35FA2017F5D173B177B6D6C14F3DC01E313F06D6CD907
-C3EBFFC0903A0FFFC03F836D90B51203010114FE6D6C13F8020701E091C7FC42377BB54B
->I<B600F00107B5FCA5000101F8C8EA7FE06C6DED3F00A2017F163E6E157E013F167C6E
-15FC6D5E6F13016D5E8117036D5E6F13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C13
-3E177E023F147C6F13FC6E5C16816E5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FC
-A26F5AA36F5AA26F5AA26F5AA26F5A6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A5
-000101F0C701F0C7381FF8006E027FED07E06C715DA26E023F150F017F705DA26E181F01
-3F4B6C92C7FC6E606D70143E94B5FC6F177E6D4A6E137C03C001F315FC6D715B160303E0
-01E114016D020702E05B03F013C06D71485A160F03F8D9807F13076D05F85B93381F003F
-03FC160F027F4902FC5BDBFE3E011F131F023F04FE90C8FC167EDBFF7C010F5B6E01FCEC
-FF3E4C6D137E6E5FA24C7F6E5F4C7F6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA203
-3E6FC9FC5A367DB461>I<007FB500F090387FFFFEA5C66C48C7000F90C7FC6D6CEC07F8
-6D6D5C6D6D495A6D4B5A6F495A6D6D91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A
-6EEB8FE06EEBCFC06EEBFF806E91C9FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FC
-DA01FD7F03F87F4A486C7E4A486C7E020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D
-7F495A49486D7F01076F7E49486E7E49486E7FEBFFF0B500FE49B612C0A542357EB447>
-I<B600F00107B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E013F167C6E15FC6D5E
-6F13016D5E6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E
-023F147C6F13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F
-5AA26F5AA26F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0133E486C137E486C13
-7C486C13FC5D14015D14034A5A6C48485A49485A263FC07FCAFCEB81FE6CB45A6C13F000
-035BC690CBFC404D7DB447>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmbx12 20.736 17
-/Fl 17 116 df[<17F0EE03F81607EE0FF0163FEE7FE0EEFFC04B13804B13004B5A4B5A
-4B5A153F4B5A4B5A5C5E4A5B5C4A90C7FC4A5AA24A5A147F5D14FF5D5B495BA2495BA25B
-5D5B92C8FC5BA2495AA213FF5CA25A5CA25AA25C5AA35A5CA35AA25CA25AA55C5AA8B5FC
-A391C9FCB280A37EA87E80A57EA280A27EA3807EA37E80A27EA2807EA280137FA26D7EA2
-7F817F817FA26D7FA26D7F7F81147F81143F6E7EA26E7E6E7F806E7F82806F7E6F7E151F
-6F7E6F7E6F7E6F13806F13C0EE7FE0EE3FF0160FEE07F81603EE00F0>45
-172 110 256 75 40 D[<127812FE7E6C7E13E06C7E6C7E6C7E6C7E6C7E6C7F6C7F806D
-7E6D7E80131F6D7E806D7F6D7FA26D7F817F81147F816E7EA26E7EA28280828082A26E7F
-A28280A28280A282A2157F82A3178081A317C0A281A217E0A58117F0A817F8A381B25DA3
-17F0A817E05DA517C0A25DA21780A35D1700A35E15FFA25EA25C5EA25C5EA24A5BA25E5C
-5E5C93C7FCA24A5AA24A5A5D14FF5D5B5D495BA2495B4990C8FC5C495A133F5C495A495A
-5C485B4890C9FC485A485A485A485A485A138048CAFC5A1278>45
-172 117 256 75 I<96267FFFE01670063FB6ED01F80503B700F01403053F04FC14074C
-B96C130F040706E0131F043F72133F93BA00FC137F0303DC00076D13FF030F03C0903900
-3FFF814B02FCC8000713C3037F02E0030113F792B600806F6CB5FC02034ACA121F4A02F8
-834A02E0834A4A1701027F4A8391B548CC7E494A85495C4C854988494A85494A85495C8A
-4991CDFC90B54886A2484A1B7FA2481E3F5D481E1F5D5A1F0FA2485CA3481E075DA2795A
-489BC9FCA45DA2B6FCB27EA26F0403BA12C0A47EA3816C96C8000302F8C7FCA36C80A36C
-80A27E817E817E817F6D80827F6D806D806D80826D6E606D806E80021F6E5F6E02F05F6E
-806E02FE5F0200DAFFC05E6F02F04BB6FC031F02FE030713CF6FDAFFE0021F1387030392
-26FF8003B51201030093B6EAFC00043F4E133F040706E0131F04014E1307DC003F4CC712
-01050304F8EC0070DD003F038092C8FCDE007F01F0CCFC827A75F798>71
-D<037FB912F8A892C86C49C7FCB3B3B3B3A6EBFF80000313E0487F001F13FCA2487F487F
-A2B67EA46295B5FCA26292C8FC6C4C5CA24A4A5C6C5B6C494A5C4A4A5C6C01C04A91C8FC
-6C90C8485B6C01E04A5B6C01F849B55A6C9026FFC00F14E0013F90B71280010F4CC9FC01
-0316F8010016C0021F4ACAFC0200148055787CF564>74 D<B800C00507B812C083838383
-A28383C7003F6F93C7001F01F0C7FC72060190C8FC84A284848403EF8015E703E3808503
-E18103E08170808270808570807080708182867081718071808371808671807181718183
-728087728072807280848772817281728185738088738073807380857381897381748074
-80868974807480741580867415C01EE07514F07514F87514FC877514FE1EFF7515817515
-C1877614E11FF17614F97614FD7691B5FC8888A28888898989A289898989A2898A8A8A8A
-A28A8A8A8A8B903803FFFEB800F8858B8B8BA28B8B795A8A767AF597>78
-D<922603FFF8150E037FD9FFC0143F0203B600FC5C021F03FF5C027FEEC00149B8EAF003
-49EFFC07010FDA000F13FE4901F09039007FFF8F4901C0020F13DF4990C8000390B5FC49
-4815004801F8163F48844A8248498248844A8248844A834885A291CB7E5A86A286B5FC86
-80A28680A280A26E8380806E187E6E95C7FC6C8015E015FCEDFFC06C15FCEEFFE06C16FF
-18F06CEFFF8019F06C18FE737E6C856C19F06C19FC6D846D846D856D856D850101856D85
-023F846E841407020084031F18801500040F17C0EE007F050716E0EF003F1803DE007F14
-F0191F8585070114F8A28586007E85B4FC86A286A37F86A36D1AF0A37F1CE06D60A26D1A
-C06D607F6D1A806E5F6E4D13006E606E17FF02FC4C5B02FF4C5B03E04B5B03FC031F5B01
-FBD9FF80027F5B01F102FE0107B55AD9E07F90B8C7FC6E17FCD9C00F5FD9800317E090C7
-6C168048020F4BC8FC48020015F00070030349C9FC557A75F76C>83
-D<BA00E0030FB8FCA8C7003F0280CC003FEBC000E503FCC7FCB3B3B3B3A46E1C0768A283
-6E1C0F68A26E1C1F7162A26E1C3F714F5A806E525A71606F6D97C8FC6F505A7118076F6D
-4E5A6F6EEF3FF86F6E4D5A6F6EEE01FF6F02F84C5B6F02FE041F5B043F6D6C037F90C9FC
-7002F0913807FFFE0407DAFF8090B55A040192B712F07061051F188005074DCAFC050017
-F0061F16C0060103FCCBFCDE000391CCFC88787AF595>85 D<92383FFFF80207B612E002
-7F15FC49B87E010717E0011F83499026F0007F13FC4948C7000F7F90B502036D7E486E6D
-806F6D80727F486E6E7F8486727FA28684A26C5C72806C5C6D90C8FC6D5AEB0FF8EB03E0
-90CAFCA70507B6FC041FB7FC0303B8FC157F0203B9FC021FECFE0391B612800103ECF800
-010F14C04991C7FC017F13FC90B512F04814C0485C4891C8FC485B5A485B5C5A5CA2B5FC
-5CA360A36E5DA26C5F6E5D187E6C6D846E4A48806C6D4A4814FC6C6ED90FF0ECFFFC6C02
-E090263FE07F14FE00019139FC03FFC06C91B6487E013F4B487E010F4B1307010303F013
-01D9003F0280D9003F13FC020101F8CBFC57507ACE5E>97 D<93383FFFF00307B612C003
-3F15F84AB712FE0207707E021F17E0027F8391B526FC001F7F010302C001037F4991C748
-7F49495C495B4901F04A7F5B90B55A485CA2485C4891C8FCA248715B5C48715B725B4A6F
-5B489438007FC0071FC7FC96C8FC5AA25CA3B5FCAF7E80A47E80A27E806CF11F80F23FC0
-6C6E167FA26C6EEEFF80816C606C6E17006D6D4B5A6D6D15076D6D4B5A6D6D6C4A5A6D02
-E0EC7FF06D02F849485A01009126FF801F5B6E91B6C7FC021F5E020716F8020116E06E6C
-1580030702FCC8FCDB003F13804A507ACE56>99 D<93387FFF80030FB512FC037FECFF80
-4AB712E0020716F8021F16FE027FD9F8077F49B5D8C000804991C7003F13E04901FC020F
-7F49496E7F49498049496E7F49496E7F90B55A48727E92C914804884485B1BC048841BE0
-485BA27313F05AA25C5AA21BF885A2B5FCA391BAFCA41BF002F8CCFCA67EA3807EA47E80
-6CF103F0F207F86C7F1A0F6C6E17F06C191F6F17E06C6E163F6D6DEE7FC06D6D16FF6D6D
-4B13806D6D4B13006D6D6CEC0FFE6D02E0EC3FFC6D02F8ECFFF86D9126FFC00F5B023F91
-B65A020F178002034CC7FC020016F8031F15E0030392C8FCDB000F13E04D507BCE58>
-101 D<F37F80922607FFFC913807FFE092B600E0011F13F8020703FC017F13FC021FDBFF
-01B512FE027F16C349B800F7EBBFFF49DA803F9038FFF83F010F9026FC000714C04901F0
-0101EC007F49496D148049496E6D7E90B517E04B6E15FE48F1F01F4891C86C9038F80FFC
-F307F098C7FC48496F7FA34885AB6C61A36C6D4B5BA36C6E4A5B6C616F5C6D606D6D91B5
-5A6D6D4991C8FC6D01FC01075B9226FF803F13F893B65A4917C0D93F1F93C9FC020715FC
-D97E0015E0030701FCCAFC01FE90CDFCA412017FA280A280808014FE6C90B812C019FF1A
-F01AFC6DF0FF801BE06D851BFC6D856D856D1A806D1AC05B011F1AE0137F48BC12F00007
-01FCC9FC4801E0040314F84849EE007F4849171F91CB1207487313FC5B00FF855B86A56D
-60007F1BF86D60A26C6D4D13F06E5F6C6D4D13E06C6D4D13C06C01FC94B512806C01FF04
-031400C602C0030F13FC6D01F8037F5B011FD9FFE0011FB512E0010791B8128001014EC7
-FC6D6C17F8020F17C0DA007F03F8C8FC03014AC9FC58727BCE61>103
-D<903801FFFCB6FCA8C67E131F7FB3AD95380FFFE095B512FE05036E7E050F15E0053F15
-F84D81932701FFF01F7F4CD900077FDC07FC6D80DC0FF06D80DC1FC07F4C48824CC8FC04
-7E6F7F5EEDFDF85E03FF707F5EA25EA25EA293C9FCA45DB3B3A6B8D8E003B81280A86178
-79F76C>I<EB01FCEB07FF011F13C0497F497F90B57EA24880A24880A76C5CA26C5CA26D
-5B6D5B6D5B010790C8FCEB01FC90CAFCB2903801FFFC007FB5FCA8C67E131F7FB3B3B3A5
-B81280A8297979F835>I<902601FFF891380FFFE0B692B512FE05036E7E050F15E0053F
-15F84D81932701FFF01F7F4CD900077FDC07FC6D80C66CDA0FF06D80011FDA1FC07F6D4A
-48824CC8FC047E6F7F5EEDF9F85E03FB707F5E15FF5EA25EA293C9FCA45DB3B3A6B8D8E0
-03B81280A8614E79CD6C>110 D<93381FFFE00303B6FC031F15E092B712FC020316FF02
-0F17C0023FD9FC0014F091B500C0010F13FC4991C700037F4901FC02007F010F496F13C0
-49496F7F49496F7F4B8149496F7F90B5C96C7F4886A24849707F481B80A248497014C0A2
-481BE0A348497113F0A3481BF8A5B51AFCAE6C1BF8A46C1BF06E94B5FCA36C1BE0A26C6D
-4C14C0A26C1B806E5E6C1B006C6E4B5BA26C6E4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D92
-B55A6D01FF02035C6D02C0010F91C7FC010002FC90B512FC6E90B75A021F17E002071780
-02014CC8FCDA003F15F0030392C9FCDB001F13E056507BCE61>I<902601FFFCEC7FFEB6
-020FB512F0057F14FE4CB712C0040716F0041F82047F16FE93B5C66C7F92B500F0010F14
-C0C66C0380010380011F4AC76C806D4A6E8004F06F7F4C6F7F4C6F7F4C8193C915804B70
-14C0861DE0A27414F0A27414F8A47513FCA57513FEAF5113FCA598B512F8A31DF0621DE0
-621DC0621D806F5E701800704B5B505B704B5B7092B55A04FC4A5C704A5C706C010F5C05
-E0013F49C7FC9227FE7FFC01B55A70B712F0040F16C0040393C8FC040015F8053F14C005
-0301F0C9FC94CCFCB3A6B812E0A85F6F7ACD6C>I<912603FFFCEB0780027F9039FFE00F
-C00103B6EAF83F010FEDFEFF013F92B5FC49EB000F2601FFF01300480180143F4890C812
-0F4848814848814981123F83485A187FA212FF6D163FA37F7F6DEE1F8002C092C7FC14F0
-14FEECFFF06CECFF8016FEEEFFE06C16FC6C16FF18C06C836C17F86C836C836C83013F17
-806D17C0010717E0010117F0EB003F020716F8EC001F030015FC1607EE007F051F13FE17
-07007E82B482836D167FA2183F7F181FA27F19FC7FA26D163F6D17F86D167F19F06D16FF
-6E4A13E002E04A13C06E4A138002FE023F1300913AFFC003FFFE01E790B65A01C316F001
-8016C026FE003F92C7FC48010714F80070D9007F90C8FC3F507ACE4C>115
-D E
-%EndDVIPSBitmapFont
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: Letter
-letter
-%%EndPaperSize
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 727 2424 a Fl(GNU)65 b(Shogi)f(\(Japanese)i(c)-5
-b(hess\))150 5340 y Fk(Mik)l(e)45 b(V)-11 b(anier)p eop
-%%Page: 2 2
-2 1 bop 150 5322 a Fj(Cop)m(yrigh)m(t)602 5319 y(c)577
-5322 y Fi(\015)30 b Fj(1999)i(Mic)m(hael)f(C.)f(V)-8
-b(anier)30 b(and)g(the)g(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8
-b(oundation)p eop
-%%Page: 1 3
-1 2 bop 150 -116 a Fj(GNU)31 b(Shogi)e(\(Japanese)i(c)m(hess\))2414
-b(1)150 299 y Fh(GNU)54 b(Shogi)f(\(Japanese)g(c)l(hess\))275
-533 y Fj(This)41 b(do)s(cumen)m(t)i(describ)s(es)e(GNU)j(shogi,)i(a)d
-(program)g(whic)m(h)f(pla)m(ys)g(Japanese)h(c)m(hess)h(\(shogi\))150
-643 y(against)31 b(a)f(h)m(uman)g(opp)s(onen)m(t.)p eop
-%%Page: 2 4
-2 3 bop 150 -116 a Fj(2)2779 b(GNU)31 b(Shogi)f(man)m(ual)p
-eop
-%%Page: 3 5
-3 4 bop 150 -116 a Fj(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2591
-b(3)150 299 y Fh(1)80 b(In)l(tro)t(duction)275 533 y
-Fj(GNU)45 b(shogi)g(is)f(a)i(program)f(that)h(pla)m(ys)f(shogi,)j(the)e
-(Japanese)f(v)m(ersion)g(of)g(c)m(hess,)50 b(against)c(a)150
-643 y(h)m(uman)33 b(\(or)h(computer\))h(opp)s(onen)m(t.)51
-b(This)32 b(\014le)h(describ)s(es)f(ho)m(w)i(to)h(use)e(GNU)i(shogi)e
-(and)h(also)g(giv)m(es)150 752 y(bac)m(kground)c(information)f(ab)s
-(out)h(the)g(game)i(of)e(shogi.)275 887 y(This)37 b(\014le)h(describ)s
-(es)g(GNU)i(shogi)f(v)m(ersion)g(1.3.2.)69 b(It)39 b(w)m(as)h(written)e
-(b)m(y)i(me,)h(Mik)m(e)f(V)-8 b(anier,)42 b(the)150 996
-y(curren)m(t)30 b(main)m(tainer)f(of)i(GNU)g(shogi.)40
-b(My)31 b(email)e(address)h(is)f Fg(mvanier@cs.caltech.edu)p
-Fj(.)275 1131 y(GNU)i(shogi)e(is)h(actually)g(t)m(w)m(o)h(programs:)150
-1375 y(`)p Fg(gnushogi)p Fj(')630 1484 y(is)e(the)i(text-based)g
-(program)g(whic)m(h)e(also)h(con)m(tains)h(the)f(game-pla)m(ying)h
-(engine.)150 1644 y(`)p Fg(xshogi)p Fj(')142 b(is)29
-b(the)i(X-windo)m(ws)e(graphical)g(in)m(terface)i(to)g(gn)m(ushogi.)275
-1913 y(Since)e(xshogi)h(in)m(v)m(ok)m(es)h(gn)m(ushogi,)f(most)h(pla)m
-(y)m(ers)f(will)e(just)h(t)m(yp)s(e)i(\\xshogi")g(and)e(start)i(pla)m
-(ying.)275 2047 y(Disclaimer:)58 b(I)40 b(use)f(the)h(p)s(ersonal)f
-(pronouns)f(\\him",)k(\\his")d(etc.)70 b(to)41 b(refer)f(to)g(a)h
-(shogi)e(pla)m(y)m(er)150 2157 y(regardless)f(of)h(gender.)67
-b(That's)39 b(easier)g(than)f(writing)f(\\his)h(or)h(her")g(all)f(o)m
-(v)m(er)i(the)g(place.)66 b(I)39 b(don't)150 2267 y(mean)34
-b(to)h(infer)d(that)j(w)m(omen)f(don't)g(pla)m(y)f(shogi;)j(in)c(fact)j
-(shogi)e(is)g(v)m(ery)i(p)s(opular)c(in)i(Japan)g(among)150
-2376 y(w)m(omen)e(as)f(w)m(ell)g(as)g(men.)p eop
-%%Page: 4 6
-4 5 bop 150 -116 a Fj(4)2779 b(GNU)31 b(Shogi)f(man)m(ual)p
-eop
-%%Page: 5 7
-5 6 bop 150 -116 a Fj(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052
-b(5)150 299 y Fh(GNU)54 b(GENERAL)g(PUBLIC)f(LICENSE)1537
-508 y Fj(V)-8 b(ersion)30 b(2,)h(June)f(1991)390 637
-y(Cop)m(yrigh)m(t)842 634 y(c)817 637 y Fi(\015)g Fj(1989,)j(1991)f(F)
--8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)30 b(Inc.)390
-741 y(675)i(Mass)e(Av)m(e,)i(Cam)m(bridge,)e(MA)h(02139,)h(USA)390
-948 y(Ev)m(ery)m(one)f(is)f(p)s(ermitted)f(to)i(cop)m(y)g(and)f
-(distribute)e(v)m(erbatim)i(copies)390 1052 y(of)h(this)e(license)g(do)
-s(cumen)m(t,)i(but)e(c)m(hanging)i(it)f(is)f(not)i(allo)m(w)m(ed.)150
-1309 y Fk(Pream)l(ble)275 1502 y Fj(The)39 b(licenses)h(for)g(most)h
-(soft)m(w)m(are)g(are)g(designed)e(to)i(tak)m(e)h(a)m(w)m(a)m(y)h(y)m
-(our)d(freedom)g(to)h(share)g(and)150 1611 y(c)m(hange)g(it.)70
-b(By)40 b(con)m(trast,)k(the)c(GNU)h(General)f(Public)e(License)i(is)f
-(in)m(tended)g(to)h(guaran)m(tee)i(y)m(our)150 1721 y(freedom)24
-b(to)h(share)f(and)f(c)m(hange)i(free)f(soft)m(w)m(are|to)j(mak)m(e)e
-(sure)e(the)h(soft)m(w)m(are)i(is)d(free)h(for)g(all)f(its)h(users.)150
-1831 y(This)38 b(General)i(Public)d(License)j(applies)e(to)i(most)g(of)
-g(the)g(F)-8 b(ree)41 b(Soft)m(w)m(are)g(F)-8 b(oundation's)39
-b(soft)m(w)m(are)150 1940 y(and)c(to)h(an)m(y)g(other)g(program)f
-(whose)h(authors)f(commit)g(to)i(using)d(it.)55 b(\(Some)36
-b(other)g(F)-8 b(ree)37 b(Soft)m(w)m(are)150 2050 y(F)-8
-b(oundation)31 b(soft)m(w)m(are)i(is)d(co)m(v)m(ered)j(b)m(y)e(the)g
-(GNU)h(Library)e(General)h(Public)e(License)h(instead.\))43
-b(Y)-8 b(ou)150 2159 y(can)31 b(apply)e(it)h(to)h(y)m(our)f(programs,)g
-(to)s(o.)275 2294 y(When)37 b(w)m(e)g(sp)s(eak)g(of)g(free)h(soft)m(w)m
-(are,)i(w)m(e)e(are)g(referring)d(to)j(freedom,)h(not)f(price.)60
-b(Our)36 b(General)150 2403 y(Public)c(Licenses)h(are)i(designed)e(to)i
-(mak)m(e)g(sure)f(that)g(y)m(ou)h(ha)m(v)m(e)g(the)g(freedom)f(to)g
-(distribute)e(copies)150 2513 y(of)k(free)h(soft)m(w)m(are)g(\(and)f(c)
-m(harge)i(for)e(this)f(service)h(if)f(y)m(ou)i(wish\),)g(that)f(y)m(ou)
-h(receiv)m(e)g(source)f(co)s(de)h(or)150 2623 y(can)e(get)h(it)e(if)f
-(y)m(ou)i(w)m(an)m(t)h(it,)f(that)g(y)m(ou)g(can)g(c)m(hange)h(the)e
-(soft)m(w)m(are)i(or)f(use)f(pieces)h(of)f(it)g(in)g(new)g(free)150
-2732 y(programs;)c(and)g(that)h(y)m(ou)g(kno)m(w)f(y)m(ou)h(can)f(do)h
-(these)g(things.)275 2867 y(T)-8 b(o)40 b(protect)h(y)m(our)f(righ)m
-(ts,)i(w)m(e)e(need)g(to)h(mak)m(e)g(restrictions)d(that)j(forbid)d(an)
-m(y)m(one)j(to)g(den)m(y)f(y)m(ou)150 2976 y(these)d(righ)m(ts)f(or)g
-(to)h(ask)g(y)m(ou)f(to)h(surrender)e(the)h(righ)m(ts.)58
-b(These)36 b(restrictions)f(translate)i(to)g(certain)150
-3086 y(resp)s(onsibilities)25 b(for)31 b(y)m(ou)f(if)g(y)m(ou)g
-(distribute)e(copies)i(of)h(the)f(soft)m(w)m(are,)j(or)d(if)f(y)m(ou)i
-(mo)s(dify)e(it.)275 3220 y(F)-8 b(or)30 b(example,)f(if)g(y)m(ou)g
-(distribute)e(copies)j(of)f(suc)m(h)g(a)h(program,)g(whether)e(gratis)i
-(or)f(for)g(a)h(fee,)h(y)m(ou)150 3330 y(m)m(ust)i(giv)m(e)h(the)g
-(recipien)m(ts)e(all)h(the)g(righ)m(ts)g(that)h(y)m(ou)g(ha)m(v)m(e.)51
-b(Y)-8 b(ou)34 b(m)m(ust)g(mak)m(e)g(sure)f(that)h(they)-8
-b(,)35 b(to)s(o,)150 3440 y(receiv)m(e)j(or)g(can)g(get)g(the)g(source)
-g(co)s(de.)62 b(And)37 b(y)m(ou)h(m)m(ust)f(sho)m(w)h(them)f(these)h
-(terms)f(so)h(they)g(kno)m(w)150 3549 y(their)29 b(righ)m(ts.)275
-3684 y(W)-8 b(e)29 b(protect)g(y)m(our)f(righ)m(ts)f(with)g(t)m(w)m(o)i
-(steps:)40 b(\(1\))29 b(cop)m(yrigh)m(t)f(the)g(soft)m(w)m(are,)j(and)c
-(\(2\))i(o\013er)g(y)m(ou)f(this)150 3793 y(license)h(whic)m(h)g(giv)m
-(es)i(y)m(ou)g(legal)f(p)s(ermission)d(to)k(cop)m(y)-8
-b(,)32 b(distribute)c(and/or)i(mo)s(dify)f(the)i(soft)m(w)m(are.)275
-3928 y(Also,)45 b(for)d(eac)m(h)i(author's)f(protection)f(and)g(ours,)j
-(w)m(e)e(w)m(an)m(t)h(to)f(mak)m(e)h(certain)e(that)h(ev)m(ery)m(one)
-150 4037 y(understands)29 b(that)j(there)f(is)f(no)h(w)m(arran)m(t)m(y)
-h(for)f(this)f(free)h(soft)m(w)m(are.)44 b(If)30 b(the)i(soft)m(w)m
-(are)g(is)e(mo)s(di\014ed)f(b)m(y)150 4147 y(someone)i(else)e(and)g
-(passed)h(on,)g(w)m(e)g(w)m(an)m(t)h(its)e(recipien)m(ts)g(to)h(kno)m
-(w)g(that)g(what)g(they)g(ha)m(v)m(e)h(is)e(not)h(the)150
-4257 y(original,)e(so)h(that)g(an)m(y)h(problems)d(in)m(tro)s(duced)g
-(b)m(y)i(others)g(will)d(not)j(re\015ect)h(on)f(the)g(original)e
-(authors')150 4366 y(reputations.)275 4501 y(Finally)-8
-b(,)24 b(an)m(y)h(free)f(program)g(is)g(threatened)g(constan)m(tly)h(b)
-m(y)g(soft)m(w)m(are)h(paten)m(ts.)39 b(W)-8 b(e)26 b(wish)c(to)j(a)m
-(v)m(oid)150 4610 y(the)30 b(danger)g(that)h(redistributors)c(of)k(a)f
-(free)h(program)f(will)d(individually)e(obtain)30 b(paten)m(t)h
-(licenses,)e(in)150 4720 y(e\013ect)39 b(making)e(the)h(program)f
-(proprietary)-8 b(.)62 b(T)-8 b(o)38 b(prev)m(en)m(t)g(this,)h(w)m(e)f
-(ha)m(v)m(e)h(made)f(it)f(clear)g(that)i(an)m(y)150 4829
-y(paten)m(t)31 b(m)m(ust)g(b)s(e)e(licensed)g(for)h(ev)m(ery)m(one's)i
-(free)f(use)f(or)g(not)h(licensed)e(at)i(all.)275 4964
-y(The)e(precise)h(terms)g(and)g(conditions)f(for)h(cop)m(ying,)h
-(distribution)26 b(and)k(mo)s(di\014cation)f(follo)m(w.)p
-eop
-%%Page: 6 8
-6 7 bop 150 -116 a Fj(6)2779 b(GNU)31 b(Shogi)f(man)m(ual)150
-166 y Fk(TERMS)44 b(AND)h(CONDITIONS)g(F)l(OR)g(COPYING,)150
-299 y(DISTRIBUTION)f(AND)h(MODIFICA)-11 b(TION)199 515
-y Fj(0.)61 b(This)41 b(License)h(applies)e(to)k(an)m(y)f(program)f(or)g
-(other)h(w)m(ork)g(whic)m(h)e(con)m(tains)i(a)g(notice)f(placed)330
-625 y(b)m(y)33 b(the)h(cop)m(yrigh)m(t)g(holder)e(sa)m(ying)i(it)f(ma)m
-(y)h(b)s(e)f(distributed)e(under)h(the)h(terms)h(of)g(this)e(General)
-330 735 y(Public)37 b(License.)67 b(The)39 b(\\Program",)j(b)s(elo)m
-(w,)f(refers)e(to)h(an)m(y)g(suc)m(h)f(program)g(or)g(w)m(ork,)j(and)d
-(a)330 844 y(\\w)m(ork)29 b(based)f(on)h(the)g(Program")g(means)f
-(either)h(the)f(Program)h(or)g(an)m(y)g(deriv)-5 b(ativ)m(e)28
-b(w)m(ork)g(under)330 954 y(cop)m(yrigh)m(t)k(la)m(w:)42
-b(that)32 b(is)e(to)j(sa)m(y)-8 b(,)33 b(a)e(w)m(ork)h(con)m(taining)f
-(the)g(Program)h(or)f(a)h(p)s(ortion)e(of)h(it,)g(either)330
-1063 y(v)m(erbatim)e(or)g(with)e(mo)s(di\014cations)g(and/or)i
-(translated)g(in)m(to)g(another)g(language.)40 b(\(Hereinafter,)330
-1173 y(translation)26 b(is)g(included)f(without)h(limitation)f(in)h
-(the)h(term)g(\\mo)s(di\014cation".\))40 b(Eac)m(h)27
-b(licensee)g(is)330 1282 y(addressed)i(as)i(\\y)m(ou".)330
-1429 y(Activities)38 b(other)h(than)f(cop)m(ying,)k(distribution)35
-b(and)j(mo)s(di\014cation)f(are)i(not)g(co)m(v)m(ered)h(b)m(y)f(this)
-330 1538 y(License;)33 b(they)g(are)f(outside)g(its)f(scop)s(e.)47
-b(The)32 b(act)h(of)g(running)c(the)k(Program)f(is)f(not)i(restricted,)
-330 1648 y(and)24 b(the)g(output)g(from)g(the)h(Program)f(is)g(co)m(v)m
-(ered)i(only)d(if)g(its)h(con)m(ten)m(ts)i(constitute)f(a)g(w)m(ork)f
-(based)330 1758 y(on)h(the)h(Program)f(\(indep)s(enden)m(t)f(of)i(ha)m
-(ving)f(b)s(een)f(made)i(b)m(y)f(running)e(the)i(Program\).)40
-b(Whether)330 1867 y(that)31 b(is)e(true)i(dep)s(ends)d(on)i(what)h
-(the)f(Program)h(do)s(es.)199 2014 y(1.)61 b(Y)-8 b(ou)42
-b(ma)m(y)g(cop)m(y)g(and)e(distribute)f(v)m(erbatim)i(copies)g(of)h
-(the)f(Program's)h(source)f(co)s(de)h(as)g(y)m(ou)330
-2123 y(receiv)m(e)32 b(it,)f(in)f(an)m(y)h(medium,)f(pro)m(vided)g
-(that)h(y)m(ou)h(conspicuously)d(and)h(appropriately)g(publish)330
-2233 y(on)j(eac)m(h)h(cop)m(y)g(an)f(appropriate)f(cop)m(yrigh)m(t)i
-(notice)f(and)g(disclaimer)d(of)k(w)m(arran)m(t)m(y;)h(k)m(eep)f(in)m
-(tact)330 2342 y(all)d(the)g(notices)h(that)h(refer)e(to)h(this)f
-(License)g(and)g(to)i(the)f(absence)g(of)g(an)m(y)g(w)m(arran)m(t)m(y;)
-h(and)e(giv)m(e)330 2452 y(an)m(y)g(other)f(recipien)m(ts)g(of)g(the)h
-(Program)f(a)h(cop)m(y)g(of)g(this)e(License)h(along)g(with)f(the)i
-(Program.)330 2598 y(Y)-8 b(ou)31 b(ma)m(y)g(c)m(harge)h(a)f(fee)g(for)
-f(the)h(ph)m(ysical)e(act)j(of)f(transferring)e(a)i(cop)m(y)-8
-b(,)32 b(and)e(y)m(ou)h(ma)m(y)g(at)g(y)m(our)330 2708
-y(option)f(o\013er)h(w)m(arran)m(t)m(y)g(protection)g(in)e(exc)m(hange)
-j(for)e(a)g(fee.)199 2854 y(2.)61 b(Y)-8 b(ou)24 b(ma)m(y)h(mo)s(dify)d
-(y)m(our)i(cop)m(y)g(or)g(copies)g(of)g(the)g(Program)g(or)g(an)m(y)g
-(p)s(ortion)e(of)i(it,)h(th)m(us)f(forming)f(a)330 2964
-y(w)m(ork)k(based)g(on)f(the)h(Program,)h(and)f(cop)m(y)g(and)g
-(distribute)d(suc)m(h)j(mo)s(di\014cations)e(or)h(w)m(ork)h(under)330
-3074 y(the)k(terms)f(of)g(Section)h(1)f(ab)s(o)m(v)m(e,)i(pro)m(vided)d
-(that)i(y)m(ou)g(also)f(meet)h(all)f(of)g(these)h(conditions:)379
-3220 y(a.)61 b(Y)-8 b(ou)43 b(m)m(ust)f(cause)i(the)e(mo)s(di\014ed)f
-(\014les)g(to)i(carry)g(prominen)m(t)e(notices)i(stating)f(that)i(y)m
-(ou)510 3330 y(c)m(hanged)31 b(the)g(\014les)e(and)h(the)g(date)h(of)g
-(an)m(y)g(c)m(hange.)374 3476 y(b.)60 b(Y)-8 b(ou)31
-b(m)m(ust)g(cause)g(an)m(y)h(w)m(ork)f(that)g(y)m(ou)g(distribute)d(or)
-j(publish,)d(that)j(in)f(whole)g(or)h(in)e(part)510 3586
-y(con)m(tains)35 b(or)h(is)e(deriv)m(ed)g(from)h(the)g(Program)g(or)g
-(an)m(y)h(part)f(thereof,)i(to)f(b)s(e)e(licensed)g(as)i(a)510
-3695 y(whole)30 b(at)h(no)f(c)m(harge)i(to)f(all)e(third)f(parties)i
-(under)f(the)i(terms)f(of)g(this)g(License.)384 3842
-y(c.)61 b(If)39 b(the)h(mo)s(di\014ed)e(program)h(normally)f(reads)i
-(commands)f(in)m(teractiv)m(ely)h(when)f(run,)i(y)m(ou)510
-3951 y(m)m(ust)30 b(cause)h(it,)f(when)g(started)h(running)c(for)k(suc)
-m(h)f(in)m(teractiv)m(e)h(use)f(in)f(the)i(most)g(ordinary)510
-4061 y(w)m(a)m(y)-8 b(,)25 b(to)d(prin)m(t)e(or)h(displa)m(y)f(an)h
-(announcemen)m(t)g(including)d(an)k(appropriate)e(cop)m(yrigh)m(t)i
-(notice)510 4170 y(and)i(a)g(notice)h(that)f(there)h(is)e(no)h(w)m
-(arran)m(t)m(y)h(\(or)g(else,)g(sa)m(ying)f(that)h(y)m(ou)g(pro)m(vide)
-e(a)i(w)m(arran)m(t)m(y\))510 4280 y(and)35 b(that)g(users)g(ma)m(y)g
-(redistribute)e(the)j(program)f(under)e(these)j(conditions,)f(and)g
-(telling)510 4390 y(the)f(user)f(ho)m(w)h(to)g(view)f(a)i(cop)m(y)f(of)
-g(this)f(License.)50 b(\(Exception:)e(if)32 b(the)i(Program)g(itself)f
-(is)510 4499 y(in)m(teractiv)m(e)i(but)e(do)s(es)h(not)g(normally)e
-(prin)m(t)h(suc)m(h)g(an)h(announcemen)m(t,)h(y)m(our)f(w)m(ork)g
-(based)510 4609 y(on)c(the)h(Program)f(is)g(not)g(required)f(to)i(prin)
-m(t)e(an)h(announcemen)m(t.\))330 4792 y(These)41 b(requiremen)m(ts)g
-(apply)f(to)i(the)g(mo)s(di\014ed)e(w)m(ork)h(as)h(a)g(whole.)73
-b(If)42 b(iden)m(ti\014able)d(sections)330 4902 y(of)j(that)h(w)m(ork)g
-(are)f(not)h(deriv)m(ed)e(from)h(the)h(Program,)i(and)d(can)h(b)s(e)e
-(reasonably)h(considered)330 5011 y(indep)s(enden)m(t)24
-b(and)j(separate)g(w)m(orks)g(in)e(themselv)m(es,)j(then)e(this)g
-(License,)h(and)f(its)h(terms,)g(do)g(not)330 5121 y(apply)36
-b(to)i(those)f(sections)g(when)g(y)m(ou)g(distribute)e(them)i(as)g
-(separate)h(w)m(orks.)61 b(But)37 b(when)g(y)m(ou)330
-5230 y(distribute)27 b(the)i(same)g(sections)h(as)f(part)g(of)g(a)h
-(whole)e(whic)m(h)g(is)g(a)h(w)m(ork)h(based)e(on)h(the)h(Program,)330
-5340 y(the)h(distribution)d(of)j(the)h(whole)e(m)m(ust)h(b)s(e)g(on)g
-(the)g(terms)g(of)h(this)e(License,)h(whose)g(p)s(ermissions)p
-eop
-%%Page: 7 9
-7 8 bop 150 -116 a Fj(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052
-b(7)330 299 y(for)22 b(other)h(licensees)e(extend)i(to)g(the)f(en)m
-(tire)g(whole,)i(and)d(th)m(us)h(to)h(eac)m(h)h(and)d(ev)m(ery)i(part)g
-(regardless)330 408 y(of)31 b(who)e(wrote)i(it.)330 538
-y(Th)m(us,)48 b(it)d(is)f(not)i(the)f(in)m(ten)m(t)g(of)h(this)e
-(section)h(to)h(claim)f(righ)m(ts)f(or)h(con)m(test)i(y)m(our)f(righ)m
-(ts)e(to)330 648 y(w)m(ork)34 b(written)e(en)m(tirely)h(b)m(y)h(y)m
-(ou;)h(rather,)g(the)f(in)m(ten)m(t)g(is)e(to)j(exercise)e(the)h(righ)m
-(t)f(to)i(con)m(trol)f(the)330 757 y(distribution)27
-b(of)j(deriv)-5 b(ativ)m(e)30 b(or)h(collectiv)m(e)f(w)m(orks)h(based)f
-(on)g(the)h(Program.)330 887 y(In)41 b(addition,)h(mere)f(aggregation)i
-(of)f(another)f(w)m(ork)g(not)h(based)f(on)g(the)g(Program)h(with)e
-(the)330 996 y(Program)22 b(\(or)g(with)e(a)i(w)m(ork)g(based)f(on)h
-(the)g(Program\))g(on)f(a)h(v)m(olume)g(of)g(a)g(storage)h(or)f
-(distribution)330 1106 y(medium)28 b(do)s(es)j(not)f(bring)f(the)h
-(other)h(w)m(ork)f(under)f(the)i(scop)s(e)f(of)h(this)e(License.)199
-1235 y(3.)61 b(Y)-8 b(ou)38 b(ma)m(y)f(cop)m(y)h(and)f(distribute)d
-(the)k(Program)f(\(or)g(a)h(w)m(ork)f(based)g(on)g(it,)i(under)c
-(Section)i(2\))330 1345 y(in)29 b(ob)5 b(ject)31 b(co)s(de)g(or)g
-(executable)g(form)f(under)e(the)j(terms)f(of)h(Sections)f(1)h(and)f(2)
-h(ab)s(o)m(v)m(e)g(pro)m(vided)330 1455 y(that)g(y)m(ou)g(also)f(do)g
-(one)h(of)f(the)h(follo)m(wing:)379 1584 y(a.)61 b(Accompan)m(y)47
-b(it)e(with)f(the)i(complete)g(corresp)s(onding)e(mac)m(hine-readable)h
-(source)g(co)s(de,)510 1694 y(whic)m(h)25 b(m)m(ust)h(b)s(e)f
-(distributed)e(under)h(the)j(terms)e(of)i(Sections)e(1)i(and)e(2)h(ab)s
-(o)m(v)m(e)i(on)d(a)i(medium)510 1803 y(customarily)i(used)h(for)g
-(soft)m(w)m(are)i(in)m(terc)m(hange;)f(or,)374 1933 y(b.)60
-b(Accompan)m(y)30 b(it)f(with)f(a)i(written)e(o\013er,)j(v)-5
-b(alid)27 b(for)i(at)i(least)e(three)h(y)m(ears,)g(to)g(giv)m(e)g(an)m
-(y)g(third)510 2042 y(part)m(y)-8 b(,)32 b(for)f(a)h(c)m(harge)g(no)f
-(more)h(than)f(y)m(our)g(cost)h(of)f(ph)m(ysically)f(p)s(erforming)f
-(source)i(distri-)510 2152 y(bution,)c(a)h(complete)h(mac)m
-(hine-readable)e(cop)m(y)h(of)g(the)g(corresp)s(onding)e(source)i(co)s
-(de,)h(to)g(b)s(e)510 2262 y(distributed)i(under)i(the)h(terms)g(of)h
-(Sections)f(1)g(and)g(2)h(ab)s(o)m(v)m(e)g(on)f(a)h(medium)d
-(customarily)510 2371 y(used)e(for)g(soft)m(w)m(are)i(in)m(terc)m
-(hange;)f(or,)384 2501 y(c.)61 b(Accompan)m(y)33 b(it)e(with)g(the)h
-(information)e(y)m(ou)i(receiv)m(ed)g(as)g(to)g(the)g(o\013er)g(to)h
-(distribute)c(cor-)510 2610 y(resp)s(onding)i(source)i(co)s(de.)50
-b(\(This)31 b(alternativ)m(e)j(is)e(allo)m(w)m(ed)h(only)g(for)g
-(noncommercial)f(dis-)510 2720 y(tribution)e(and)h(only)g(if)g(y)m(ou)i
-(receiv)m(ed)f(the)g(program)g(in)f(ob)5 b(ject)33 b(co)s(de)f(or)g
-(executable)g(form)510 2829 y(with)d(suc)m(h)h(an)g(o\013er,)h(in)e
-(accord)j(with)d(Subsection)g(b)h(ab)s(o)m(v)m(e.\))330
-2979 y(The)j(source)h(co)s(de)g(for)f(a)h(w)m(ork)g(means)f(the)h
-(preferred)e(form)h(of)h(the)g(w)m(ork)f(for)h(making)f(mo)s(di\014-)
-330 3088 y(cations)e(to)g(it.)40 b(F)-8 b(or)31 b(an)f(executable)h(w)m
-(ork,)g(complete)f(source)h(co)s(de)f(means)h(all)e(the)h(source)h(co)s
-(de)330 3198 y(for)25 b(all)g(mo)s(dules)f(it)h(con)m(tains,)i(plus)c
-(an)m(y)j(asso)s(ciated)g(in)m(terface)h(de\014nition)c(\014les,)j
-(plus)d(the)j(scripts)330 3308 y(used)41 b(to)i(con)m(trol)g
-(compilation)d(and)i(installation)e(of)i(the)h(executable.)76
-b(Ho)m(w)m(ev)m(er,)48 b(as)42 b(a)g(sp)s(e-)330 3417
-y(cial)30 b(exception,)i(the)f(source)g(co)s(de)g(distributed)d(need)i
-(not)h(include)e(an)m(ything)h(that)i(is)e(normally)330
-3527 y(distributed)37 b(\(in)h(either)h(source)h(or)f(binary)f(form\))i
-(with)e(the)i(ma)5 b(jor)39 b(comp)s(onen)m(ts)h(\(compiler,)330
-3636 y(k)m(ernel,)35 b(and)f(so)g(on\))g(of)h(the)f(op)s(erating)g
-(system)g(on)g(whic)m(h)f(the)h(executable)h(runs,)f(unless)e(that)330
-3746 y(comp)s(onen)m(t)f(itself)e(accompanies)i(the)f(executable.)330
-3875 y(If)39 b(distribution)c(of)40 b(executable)g(or)f(ob)5
-b(ject)40 b(co)s(de)f(is)g(made)g(b)m(y)g(o\013ering)g(access)h(to)g
-(cop)m(y)g(from)330 3985 y(a)e(designated)f(place,)i(then)f(o\013ering)
-f(equiv)-5 b(alen)m(t)37 b(access)h(to)h(cop)m(y)f(the)f(source)h(co)s
-(de)g(from)f(the)330 4095 y(same)29 b(place)f(coun)m(ts)g(as)h
-(distribution)24 b(of)k(the)h(source)f(co)s(de,)h(ev)m(en)g(though)e
-(third)g(parties)g(are)i(not)330 4204 y(comp)s(elled)g(to)i(cop)m(y)g
-(the)g(source)f(along)h(with)e(the)h(ob)5 b(ject)31 b(co)s(de.)199
-4334 y(4.)61 b(Y)-8 b(ou)35 b(ma)m(y)h(not)f(cop)m(y)-8
-b(,)37 b(mo)s(dify)-8 b(,)35 b(sublicense,)f(or)g(distribute)f(the)i
-(Program)f(except)i(as)f(expressly)330 4443 y(pro)m(vided)k(under)g
-(this)h(License.)70 b(An)m(y)41 b(attempt)h(otherwise)e(to)h(cop)m(y)-8
-b(,)45 b(mo)s(dify)-8 b(,)42 b(sublicense)c(or)330 4553
-y(distribute)24 b(the)j(Program)g(is)e(v)m(oid,)i(and)f(will)e
-(automatically)j(terminate)f(y)m(our)h(righ)m(ts)f(under)f(this)330
-4663 y(License.)70 b(Ho)m(w)m(ev)m(er,)45 b(parties)40
-b(who)g(ha)m(v)m(e)h(receiv)m(ed)g(copies,)i(or)d(righ)m(ts,)j(from)d
-(y)m(ou)g(under)f(this)330 4772 y(License)d(will)e(not)j(ha)m(v)m(e)h
-(their)e(licenses)f(terminated)i(so)g(long)f(as)h(suc)m(h)f(parties)g
-(remain)g(in)f(full)330 4882 y(compliance.)199 5011 y(5.)61
-b(Y)-8 b(ou)38 b(are)g(not)g(required)d(to)j(accept)h(this)e(License,)i
-(since)e(y)m(ou)g(ha)m(v)m(e)i(not)f(signed)e(it.)62
-b(Ho)m(w)m(ev)m(er,)330 5121 y(nothing)23 b(else)g(gran)m(ts)i(y)m(ou)f
-(p)s(ermission)c(to)25 b(mo)s(dify)d(or)h(distribute)f(the)i(Program)g
-(or)f(its)g(deriv)-5 b(ativ)m(e)330 5230 y(w)m(orks.)38
-b(These)23 b(actions)g(are)h(prohibited)c(b)m(y)j(la)m(w)g(if)f(y)m(ou)
-h(do)g(not)h(accept)g(this)e(License.)38 b(Therefore,)330
-5340 y(b)m(y)e(mo)s(difying)d(or)j(distributing)c(the)k(Program)g(\(or)
-h(an)m(y)f(w)m(ork)g(based)g(on)f(the)i(Program\),)h(y)m(ou)p
-eop
-%%Page: 8 10
-8 9 bop 150 -116 a Fj(8)2779 b(GNU)31 b(Shogi)f(man)m(ual)330
-299 y(indicate)h(y)m(our)i(acceptance)h(of)f(this)e(License)h(to)i(do)e
-(so,)h(and)f(all)f(its)h(terms)g(and)g(conditions)f(for)330
-408 y(cop)m(ying,)g(distributing)26 b(or)31 b(mo)s(difying)c(the)k
-(Program)f(or)h(w)m(orks)f(based)g(on)g(it.)199 545 y(6.)61
-b(Eac)m(h)43 b(time)e(y)m(ou)h(redistribute)e(the)i(Program)g(\(or)g
-(an)m(y)h(w)m(ork)f(based)f(on)h(the)g(Program\),)k(the)330
-655 y(recipien)m(t)31 b(automatically)i(receiv)m(es)g(a)g(license)e
-(from)h(the)g(original)f(licensor)g(to)i(cop)m(y)-8 b(,)34
-b(distribute)330 765 y(or)i(mo)s(dify)f(the)h(Program)h(sub)5
-b(ject)36 b(to)h(these)g(terms)f(and)g(conditions.)57
-b(Y)-8 b(ou)37 b(ma)m(y)g(not)f(imp)s(ose)330 874 y(an)m(y)27
-b(further)f(restrictions)f(on)i(the)g(recipien)m(ts')f(exercise)h(of)g
-(the)g(righ)m(ts)f(gran)m(ted)h(herein.)38 b(Y)-8 b(ou)28
-b(are)330 984 y(not)j(resp)s(onsible)c(for)j(enforcing)g(compliance)g
-(b)m(y)g(third)e(parties)i(to)h(this)e(License.)199 1121
-y(7.)61 b(If,)27 b(as)g(a)g(consequence)h(of)f(a)g(court)g(judgmen)m(t)
-f(or)h(allegation)f(of)h(paten)m(t)h(infringemen)m(t)c(or)j(for)g(an)m
-(y)330 1230 y(other)h(reason)f(\(not)h(limited)d(to)j(paten)m(t)h
-(issues\),)e(conditions)f(are)h(imp)s(osed)f(on)h(y)m(ou)h(\(whether)f
-(b)m(y)330 1340 y(court)c(order,)h(agreemen)m(t)g(or)f(otherwise\))f
-(that)h(con)m(tradict)h(the)e(conditions)f(of)i(this)f(License,)i(they)
-330 1450 y(do)34 b(not)g(excuse)h(y)m(ou)f(from)g(the)g(conditions)f
-(of)h(this)f(License.)52 b(If)33 b(y)m(ou)i(cannot)g(distribute)c(so)k
-(as)330 1559 y(to)f(satisfy)f(sim)m(ultaneously)f(y)m(our)h
-(obligations)g(under)f(this)g(License)h(and)g(an)m(y)h(other)g(p)s
-(ertinen)m(t)330 1669 y(obligations,)41 b(then)f(as)g(a)g(consequence)h
-(y)m(ou)f(ma)m(y)g(not)g(distribute)e(the)i(Program)g(at)g(all.)68
-b(F)-8 b(or)330 1778 y(example,)25 b(if)e(a)i(paten)m(t)g(license)e(w)m
-(ould)g(not)h(p)s(ermit)f(ro)m(y)m(alt)m(y-free)j(redistribution)20
-b(of)k(the)h(Program)330 1888 y(b)m(y)35 b(all)f(those)h(who)f(receiv)m
-(e)i(copies)f(directly)e(or)i(indirectly)e(through)h(y)m(ou,)i(then)f
-(the)g(only)f(w)m(a)m(y)330 1998 y(y)m(ou)27 b(could)e(satisfy)h(b)s
-(oth)f(it)h(and)g(this)f(License)h(w)m(ould)f(b)s(e)h(to)h(refrain)d
-(en)m(tirely)i(from)g(distribution)330 2107 y(of)31 b(the)f(Program.)
-330 2244 y(If)43 b(an)m(y)g(p)s(ortion)f(of)h(this)g(section)g(is)f
-(held)g(in)m(v)-5 b(alid)41 b(or)i(unenforceable)f(under)g(an)m(y)i
-(particular)330 2354 y(circumstance,)i(the)e(balance)f(of)g(the)h
-(section)f(is)f(in)m(tended)g(to)i(apply)e(and)g(the)i(section)f(as)h
-(a)330 2463 y(whole)30 b(is)f(in)m(tended)g(to)i(apply)e(in)g(other)i
-(circumstances.)330 2600 y(It)41 b(is)e(not)i(the)f(purp)s(ose)f(of)i
-(this)e(section)i(to)g(induce)e(y)m(ou)i(to)g(infringe)d(an)m(y)j
-(paten)m(ts)g(or)g(other)330 2710 y(prop)s(ert)m(y)e(righ)m(t)h(claims)
-e(or)i(to)h(con)m(test)h(v)-5 b(alidit)m(y)38 b(of)i(an)m(y)g(suc)m(h)g
-(claims;)j(this)c(section)h(has)g(the)330 2819 y(sole)30
-b(purp)s(ose)e(of)j(protecting)f(the)g(in)m(tegrit)m(y)g(of)g(the)h
-(free)f(soft)m(w)m(are)h(distribution)c(system,)j(whic)m(h)330
-2929 y(is)k(implemen)m(ted)g(b)m(y)h(public)d(license)i(practices.)55
-b(Man)m(y)36 b(p)s(eople)e(ha)m(v)m(e)i(made)f(generous)h(con)m(tri-)
-330 3039 y(butions)e(to)i(the)f(wide)g(range)g(of)h(soft)m(w)m(are)h
-(distributed)32 b(through)j(that)h(system)f(in)f(reliance)h(on)330
-3148 y(consisten)m(t)h(application)e(of)h(that)h(system;)i(it)d(is)g
-(up)f(to)i(the)g(author/donor)f(to)h(decide)f(if)g(he)g(or)330
-3258 y(she)i(is)g(willing)d(to)k(distribute)d(soft)m(w)m(are)k(through)
-e(an)m(y)g(other)h(system)g(and)f(a)g(licensee)g(cannot)330
-3367 y(imp)s(ose)29 b(that)i(c)m(hoice.)330 3504 y(This)25
-b(section)j(is)e(in)m(tended)g(to)i(mak)m(e)g(thoroughly)e(clear)h
-(what)g(is)f(b)s(eliev)m(ed)g(to)i(b)s(e)f(a)g(consequence)330
-3614 y(of)k(the)f(rest)h(of)f(this)f(License.)199 3751
-y(8.)61 b(If)35 b(the)g(distribution)c(and/or)k(use)g(of)g(the)g
-(Program)g(is)f(restricted)h(in)f(certain)h(coun)m(tries)f(either)330
-3861 y(b)m(y)h(paten)m(ts)h(or)g(b)m(y)f(cop)m(yrigh)m(ted)h(in)m
-(terfaces,)h(the)e(original)f(cop)m(yrigh)m(t)i(holder)e(who)h(places)g
-(the)330 3970 y(Program)h(under)f(this)g(License)h(ma)m(y)h(add)e(an)i
-(explicit)d(geographical)j(distribution)32 b(limitation)330
-4080 y(excluding)27 b(those)i(coun)m(tries,)g(so)g(that)g(distribution)
-c(is)i(p)s(ermitted)h(only)f(in)g(or)i(among)g(coun)m(tries)330
-4189 y(not)k(th)m(us)f(excluded.)47 b(In)32 b(suc)m(h)g(case,)j(this)c
-(License)i(incorp)s(orates)f(the)h(limitation)d(as)j(if)f(written)330
-4299 y(in)d(the)i(b)s(o)s(dy)d(of)j(this)e(License.)199
-4436 y(9.)61 b(The)26 b(F)-8 b(ree)28 b(Soft)m(w)m(are)g(F)-8
-b(oundation)26 b(ma)m(y)i(publish)23 b(revised)i(and/or)i(new)f(v)m
-(ersions)g(of)h(the)g(General)330 4545 y(Public)35 b(License)h(from)h
-(time)g(to)g(time.)61 b(Suc)m(h)36 b(new)h(v)m(ersions)f(will)f(b)s(e)h
-(similar)e(in)i(spirit)f(to)j(the)330 4655 y(presen)m(t)30
-b(v)m(ersion,)h(but)e(ma)m(y)i(di\013er)e(in)g(detail)h(to)h(address)e
-(new)h(problems)f(or)h(concerns.)330 4792 y(Eac)m(h)46
-b(v)m(ersion)e(is)g(giv)m(en)h(a)g(distinguishing)40
-b(v)m(ersion)45 b(n)m(um)m(b)s(er.)83 b(If)44 b(the)h(Program)g(sp)s
-(eci\014es)f(a)330 4902 y(v)m(ersion)35 b(n)m(um)m(b)s(er)g(of)h(this)e
-(License)i(whic)m(h)e(applies)g(to)j(it)e(and)g(\\an)m(y)i(later)e(v)m
-(ersion",)j(y)m(ou)e(ha)m(v)m(e)330 5011 y(the)d(option)f(of)h(follo)m
-(wing)e(the)i(terms)g(and)f(conditions)f(either)i(of)g(that)g(v)m
-(ersion)f(or)h(of)g(an)m(y)g(later)330 5121 y(v)m(ersion)d(published)c
-(b)m(y)k(the)g(F)-8 b(ree)31 b(Soft)m(w)m(are)g(F)-8
-b(oundation.)41 b(If)29 b(the)i(Program)f(do)s(es)g(not)g(sp)s(ecify)f
-(a)330 5230 y(v)m(ersion)e(n)m(um)m(b)s(er)g(of)h(this)e(License,)i(y)m
-(ou)g(ma)m(y)h(c)m(ho)s(ose)f(an)m(y)h(v)m(ersion)e(ev)m(er)h
-(published)c(b)m(y)k(the)g(F)-8 b(ree)330 5340 y(Soft)m(w)m(are)31
-b(F)-8 b(oundation.)p eop
-%%Page: 9 11
-9 10 bop 150 -116 a Fj(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052
-b(9)154 299 y(10.)61 b(If)29 b(y)m(ou)g(wish)f(to)i(incorp)s(orate)f
-(parts)g(of)g(the)g(Program)h(in)m(to)f(other)h(free)f(programs)g
-(whose)g(distri-)330 408 y(bution)e(conditions)g(are)j(di\013eren)m(t,)
-e(write)g(to)i(the)f(author)f(to)i(ask)e(for)h(p)s(ermission.)37
-b(F)-8 b(or)29 b(soft)m(w)m(are)330 518 y(whic)m(h)23
-b(is)g(cop)m(yrigh)m(ted)h(b)m(y)g(the)g(F)-8 b(ree)25
-b(Soft)m(w)m(are)g(F)-8 b(oundation,)25 b(write)e(to)i(the)f(F)-8
-b(ree)25 b(Soft)m(w)m(are)g(F)-8 b(oun-)330 628 y(dation;)28
-b(w)m(e)g(sometimes)g(mak)m(e)g(exceptions)g(for)f(this.)39
-b(Our)26 b(decision)g(will)f(b)s(e)h(guided)h(b)m(y)g(the)h(t)m(w)m(o)
-330 737 y(goals)23 b(of)g(preserving)e(the)h(free)h(status)g(of)f(all)g
-(deriv)-5 b(ativ)m(es)22 b(of)g(our)g(free)h(soft)m(w)m(are)h(and)e(of)
-h(promoting)330 847 y(the)31 b(sharing)e(and)g(reuse)h(of)h(soft)m(w)m
-(are)h(generally)-8 b(.)p eop
-%%Page: 10 12
-10 11 bop 150 -116 a Fj(10)2734 b(GNU)31 b(Shogi)f(man)m(ual)330
-299 y Fk(NO)45 b(W)-15 b(ARRANTY)154 491 y Fj(11.)61
-b(BECA)m(USE)40 b(THE)f(PR)m(OGRAM)i(IS)e(LICENSED)g(FREE)g(OF)h(CHAR)m
-(GE,)h(THERE)e(IS)g(NO)330 601 y(W)-10 b(ARRANTY)26 b(F)m(OR)f(THE)g
-(PR)m(OGRAM,)h(TO)e(THE)h(EXTENT)f(PERMITTED)h(BY)g(APPLI-)330
-711 y(CABLE)i(LA)-10 b(W.)27 b(EX)m(CEPT)g(WHEN)h(OTHER)-10
-b(WISE)25 b(ST)-8 b(A)g(TED)28 b(IN)e(WRITING)i(THE)e(COPY-)330
-820 y(RIGHT)35 b(HOLDERS)g(AND/OR)h(OTHER)f(P)-8 b(AR)g(TIES)35
-b(PR)m(O)m(VIDE)h(THE)f(PR)m(OGRAM)h(\\AS)330 930 y(IS")22
-b(WITHOUT)f(W)-10 b(ARRANTY)23 b(OF)f(ANY)g(KIND,)h(EITHER)e(EXPRESSED)
-g(OR)h(IMPLIED,)330 1039 y(INCLUDING,)33 b(BUT)g(NOT)g(LIMITED)f(TO,)g
-(THE)h(IMPLIED)g(W)-10 b(ARRANTIES)32 b(OF)h(MER-)330
-1149 y(CHANT)-8 b(ABILITY)28 b(AND)g(FITNESS)e(F)m(OR)i(A)g(P)-8
-b(AR)g(TICULAR)27 b(PURPOSE.)g(THE)g(ENTIRE)330 1259
-y(RISK)19 b(AS)h(TO)g(THE)g(QUALITY)g(AND)h(PERF)m(ORMANCE)g(OF)f(THE)g
-(PR)m(OGRAM)h(IS)f(WITH)330 1368 y(YOU.)h(SHOULD)g(THE)f(PR)m(OGRAM)i
-(PR)m(O)m(VE)f(DEFECTIVE,)g(YOU)g(ASSUME)f(THE)g(COST)330
-1478 y(OF)30 b(ALL)g(NECESSAR)-8 b(Y)30 b(SER)-10 b(VICING,)30
-b(REP)-8 b(AIR)30 b(OR)g(CORRECTION.)154 1612 y(12.)61
-b(IN)26 b(NO)g(EVENT)g(UNLESS)f(REQUIRED)h(BY)h(APPLICABLE)f(LA)-10
-b(W)26 b(OR)g(A)m(GREED)h(TO)f(IN)330 1722 y(WRITING)37
-b(WILL)f(ANY)i(COPYRIGHT)e(HOLDER,)h(OR)f(ANY)h(OTHER)f(P)-8
-b(AR)g(TY)38 b(WHO)330 1831 y(MA)-8 b(Y)52 b(MODIFY)g(AND/OR)g
-(REDISTRIBUTE)e(THE)h(PR)m(OGRAM)h(AS)f(PERMITTED)330
-1941 y(ABO)m(VE,)40 b(BE)f(LIABLE)f(TO)g(YOU)h(F)m(OR)g(D)m(AMA)m(GES,)
-h(INCLUDING)f(ANY)h(GENERAL,)330 2051 y(SPECIAL,)e(INCIDENT)-8
-b(AL)40 b(OR)e(CONSEQUENTIAL)g(D)m(AMA)m(GES)j(ARISING)e(OUT)g(OF)330
-2160 y(THE)44 b(USE)g(OR)g(INABILITY)h(TO)f(USE)g(THE)g(PR)m(OGRAM)h
-(\(INCLUDING)h(BUT)e(NOT)330 2270 y(LIMITED)29 b(TO)g(LOSS)f(OF)h(D)m
-(A)-8 b(T)g(A)31 b(OR)e(D)m(A)-8 b(T)g(A)31 b(BEING)f(RENDERED)g(INA)m
-(CCURA)-8 b(TE)29 b(OR)330 2379 y(LOSSES)38 b(SUST)-8
-b(AINED)40 b(BY)h(YOU)f(OR)g(THIRD)g(P)-8 b(AR)g(TIES)40
-b(OR)g(A)h(F)-10 b(AILURE)40 b(OF)g(THE)330 2489 y(PR)m(OGRAM)f(TO)f
-(OPERA)-8 b(TE)38 b(WITH)h(ANY)g(OTHER)f(PR)m(OGRAMS\),)h(EVEN)g(IF)f
-(SUCH)330 2599 y(HOLDER)33 b(OR)h(OTHER)f(P)-8 b(AR)g(TY)34
-b(HAS)f(BEEN)h(AD)m(VISED)g(OF)g(THE)f(POSSIBILITY)f(OF)330
-2708 y(SUCH)e(D)m(AMA)m(GES.)150 2966 y Fk(END)45 b(OF)g(TERMS)f(AND)h
-(CONDITIONS)p eop
-%%Page: 11 13
-11 12 bop 150 -116 a Fj(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2006
-b(11)150 299 y Fk(Ho)l(w)46 b(to)f(Apply)f(These)h(T)-11
-b(erms)45 b(to)g(Y)-11 b(our)44 b(New)i(Programs)275
-498 y Fj(If)38 b(y)m(ou)i(dev)m(elop)f(a)g(new)g(program,)j(and)c(y)m
-(ou)i(w)m(an)m(t)g(it)e(to)i(b)s(e)f(of)g(the)h(greatest)h(p)s(ossible)
-36 b(use)j(to)150 607 y(the)i(public,)g(the)h(b)s(est)e(w)m(a)m(y)i(to)
-g(ac)m(hiev)m(e)g(this)e(is)g(to)i(mak)m(e)g(it)f(free)g(soft)m(w)m
-(are)h(whic)m(h)e(ev)m(ery)m(one)j(can)150 717 y(redistribute)28
-b(and)i(c)m(hange)h(under)e(these)i(terms.)275 858 y(T)-8
-b(o)29 b(do)h(so,)g(attac)m(h)h(the)f(follo)m(wing)e(notices)h(to)i
-(the)e(program.)40 b(It)30 b(is)f(safest)h(to)g(attac)m(h)h(them)f(to)g
-(the)150 967 y(start)j(of)g(eac)m(h)h(source)e(\014le)g(to)h(most)g
-(e\013ectiv)m(ely)h(con)m(v)m(ey)g(the)e(exclusion)g(of)g(w)m(arran)m
-(t)m(y;)j(and)d(eac)m(h)i(\014le)150 1077 y(should)28
-b(ha)m(v)m(e)k(at)f(least)g(the)f(\\cop)m(yrigh)m(t")i(line)d(and)g(a)i
-(p)s(oin)m(ter)f(to)h(where)f(the)g(full)e(notice)j(is)e(found.)390
-1212 y Ff(one)i(line)d(to)j(giv)m(e)g(the)g(program's)f(name)h(and)e(a)
-i(brief)e(idea)h(of)g(what)h(it)f(do)s(es.)390 1316 y
-Fg(Copyright)45 b(\(C\))i(19)p Ff(yy)103 b(name)30 b(of)h(author)390
-1523 y Fg(This)47 b(program)e(is)j(free)e(software;)g(you)g(can)h
-(redistribute)e(it)i(and/or)f(modify)390 1627 y(it)h(under)g(the)f
-(terms)h(of)g(the)g(GNU)g(General)f(Public)g(License)g(as)h(published)e
-(by)390 1731 y(the)i(Free)g(Software)e(Foundation;)g(either)h(version)g
-(2)h(of)g(the)g(License,)f(or)390 1835 y(\(at)h(your)g(option\))e(any)i
-(later)g(version.)390 2042 y(This)g(program)e(is)j(distributed)c(in)k
-(the)e(hope)h(that)g(it)g(will)g(be)g(useful,)390 2146
-y(but)g(WITHOUT)f(ANY)h(WARRANTY;)e(without)h(even)g(the)h(implied)f
-(warranty)g(of)390 2250 y(MERCHANTABILITY)e(or)j(FITNESS)f(FOR)h(A)g
-(PARTICULAR)e(PURPOSE.)93 b(See)47 b(the)390 2354 y(GNU)g(General)f
-(Public)g(License)g(for)h(more)f(details.)390 2561 y(You)h(should)f
-(have)h(received)e(a)j(copy)e(of)h(the)g(GNU)g(General)f(Public)g
-(License)390 2665 y(along)g(with)h(this)g(program;)e(if)i(not,)g(write)
-f(to)i(the)e(Free)h(Software)390 2769 y(Foundation,)e(Inc.,)h(675)h
-(Mass)g(Ave,)f(Cambridge,)f(MA)i(02139,)g(USA.)275 2909
-y Fj(Also)30 b(add)f(information)g(on)h(ho)m(w)h(to)g(con)m(tact)i(y)m
-(ou)d(b)m(y)g(electronic)h(and)f(pap)s(er)f(mail.)275
-3050 y(If)f(the)g(program)h(is)e(in)m(teractiv)m(e,)j(mak)m(e)g(it)e
-(output)g(a)h(short)f(notice)h(lik)m(e)f(this)f(when)h(it)g(starts)h
-(in)e(an)150 3160 y(in)m(teractiv)m(e)k(mo)s(de:)390
-3295 y Fg(Gnomovision)45 b(version)h(69,)g(Copyright)g(\(C\))h(19)p
-Ff(yy)55 b(name)30 b(of)g(author)390 3399 y Fg(Gnomovision)45
-b(comes)h(with)h(ABSOLUTELY)e(NO)i(WARRANTY;)e(for)i(details)390
-3502 y(type)g(`show)f(w'.)390 3606 y(This)h(is)g(free)f(software,)g
-(and)h(you)g(are)f(welcome)g(to)h(redistribute)e(it)390
-3710 y(under)h(certain)g(conditions;)f(type)i(`show)f(c')h(for)g
-(details.)275 3851 y Fj(The)27 b(h)m(yp)s(othetical)g(commands)h(`)p
-Fg(show)h(w)p Fj(')f(and)f(`)p Fg(show)j(c)p Fj(')d(should)f(sho)m(w)i
-(the)g(appropriate)f(parts)h(of)150 3960 y(the)38 b(General)g(Public)d
-(License.)63 b(Of)37 b(course,)j(the)f(commands)e(y)m(ou)h(use)g(ma)m
-(y)g(b)s(e)f(called)g(something)150 4070 y(other)25 b(than)f(`)p
-Fg(show)29 b(w)p Fj(')c(and)f(`)p Fg(show)29 b(c)p Fj(';)e(they)d
-(could)g(ev)m(en)h(b)s(e)f(mouse-clic)m(ks)g(or)h(men)m(u)f
-(items|whatev)m(er)150 4179 y(suits)29 b(y)m(our)h(program.)275
-4320 y(Y)-8 b(ou)28 b(should)e(also)i(get)h(y)m(our)f(emplo)m(y)m(er)g
-(\(if)f(y)m(ou)h(w)m(ork)g(as)h(a)f(programmer\))g(or)g(y)m(our)f(sc)m
-(ho)s(ol,)i(if)e(an)m(y)-8 b(,)150 4430 y(to)34 b(sign)f(a)g(\\cop)m
-(yrigh)m(t)i(disclaimer")c(for)j(the)f(program,)h(if)f(necessary)-8
-b(.)51 b(Here)34 b(is)e(a)i(sample;)g(alter)g(the)150
-4539 y(names:)390 4674 y Fg(Yoyodyne,)45 b(Inc.,)i(hereby)f(disclaims)f
-(all)i(copyright)e(interest)h(in)h(the)g(program)390
-4778 y(`Gnomovision')d(\(which)i(makes)h(passes)f(at)h(compilers\))e
-(written)h(by)h(James)f(Hacker.)390 4986 y Ff(signature)30
-b(of)g(T)m(y)h(Co)s(on)p Fg(,)47 b(1)g(April)g(1989)390
-5090 y(Ty)g(Coon,)g(President)e(of)i(Vice)275 5230 y
-Fj(This)19 b(General)h(Public)f(License)h(do)s(es)h(not)g(p)s(ermit)e
-(incorp)s(orating)g(y)m(our)i(program)f(in)m(to)h(proprietary)150
-5340 y(programs.)38 b(If)22 b(y)m(our)h(program)f(is)g(a)h(subroutine)e
-(library)-8 b(,)23 b(y)m(ou)g(ma)m(y)g(consider)f(it)g(more)h(useful)e
-(to)j(p)s(ermit)p eop
-%%Page: 12 14
-12 13 bop 150 -116 a Fj(12)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(linking)j(proprietary)i(applications)g(with)g(the)h(library)-8
-b(.)57 b(If)35 b(this)h(is)f(what)h(y)m(ou)h(w)m(an)m(t)g(to)g(do,)h
-(use)e(the)150 408 y(GNU)31 b(Library)e(General)h(Public)e(License)i
-(instead)f(of)i(this)e(License.)p eop
-%%Page: 13 15
-13 14 bop 150 -116 a Fj(Chapter)30 b(2:)41 b(Ab)s(out)30
-b(the)g(game)i(of)e(shogi)2061 b(13)150 299 y Fh(2)80
-b(Ab)t(out)53 b(the)g(game)g(of)h(shogi)390 518 y Fj(\\Japanese)34
-b(c)m(hess)h(cedes)f(nothing)e(in)h(depth)g(or)g(b)s(eaut)m(y)h(to)h
-(the)f(Europ)s(ean)e(game...)52 b(it)390 622 y(is)29
-b(at)j(least)e(as)h(in)m(teresting.")390 749 y(|)f(Alexander)g
-(Alekhine)390 853 y(\(quoted)h(in)e(Da)m(vid)h(Pritc)m(hard,)g
-Ff(The)g(Encyclop)s(edia)f(of)h(Chess)g(V)-8 b(arian)m(ts)t
-Fj(\))390 1084 y(\\...)69 b(shogi)39 b([is])g(b)m(y)h(far)f(the)h(most)
-f(complex)h(form)f(of)g(c)m(hess)h(that)h(has)e(ev)m(er)h(ac)m(hiev)m
-(ed)390 1187 y(widespread)28 b(p)s(opularit)m(y)-8 b(.")390
-1314 y(|)30 b(R.)h(W)-8 b(a)m(yne)32 b(Sc)m(hmittb)s(erger,)d
-Ff(New)i(Rules)e(for)h(Classic)f(Games)275 1557 y Fj(Shogi)22
-b(is)f(the)j(v)m(ersion)e(of)h(c)m(hess)g(pla)m(y)m(ed)g(in)f(Japan.)37
-b(It)23 b(is)f(strikingly)f(di\013eren)m(t)h(from)g(standard)g(c)m
-(hess)150 1666 y(\(whic)m(h)37 b(I)h(shall)e(refer)i(to)g(henceforth)g
-(as)g(\\in)m(ternational)f(c)m(hess"\))j(and)d(also)h(to)h(all)d(other)
-j(regional)150 1776 y(v)-5 b(arian)m(ts,)37 b(b)s(ecause)f(captured)f
-(pieces)h(can)g(re-en)m(ter)h(pla)m(y)e(on)h(the)g(side)f(of)h(the)f
-(capturer.)57 b(This)34 b(has)150 1886 y(sev)m(eral)d(in)m(teresting)e
-(e\013ects)j(on)e(the)h(pla)m(y)f(of)h(the)f(game:)199
-2105 y(1.)61 b(Shogi)30 b(is)g(m)m(uc)m(h)h(more)h(complex)e(than)h(in)
-m(ternational)f(c)m(hess,)i(at)g(least)f(in)f(terms)h(of)g(the)g(a)m(v)
-m(erage)330 2214 y(n)m(um)m(b)s(er)i(of)i(p)s(ossible)c(mo)m(v)m(es)36
-b(p)s(er)e(turn)f(\(estimated)i(at)g(ab)s(out)f(35)h(for)f(c)m(hess)h
-(and)f(at)h(ab)s(out)f(80)330 2324 y(for)c(shogi\).)199
-2457 y(2.)61 b(There)30 b(are)h(almost)f(no)g(dra)m(ws)g(\(ab)s(out)h
-(1-2\045)g(of)f(all)g(games)h(in)e(professional)g(pla)m(y\).)199
-2589 y(3.)61 b(Exc)m(hanges)31 b(complicate)g(the)f(pla)m(y)g(rather)h
-(than)f(simplifying)c(it.)199 2722 y(4.)61 b(There)23
-b(are)g(no)h(\\endgames")g(in)e(the)h(standard)g(c)m(hess)g(sense;)j
-(all)c(pieces)h(remain)g(in)e(pla)m(y)i(through-)330
-2832 y(out)h(the)g(game.)40 b(Games)25 b(t)m(ypically)d(end)i(in)e(a)j
-(race)f(to)h(c)m(hec)m(kmate)h(the)f(other)f(pla)m(y)m(er)g(b)s(efore)f
-(b)s(eing)330 2941 y(c)m(hec)m(kmated)32 b(oneself.)199
-3074 y(5.)61 b(Ownership)38 b(of)j(a)h(piece)f(is)f(not)i(indicated)d
-(b)m(y)i(the)h(color)f(of)g(the)h(piece;)k(instead,)e(pieces)d(are)330
-3184 y(w)m(edge-shap)s(ed)32 b(and)g(p)s(oin)m(t)f(to)m(w)m(ards)i(the)
-g(opp)s(onen)m(t.)46 b(The)31 b(name)i(of)f(the)h(piece)f(is)f(inscrib)
-s(ed)e(in)330 3293 y(Kanji)g(c)m(haracters)j(on)e(the)h(fron)m(t)f(of)h
-(the)f(piece.)199 3426 y(6.)61 b(Most)31 b(imp)s(ortan)m(tly:)39
-b(it's)30 b(more)h(fun)e(than)h(other)h(forms)f(of)g(c)m(hess)h(:-\))
-275 3691 y(Shogi)26 b(is)g(extremely)h(p)s(opular)e(in)h(Japan;)i(it)e
-(has)h(b)s(een)g(estimated)g(that)h(20)g(million)23 b(Japanese)28
-b(can)150 3801 y(pla)m(y)d(shogi,)i(of)f(whic)m(h)e(p)s(erhaps)g(1)i
-(million)d(are)j(activ)m(e)h(pla)m(y)m(ers.)39 b(It)26
-b(is)e(ev)m(en)j(more)f(p)s(opular)d(there)j(than)150
-3911 y(the)39 b(game)h(of)f(go,)j(Japan's)d(other)g(fa)m(v)m(orite)h(b)
-s(oard)e(game.)67 b(There)38 b(are)i(a)f(n)m(um)m(b)s(er)f(of)h
-(professional)150 4020 y(pla)m(y)m(ers)33 b(who)f(mak)m(e)i(a)g
-(considerable)d(amoun)m(t)j(of)f(money)g(pla)m(ying)e(in)h(shogi)g
-(tournamen)m(ts,)i(and)f(the)150 4130 y(game)h(receiv)m(es)g(extensiv)m
-(e)f(newpap)s(er)f(and)g(television)g(co)m(v)m(erage.)51
-b(Despite)33 b(this,)g(the)g(game)h(has)f(y)m(et)150
-4239 y(to)k(b)s(ecome)g(p)s(opular)c(outside)j(of)g(Japan.)58
-b(P)m(art)37 b(of)f(this)f(is)h(b)s(ecause)g(the)g(Kanji)f(c)m
-(haracters)j(on)e(the)150 4349 y(pieces)27 b(scare)h(a)m(w)m(a)m(y)h
-(some)e(p)s(eople,)g(but)g(mostly)g(it's)f(due,)i(I)f(think,)f(to)i
-(lac)m(k)g(of)f(exp)s(osure)g(to)h(the)f(game)150 4459
-y(and)h(to)h(the)g(di\016cult)m(y)e(of)i(\014nding)d(opp)s(onen)m(ts.)
-39 b(I)29 b(hop)s(e)f(that)h(GNU)g(shogi)f(will)e(help)h(in)m(tro)s
-(duce)g(shogi)150 4568 y(to)k(a)g(wider)e(audience.)150
-4820 y Fk(2.1)68 b(The)45 b(rules)g(of)g(shogi)275 5011
-y Fj(Shogi)28 b(is)g(a)h(t)m(w)m(o-p)s(erson)h(abstract)g(strategy)g(b)
-s(oard)f(game)h(with)d(full)g(information)h(\(i.e.)40
-b(all)28 b(pieces)150 5121 y(and)c(mo)m(v)m(es)j(are)e(visible)e(to)i
-(b)s(oth)g(pla)m(y)m(ers)g(at)g(all)f(times\).)39 b(It)25
-b(is)f(in)g(the)h(c)m(hess)h(family)-8 b(,)25 b(b)s(eing)f(descended)
-150 5230 y(from)29 b(the)g(same)h(ancestral)g(game)g(as)g(in)m
-(ternational)e(c)m(hess:)40 b(the)30 b(Indian)d(game)k(of)e
-(Chaturanga.)40 b(The)150 5340 y(t)m(w)m(o)j(pla)m(y)m(ers)e(are)h
-(referred)f(to)h(as)f(\\Blac)m(k")j(and)d(\\White",)k(with)40
-b(Blac)m(k)i(mo)m(ving)f(\014rst)g(\(unlik)m(e)f(in)p
-eop
-%%Page: 14 16
-14 15 bop 150 -116 a Fj(14)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(in)m(ternational)e(c)m(hess,)i(where)f(White)g(mo)m(v)m(es)i
-(\014rst\),)e(and)g(with)f(mo)m(v)m(emen)m(t)j(alternating)e(b)s(et)m
-(w)m(een)h(the)150 408 y(t)m(w)m(o)38 b(pla)m(y)m(ers.)61
-b(Note)38 b(that)f(\\Blac)m(k")i(and)e(\\White")g(are)h(just)e(names;)k
-(the)d(pieces)g(are)g(not)h(colored.)150 518 y(Instead,)27
-b(they)f(are)g(\015at,)i(w)m(edge-shap)s(ed)d(pieces)h(whic)m(h)f(p)s
-(oin)m(t)f(to)m(w)m(ards)j(the)f(opp)s(onen)m(t.)39 b(The)25
-b(iden)m(tit)m(y)150 628 y(of)32 b(a)g(giv)m(en)g(piece)f(is)g
-(indicated)f(b)m(y)i(t)m(w)m(o)h(Japanese)e(Kanji)g(c)m(haracters)i(on)
-e(eac)m(h)i(piece.)45 b(In)31 b(fact,)i(only)150 737
-y(the)d(top)h(c)m(haracter)h(is)d(needed)h(to)h(iden)m(tify)e(the)h
-(piece)h(and)e(th)m(us)h(only)g(the)g(top)h(c)m(haracter)g(is)f(used)f
-(in)150 847 y(shogi)35 b(diagrams.)55 b(I)35 b(will)e(use)i(alphab)s
-(etical)f(equiv)-5 b(alen)m(ts)35 b(in)f(the)h(diagrams)g(here;)j(to)e
-(see)g(what)g(the)150 956 y(Kanji)d(c)m(haracters)i(lo)s(ok)e(lik)m(e,)
-i(start)f(up)f(xshogi)g(\(see)i(Chapter)e(4)i([xshogi],)f(page)h(33\))g
-(and)e(compare)150 1066 y(the)e(starting)g(setup)g(there)h(with)e(the)h
-(starting)g(setup)g(in)f(this)g(\014le)g(\(see)i(Section)f(2.1.2)i
-([The)e(op)s(ening)150 1176 y(setup],)f(page)i(15\).)275
-1304 y(The)h(ob)5 b(ject)35 b(of)f(the)g(game)h(is)e(to)h(capture)g
-(the)g(opp)s(onen)m(t's)g(King.)50 b(The)33 b(b)s(oard)g(is)g(a)h(grid)
-f(of)h(9x9)150 1414 y(uncolored)26 b(squares,)i(and)f(pieces)g(are)h
-(placed)e(on)i(the)f(squares.)40 b(Eac)m(h)28 b(pla)m(y)m(er)f(b)s
-(egins)f(with)g(20)i(pieces,)150 1524 y(describ)s(ed)g(in)h(the)i(next)
-f(section.)41 b(Capture)30 b(is)g(b)m(y)g(displacemen)m(t,)f(as)i(in)e
-(in)m(ternational)g(c)m(hess.)150 1731 y Fe(2.1.1)63
-b(The)41 b(mo)m(v)m(es)f(of)h(the)g(pieces)275 1918 y
-Fj(Eac)m(h)33 b(pla)m(y)m(er)g(at)h(the)f(b)s(eginning)e(of)i(a)g
-(shogi)g(game)h(has)f(a)g(total)h(of)f(20)h(pieces)f(of)g(eigh)m(t)g
-(di\013eren)m(t)150 2027 y(t)m(yp)s(es.)49 b(The)32 b(mo)m(v)m(es)i(of)
-g(the)f(shogi)f(pieces)h(can)g(b)s(e)g(divided)d(in)m(to)j(three)g
-(classes:)46 b(\\stepping")33 b(pieces,)150 2137 y(that)21
-b(only)f(mo)m(v)m(e)i(one)e(square)h(at)g(a)g(time;)j(\\ranging")c
-(pieces)g(that)h(mo)m(v)m(e)h(an)m(y)f(n)m(um)m(b)s(er)e(of)i
-(unobstructed)150 2246 y(squares)26 b(in)f(a)h(line,)g(and)f
-(\\jumping")g(pieces)h(that)g(can)h(jump)d(o)m(v)m(er)k(obstructing)d
-(pieces)h(to)h(reac)m(h)g(their)150 2356 y(destination)39
-b(squares.)71 b(Most)42 b(pieces)e(can)h(also)f(promote)h(to)g
-(di\013eren)m(t)f(\(usually)f(stronger\))i(pieces)150
-2466 y(under)33 b(certain)i(circumstances)f(\(see)h(the)g(next)g
-(section\).)54 b(All)33 b(pieces)h(capture)h(the)g(same)g(w)m(a)m(y)g
-(that)150 2575 y(they)c(mo)m(v)m(e)h(\(ev)m(en)f(pa)m(wns\).)42
-b(The)30 b(piece)g(mo)m(v)m(es)i(and)e(promotions)g(are)h(as)g(follo)m
-(ws;)f(eac)m(h)h(piece)g(name)150 2685 y(is)e(follo)m(w)m(ed)h(b)m(y)h
-(the)f(standard)g(piece)g(abbreviation:)199 2814 y(1.)61
-b(The)35 b(king)f(\(K\).)i(The)f(king)g(can)g(mo)m(v)m(e)i(one)f
-(square)f(in)f(an)m(y)i(horizon)m(tal,)g(v)m(ertical,)h(or)f(diagonal)
-330 2923 y(direction,)29 b(just)h(lik)m(e)g(the)g(king)g(in)f(in)m
-(ternational)g(c)m(hess.)41 b(The)30 b(king)g(do)s(es)g(not)g(promote.)
-199 3052 y(2.)61 b(The)36 b(ro)s(ok)h(\(R\).)g(The)g(ro)s(ok)f(can)h
-(mo)m(v)m(e)i(an)m(y)e(n)m(um)m(b)s(er)e(of)i(squares)f(in)g(a)h
-(horizon)m(tal)f(or)h(v)m(ertical)330 3162 y(direction.)78
-b(The)43 b(ro)s(ok)g(is)g(the)g(same)h(as)f(the)h(ro)s(ok)f(in)f(in)m
-(ternational)g(c)m(hess)i(\(except)g(that)g(it)330 3271
-y(can)34 b(promote\).)51 b(A)33 b(ro)s(ok)h(promotes)g(to)g(a)g
-(\\dragon)g(king")f(or)g(\\dragon")i(for)e(short)g(\(often)i(just)330
-3381 y(referred)c(to)i(as)f(a)g(\\promoted)h(ro)s(ok"\),)g(whic)m(h)e
-(can)h(mo)m(v)m(e)h(as)f(a)h(ro)s(ok)e(or)h(can)h(mo)m(v)m(e)g(one)f
-(square)330 3490 y(in)d(an)m(y)i(diagonal)e(direction.)199
-3619 y(3.)61 b(The)32 b(bishop)e(\(B\).)k(The)e(bishop)f(can)i(mo)m(v)m
-(e)g(an)m(y)g(n)m(um)m(b)s(er)e(of)i(squares)f(in)f(a)i(diagonal)f
-(direction.)330 3729 y(The)21 b(bishop)f(is)h(the)h(same)h(as)f(the)g
-(bishop)e(in)g(in)m(ternational)h(c)m(hess)h(\(except)i(that)e(it)g
-(can)g(promote\).)330 3838 y(A)33 b(bishop)d(promotes)j(to)g(a)g
-(\\dragon)g(horse")g(or)g(\\horse")g(for)f(short)g(\(often)i(just)e
-(referred)f(to)j(as)330 3948 y(a)40 b(\\promoted)h(bishop"\),)g(whic)m
-(h)d(can)j(mo)m(v)m(e)g(as)f(a)g(bishop)e(or)i(can)g(mo)m(v)m(e)h(one)f
-(square)g(in)f(an)m(y)330 4058 y(horizon)m(tal)31 b(or)g(v)m(ertical)g
-(direction.)42 b(Note:)i(the)31 b(horse)g(should)e(not)j(b)s(e)e
-(confused)h(with)f(a)h(knigh)m(t)330 4167 y(\(see)g(b)s(elo)m(w\),)g
-(as)f(they)h(are)f(t)m(w)m(o)i(completely)e(di\013eren)m(t)g(pieces.)
-199 4296 y(4.)61 b(The)27 b(gold)g(general)g(\(G\).)h(A)g(gold)e
-(general)i(can)f(mo)m(v)m(e)i(one)e(square)g(in)f(an)m(y)i(horizon)m
-(tal)f(or)g(v)m(ertical)330 4406 y(direction,)f(or)f(one)h(square)g(in)
-e(a)j(forw)m(ard)e(diagonal)g(direction.)38 b(Gold)25
-b(generals)h(do)f(not)h(promote.)199 4534 y(5.)61 b(The)29
-b(silv)m(er)f(general)h(\(S\).)h(A)f(silv)m(er)f(general)i(can)f(mo)m
-(v)m(e)i(one)f(square)f(in)f(an)m(y)h(diagonal)g(direction,)330
-4644 y(or)h(one)h(square)f(straigh)m(t)h(forw)m(ard.)40
-b(A)30 b(silv)m(er)g(general)g(promotes)h(to)g(a)g(gold)e(general.)199
-4773 y(6.)61 b(The)26 b(knigh)m(t)h(\(N\).)g(A)g(knigh)m(t)g(can)g(mo)m
-(v)m(e)h(one)f(square)g(straigh)m(t)g(forw)m(ard)f(follo)m(w)m(ed)g(b)m
-(y)h(one)g(square)330 4882 y(to)42 b(either)e(forw)m(ard)h(diagonal,)i
-(jumping)c(o)m(v)m(er)j(in)m(terv)m(ening)e(pieces)h(if)f(an)m(y)-8
-b(.)74 b(In)40 b(other)h(w)m(ords,)330 4992 y(a)f(knigh)m(t)f(mo)m(v)m
-(es)i(lik)m(e)e(its)g(in)m(ternational)f(c)m(hess)i(coun)m(terpart,)j
-(but)c(forw)m(ard)g(only)-8 b(.)68 b(A)39 b(knigh)m(t)330
-5102 y(promotes)31 b(to)g(a)g(gold)f(general.)40 b(The)30
-b(knigh)m(t)g(is)f(the)i(only)e(jumping)g(piece,)h(as)h(in)e(c)m(hess.)
-199 5230 y(7.)61 b(The)39 b(lance)h(\(L\).)h(A)e(lance)h(can)g(mo)m(v)m
-(e)i(an)m(y)e(n)m(um)m(b)s(er)e(of)i(squares)g(straigh)m(t)g(forw)m
-(ard.)68 b(A)40 b(lance)330 5340 y(promotes)31 b(to)g(a)g(gold)f
-(general.)p eop
-%%Page: 15 17
-15 16 bop 150 -116 a Fj(Chapter)30 b(2:)41 b(Ab)s(out)30
-b(the)g(game)i(of)e(shogi)2061 b(15)199 299 y(8.)61 b(The)29
-b(pa)m(wn)g(\(P\).)h(A)g(pa)m(wn)f(can)h(mo)m(v)m(e)h(one)f(square)f
-(straigh)m(t)h(forw)m(ard.)40 b(The)29 b(pa)m(wn)g(captures)h(the)330
-408 y(same)40 b(w)m(a)m(y)h(that)g(it)e(mo)m(v)m(es,)44
-b(in)39 b(con)m(trast)i(to)g(in)m(ternational)e(c)m(hess.)69
-b(There)40 b(is)f(also)h(no)g(initial)330 518 y(t)m(w)m(o-space)i(mo)m
-(v)m(e)g(for)e(pa)m(wns)g(and)f(no)h Fd(en-p)-5 b(assant)51
-b Fj(capture.)70 b(A)41 b(pa)m(wn)e(promotes)i(to)g(a)f(gold)330
-628 y(general;)31 b(a)f(promoted)h(pa)m(wn)f(is)f(usually)f(kno)m(wn)i
-(as)h(a)f(\\T)-8 b(okin".)150 867 y Fe(2.1.2)63 b(The)41
-b(op)s(ening)i(setup)275 1067 y Fj(The)29 b(op)s(ening)g(setup)h(for)g
-(shogi)g(is)g(as)g(follo)m(ws:)293 1291 y Fg(9)191 b(8)f(7)h(6)g(5)f(4)
-h(3)g(2)f(1)150 1400 y(+-----------------------)o(----)o(----)o(---)o
-(----)o(----)o(--+)150 1510 y(|)47 b(wL)h(|)f(wN)g(|)h(wS)f(|)g(wG)h(|)
-f(wK)g(|)h(wG)f(|)g(wS)g(|)h(wN)f(|)h(wL)f(|)95 b(a)150
-1620 y(+-----------------------)o(----)o(----)o(---)o(----)o(----)o
-(--+)150 1729 y(|)191 b(|)47 b(wR)g(|)191 b(|)g(|)f(|)h(|)f(|)48
-b(wB)f(|)191 b(|)95 b(b)150 1839 y(+-----------------------)o(----)o
-(----)o(---)o(----)o(----)o(--+)150 1948 y(|)47 b(wP)h(|)f(wP)g(|)h(wP)
-f(|)g(wP)h(|)f(wP)g(|)h(wP)f(|)g(wP)g(|)h(wP)f(|)h(wP)f(|)95
-b(c)150 2058 y(+-----------------------)o(----)o(----)o(---)o(----)o
-(----)o(--+)150 2168 y(|)191 b(|)f(|)h(|)g(|)f(|)h(|)f(|)h(|)g(|)95
-b(d)150 2277 y(+-----------------------)o(----)o(----)o(---)o(----)o
-(----)o(--+)150 2387 y(|)191 b(|)f(|)h(|)g(|)f(|)h(|)f(|)h(|)g(|)95
-b(e)150 2496 y(+-----------------------)o(----)o(----)o(---)o(----)o
-(----)o(--+)150 2606 y(|)191 b(|)f(|)h(|)g(|)f(|)h(|)f(|)h(|)g(|)95
-b(f)150 2716 y(+-----------------------)o(----)o(----)o(---)o(----)o
-(----)o(--+)150 2825 y(|)47 b(bP)h(|)f(bP)g(|)h(bP)f(|)g(bP)h(|)f(bP)g
-(|)h(bP)f(|)g(bP)g(|)h(bP)f(|)h(bP)f(|)95 b(g)150 2935
-y(+-----------------------)o(----)o(----)o(---)o(----)o(----)o(--+)150
-3044 y(|)191 b(|)47 b(bB)g(|)191 b(|)g(|)f(|)h(|)f(|)48
-b(bR)f(|)191 b(|)95 b(h)150 3154 y(+-----------------------)o(----)o
-(----)o(---)o(----)o(----)o(--+)150 3263 y(|)47 b(bL)h(|)f(bN)g(|)h(bS)
-f(|)g(bG)h(|)f(bK)g(|)h(bG)f(|)g(bS)g(|)h(bN)f(|)h(bL)f(|)95
-b(i)150 3373 y(+-----------------------)o(----)o(----)o(---)o(----)o
-(----)o(--+)275 3739 y Fj(Here,)40 b(\\b")e(stands)f(for)h(\\blac)m(k")
-h(and)e(\\w")h(stands)g(for)f(\\white",)j(so)e(that,)j(for)c(instance,)
-j(\\bL")150 3849 y(means)30 b(\\blac)m(k)h(lance".)41
-b(The)30 b(n)m(um)m(b)s(ers)f(ab)s(o)m(v)m(e)j(the)e(\014les)g(and)g
-(the)g(letters)h(to)g(the)f(righ)m(t)g(of)h(the)g(ranks)150
-3958 y(represen)m(t)39 b(the)g(most)g(common)h(notation)f(system)g
-(used)f(for)h(shogi)f(b)m(y)h(w)m(esterners)g(\(the)h(Japanese)150
-4068 y(also)30 b(use)g(Arabic)g(n)m(umerals)f(for)h(the)h(\014les)e
-(but)h(use)g(Japanese)h(n)m(umerals)e(for)h(the)g(ranks\).)150
-4307 y Fe(2.1.3)63 b(Promotion)41 b(of)g(pieces)275 4507
-y Fj(In)24 b(sharp)g(con)m(trast)i(to)g(in)m(ternational)d(c)m(hess,)k
-(where)d(only)g(pa)m(wns)h(can)g(promote)g(to)h(higher-rank)m(ed)150
-4617 y(pieces,)34 b(most)f(of)g(the)g(pieces)g(in)f(shogi)g(can)h
-(promote.)49 b(The)33 b(promoted)f(ranks)h(are)g(discussed)e(in)h(the)
-150 4726 y(section)22 b(on)g(piece)g(mo)m(v)m(es)i(\(see)f(Section)f
-(2.1.1)i([The)e(mo)m(v)m(es)h(of)f(the)h(pieces],)h(page)f(14\))g(but)e
-(are)i(rep)s(eated)150 4836 y(here)30 b(for)g(reference:)150
-5006 y(P)m(a)m(wn)262 b(promotes)31 b(to)g(gold)f(general)g(\(called)g
-(a)h(`tokin')f(in)f(this)h(case)h(only\).)150 5173 y(Lance)247
-b(promotes)31 b(to)g(gold)f(general.)150 5340 y(Knigh)m(t)204
-b(promotes)31 b(to)g(gold)f(general.)p eop
-%%Page: 16 18
-16 17 bop 150 -116 a Fj(16)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(Silv)m(er)f(general)630 408 y(promotes)i(to)g(gold)f(general.)150
-569 y(Gold)g(general)630 678 y(do)s(es)g(not)h(promote.)150
-838 y(Bishop)207 b(promotes)28 b(to)h(\\dragon)g(horse")f(or)g(just)g
-(\\horse")h(for)f(short.)39 b(The)28 b(horse)g(can)h(mo)m(v)m(e)g(as)g
-(a)630 948 y(bishop)f(or)j(can)f(mo)m(v)m(e)i(one)f(square)f(in)f(an)m
-(y)i(orthogonal)g(direction.)150 1108 y(Ro)s(ok)272 b(promotes)35
-b(to)h(\\dragon)g(king")e(or)i(just)e(\\dragon")i(for)f(short.)54
-b(The)35 b(dragon)g(can)g(mo)m(v)m(e)630 1218 y(as)c(a)f(ro)s(ok)h(or)f
-(can)h(mo)m(v)m(e)h(one)e(square)g(in)f(an)m(y)i(diagonal)f(direction.)
-150 1378 y(King)287 b(do)s(es)30 b(not)h(promote.)275
-1648 y(The)c(three)h(ranks)f(furthest)g(a)m(w)m(a)m(y)j(from)e(eac)m(h)
-h(pla)m(y)m(er)f(constitute)g(his/her)e(\\promotion)i(zone".)41
-b(A)150 1758 y(pla)m(y)m(er)29 b(ma)m(y)-8 b(,)30 b(but)e(is)g(not)h
-(required)e(to,)k(promote)e(a)g(piece)g(after)g(making)f(a)i(mo)m(v)m
-(e)g(in)d(whic)m(h)h(the)h(piece)150 1867 y(b)s(egins)c(and/or)i(ends)f
-(in)g(the)h(promotion)g(zone.)40 b(Th)m(us)26 b(y)m(ou)h(can)g(promote)
-h(a)f(piece)g(when)f(mo)m(ving)h(the)150 1977 y(piece)i(in)m(to)f(the)h
-(promotion)f(zone,)i(out)f(of)g(the)g(promotion)f(zone,)i(or)f(en)m
-(tirely)f(within)e(the)j(promotion)150 2087 y(zone.)41
-b(Promotion)30 b(is)g(mandatory)g(in)f(these)i(cases:)199
-2306 y(1.)61 b(Y)-8 b(ou)31 b(m)m(ust)f(promote)h(a)g(pa)m(wn)f(or)g(a)
-h(lance)f(after)h(mo)m(ving)f(it)g(to)h(the)g(last)f(rank.)199
-2441 y(2.)61 b(Y)-8 b(ou)31 b(m)m(ust)f(promote)h(a)g(knigh)m(t)f
-(after)g(mo)m(ving)h(it)f(to)h(either)e(of)i(the)g(last)f(t)m(w)m(o)i
-(ranks.)275 2711 y(These)27 b(forced)i(promotions)e(ensure)g(that)i(a)g
-(piece)f(cannot)h(b)s(e)e(mo)m(v)m(ed)i(to)g(a)g(square)f(from)f(whic)m
-(h)g(it)150 2820 y(w)m(ould)i(ha)m(v)m(e)j(no)e(further)f(mo)m(v)m(e.)
-275 2956 y(Pieces)f(\\dropp)s(ed")f(on)m(to)i(the)f(b)s(oard)f(\(see)i
-(Section)f(2.1.4)h([Drops],)h(page)e(16\))h(alw)m(a)m(ys)g(drop)e(in)g
-(the)150 3065 y(unpromoted)i(state,)j(ev)m(en)f(if)f(they)g(drop)g(in)m
-(to)g(the)h(promotion)e(zone.)150 3291 y Fe(2.1.4)63
-b(Drops)275 3485 y Fj(When)24 b(a)i(pla)m(y)m(er)f(captures)g(a)g
-(piece,)h(that)g(piece)f(is)f(not)h(remo)m(v)m(ed)h(from)e(pla)m(y)-8
-b(.)39 b(Instead,)26 b(it)f(b)s(ecomes)150 3594 y(the)30
-b(prop)s(ert)m(y)g(of)g(the)h(capturer)f(and)f(can)i(re-en)m(ter)g(pla)
-m(y)e(b)m(y)i(b)s(eing)d(placed)i(on)g(\(almost\))h(an)m(y)f(v)-5
-b(acan)m(t)150 3704 y(square)32 b(during)e(the)i(pla)m(y)m(er's)h(mo)m
-(v)m(e.)47 b(This)31 b(is)g(kno)m(wn)h(as)g(a)h(\\drop")f(and)g(coun)m
-(ts)g(as)h(a)f(full)e(mo)m(v)m(e)k(\(in)150 3813 y(other)25
-b(w)m(ords,)g(y)m(ou)g(can)f(either)g(mo)m(v)m(e)i(a)f(piece)f(on)g
-(the)h(b)s(oard)e(or)h(drop)g(a)g(piece)h(on)m(to)g(the)g(b)s(oard)e
-(during)150 3923 y(y)m(our)31 b(mo)m(v)m(e,)i(but)d(not)i(b)s(oth\).)42
-b(All)30 b(pieces)g(drop)h(in)e(the)j(unpromoted)e(state.)44
-b(Pieces)31 b(ma)m(y)h(b)s(e)e(legally)150 4032 y(dropp)s(ed)e(in)h
-(their)h(promotion)f(zone,)j(but)d(they)i(do)f(not)h(promote)g(on)f
-(that)h(turn.)275 4168 y(There)e(are)i(sev)m(eral)g(restrictions)e(on)h
-(drops:)199 4303 y(1.)61 b(A)26 b(pa)m(wn)f(ma)m(y)h(not)f(b)s(e)g
-(dropp)s(ed)e(on)m(to)k(a)f(\014le)e(if)h(there)g(is)g(already)g(an)g
-(unpromoted)g(pa)m(wn)g(b)s(elong-)330 4413 y(ing)31
-b(to)h(the)f(same)h(pla)m(y)m(er)g(on)f(that)h(\014le.)43
-b(It)31 b(is)g(legal)g(to)h(drop)e(a)i(pa)m(wn)f(on)g(a)h(\014le)f
-(whic)m(h)f(con)m(tains)330 4522 y(a)h Fd(pr)-5 b(omote)g(d)43
-b Fj(pa)m(wn)30 b(b)s(elonging)e(to)j(the)g(same)g(pla)m(y)m(er,)f(ho)m
-(w)m(ev)m(er.)199 4657 y(2.)61 b(A)35 b(pa)m(wn)g(ma)m(y)h(not)f(b)s(e)
-f(dropp)s(ed)g(to)h(giv)m(e)h(immediate)e(c)m(hec)m(kmate)k(on)d(the)g
-(mo)m(v)m(e.)57 b(A)35 b(pa)m(wn)g(is,)330 4767 y(ho)m(w)m(ev)m(er,)d
-(p)s(ermitted)c(to)j(b)s(e)f(mo)m(v)m(ed)h(on)f(the)g(b)s(oard)f(to)i
-(giv)m(e)g(immediate)e(c)m(hec)m(kmate.)43 b(This)28
-b(is)i(a)330 4876 y(curious)f(rule,)h(and)h(if)e(an)m(y)m(one)j(kno)m
-(ws)f(the)g(reason)g(for)g(it)f(I)h(w)m(ould)f(appreciate)h(it)f(if)g
-(they)h(w)m(ould)330 4986 y(con)m(tact)i(me)d(and)g(explain)f(it)h(to)h
-(me)f(:-\))199 5121 y(3.)61 b(A)36 b(pa)m(wn)f(or)h(piece)g(ma)m(y)g
-(not)g(b)s(e)g(dropp)s(ed)d(on)m(to)38 b(a)e(square)f(from)h(whic)m(h)e
-(they)i(w)m(ould)f(ha)m(v)m(e)i(no)330 5230 y(legal)27
-b(mo)m(v)m(e.)41 b(This)26 b(means)h(that)h(pa)m(wns)f(and)g(lances)g
-(ma)m(y)h(not)g(b)s(e)e(dropp)s(ed)g(on)m(to)i(the)g(last)f(rank,)330
-5340 y(and)j(the)g(knigh)m(t)g(ma)m(y)h(not)g(b)s(e)e(dropp)s(ed)g(on)m
-(to)i(the)g(last)f(or)g(second-to-last)i(rank.)p eop
-%%Page: 17 19
-17 18 bop 150 -116 a Fj(Chapter)30 b(2:)41 b(Ab)s(out)30
-b(the)g(game)i(of)e(shogi)2061 b(17)275 299 y(It)36 b(is)f(en)m(tirely)
-h(p)s(ermissible)c(\(and)k(often)h(advisable\))e(to)i(drop)f(a)g(piece)
-g(or)h(pa)m(wn)f(b)s(et)m(w)m(een)h(one's)150 408 y(King)28
-b(and)g(an)h(attac)m(king)i(ranging)d(piece.)40 b(F)-8
-b(or)30 b(this)e(reason,)i(the)f(\014nal)f(c)m(hec)m(kmating)i(mo)m(v)m
-(e)h(is)d(nearly)150 518 y(alw)m(a)m(ys)j(an)f(attac)m(k)j(on)d(the)h
-(King)e(from)h(an)g(adjacen)m(t)i(square)e(\(except)i(for)e(an)g(attac)
-m(k)j(b)m(y)d(a)h(Knigh)m(t\).)275 650 y(Captured)e(pieces)h(are)h
-(said)e(to)i(b)s(e)f(pieces)g(\\in)g(hand".)275 781 y(The)h(drop)g(is)g
-(the)h(primary)e(distinguishing)d(feature)32 b(of)g(Japanese)g(c)m
-(hess,)h(shared)e(with)g(no)h(other)150 891 y(p)s(opular)21
-b(c)m(hess-t)m(yp)s(e)k(game.)39 b(It)24 b(giv)m(es)f(shogi)g(a)h(v)m
-(ery)g(aggressiv)m(e)h(qualit)m(y)-8 b(,)24 b(and)f(dramatically)f
-(increases)150 1000 y(the)h(n)m(um)m(b)s(er)f(of)h(p)s(ossible)d(mo)m
-(v)m(es)k(once)g(a)f(few)f(pieces)h(ha)m(v)m(e)h(b)s(een)e(captured.)38
-b(Another)23 b(in)m(teresting)f(fea-)150 1110 y(ture)h(of)h(shogi)f(is)
-g(that)h(exc)m(hanges)h(complicate)e(pla)m(y)h(rather)f(than)g
-(simplifying)d(it)j(\(as)h(in)e(in)m(ternational)150
-1220 y(c)m(hess\),)31 b(b)s(ecause)g(of)f(the)h(drop)e(rule.)150
-1435 y Fe(2.1.5)63 b(Winning)41 b(the)g(game)275 1625
-y Fj(A)36 b(game)g(of)h(shogi)e(is)g(w)m(on)h(b)m(y)g(capturing)f(the)h
-(opp)s(onen)m(t's)f(king.)57 b(In)35 b(general,)j(this)c(is)h(done)h(b)
-m(y)150 1734 y(c)m(hec)m(kmating)26 b(the)e(king:)37
-b(attac)m(king)26 b(the)f(king)e(in)g(suc)m(h)i(a)f(w)m(a)m(y)i(that)f
-(the)f(king)g(cannot)h(b)s(e)f(defended)f(no)150 1844
-y(matter)32 b(what)f(the)h(defending)d(pla)m(y)m(er)i(mo)m(v)m(es.)45
-b(Note,)33 b(though,)e(that)h(there)f(is)g(no)g(rule)f(that)h(requires)
-150 1954 y(a)f(pla)m(y)m(er)g(to)g(defend)f(a)h(king)f(whic)m(h)f(is)h
-(b)s(eing)g(attac)m(k)m(ed.)43 b(Ho)m(w)m(ev)m(er,)32
-b(if)d(he)g(do)s(es)h(not)g(defend)e(his)h(king,)150
-2063 y(the)36 b(opp)s(onen)m(t)f(is)g(en)m(tirely)f(free)i(to)g
-(capture)g(it)f(on)h(the)g(next)f(mo)m(v)m(e,)k(th)m(us)c(winning)e
-(the)j(game.)57 b(As)150 2173 y(in)31 b(in)m(ternational)g(c)m(hess,)j
-(in)d(practice)i(most)g(games)g(end)f(b)m(y)g(resignation)g(when)f(one)
-i(pla)m(y)m(er)f(realizes)150 2282 y(that)f(he)f(cannot)h(escap)s(e)g
-(c)m(hec)m(kmate.)150 2498 y Fe(2.1.6)63 b(Dra)m(ws)275
-2687 y Fj(There)26 b(are)h(v)m(ery)g(few)f(dra)m(ws)g(in)f(shogi;)j
-(only)e(ab)s(out)g(1-2\045)i(of)e(professional)f(games)j(end)e(in)f(a)i
-(dra)m(w.)150 2797 y(One)37 b(reason)g(for)g(this)g(is)f(that)i
-(material)e(can)i(nev)m(er)g(b)s(e)e(depleted)h(as)g(in)f(c)m(hess,)k
-(b)s(ecause)d(captured)150 2907 y(pieces)e(are)h(constan)m(tly)g(re-en)
-m(tering)f(pla)m(y)g(as)h(a)g(consequence)g(of)f(the)h(drop)e(rule.)55
-b(In)34 b(fact,)k(most)e(of)150 3016 y(the)31 b(w)m(a)m(ys)g(a)g(game)g
-(can)g(b)s(e)e(dra)m(wn)h(in)f(c)m(hess)i(are)f(not)h(allo)m(w)m(ed)f
-(in)f(shogi:)225 3235 y Fi(\017)60 b Fj(Dra)m(ws)31 b(cannot)g(b)s(e)f
-(o\013ered.)225 3367 y Fi(\017)60 b Fj(There)30 b(is)f(no)i(\014ft)m
-(y-mo)m(v)m(e)h(rule.)225 3499 y Fi(\017)60 b Fj(A)33
-b(stalemate)i(coun)m(ts)f(as)f(a)h(win)e(for)h(the)h(stalemater.)50
-b(Stated)34 b(otherwise:)46 b(if)32 b(y)m(ou)i(can't)g(mo)m(v)m(e,)330
-3608 y(y)m(ou)d(lose.)225 3740 y Fi(\017)60 b Fj(P)m(erp)s(etual)30
-b(c)m(hec)m(k)i(is)d(illegal)g(\(see)i(b)s(elo)m(w\).)275
-4003 y(There)e(are)i(only)f(t)m(w)m(o)h(legal)g(w)m(a)m(ys)g(in)e(whic)
-m(h)g(a)i(dra)m(w)f(can)g(o)s(ccur:)199 4222 y(1.)61
-b(A)29 b(p)s(osition)e(\(including)f(the)k(pieces)e(in)g(hand\))g(o)s
-(ccurs)h(4)h(times)e(with)g(the)h(same)h(pla)m(y)m(er)f(to)g(mo)m(v)m
-(e)330 4332 y(\(called)j(\\Sennic)m(hite"\).)47 b(Ho)m(w)m(ev)m(er,)35
-b(if)c(this)h(is)f(caused)i(b)m(y)f(consecutiv)m(e)i(c)m(hec)m(ks)f
-(\(direct)g(attac)m(ks)330 4441 y(on)27 b(the)g(King,)g(threatening)g
-(to)h(capture)f(it)g(on)g(the)g(next)g(mo)m(v)m(e\))i(b)m(y)e(one)h
-(side,)f(the)g(pla)m(y)m(er)g(giving)330 4551 y(these)34
-b(c)m(hec)m(ks)i(loses)e(the)g(game.)53 b(In)33 b(other)h(w)m(ords,)h
-(p)s(erp)s(etual)d(c)m(hec)m(k)k(results)c(in)h(a)i(loss)e(for)h(the)
-330 4660 y(attac)m(k)m(er)f(who)d(recreates)i(the)f(same)f(p)s(osition)
-f(the)h(4th)h(time.)199 4792 y(2.)61 b(Both)36 b(pla)m(y)m(ers)f(ha)m
-(v)m(e)h(mo)m(v)m(ed)g(their)e(King)g(in)m(to)h(the)h(the)f(promotion)f
-(zone)i(\(or)g(they)f(cannot)h(b)s(e)330 4902 y(prev)m(en)m(ted)22
-b(from)g(doing)f(so\))h(and)g(the)g(Kings)f(cannot)h(b)s(e)f(c)m(hec)m
-(kmated.)40 b(A)22 b(King)f(who)h(has)f(en)m(tered)330
-5011 y(the)31 b(promotion)e(zone)j(is)d(kno)m(wn)h(as)h(an)f(\\en)m
-(tering)h(King";)f(due)g(to)h(the)f(forw)m(ard)g(orien)m(tation)h(of)
-330 5121 y(most)j(shogi)g(pieces,)h(it)f(is)f(v)m(ery)h(hard)g(to)g
-(mate)h(suc)m(h)f(a)h(King.)51 b(In)33 b(that)i(case)g(the)f(pla)m(y)m
-(ers)g(ma)m(y)330 5230 y(decide)29 b(to)i(coun)m(t)f(their)f(pieces)g
-(as)h(follo)m(ws:)40 b(the)29 b(King)g(do)s(es)g(not)h(coun)m(t,)h(the)
-f(Ro)s(ok)g(and)f(Bishop)330 5340 y(coun)m(t)h(as)g(5)g(p)s(oin)m(ts,)f
-(and)g(all)g(other)h(pieces)f(as)h(one)g(p)s(oin)m(t.)39
-b(Promotion)30 b(is)e(disregarded.)39 b(If)30 b(b)s(oth)p
-eop
-%%Page: 18 20
-18 19 bop 150 -116 a Fj(18)2734 b(GNU)31 b(Shogi)f(man)m(ual)330
-299 y(pla)m(y)m(ers)k(ha)m(v)m(e)i(at)f(least)g(24)g(p)s(oin)m(ts)e
-(the)h(game)i(is)d(a)i(dra)m(w)f(\(called)g(\\Jishogi"\).)52
-b(If)34 b(a)h(pla)m(y)m(er)f(has)330 408 y(less,)c(he)g(loses)g(the)h
-(game.)330 545 y(Of)41 b(course,)k(a)d(pla)m(y)m(er)f(can)h(refuse)f
-(to)i(coun)m(t)f(pieces)f(when)g(he)g(still)f(has)h(mating)g(c)m
-(hances)i(or)330 655 y(c)m(hances)32 b(to)g(gain)f(material)g(whic)m(h)
-f(w)m(ould)g(a\013ect)j(the)e(outcome)i(of)e(the)h(coun)m(ting.)43
-b(There)31 b(is)f(no)330 765 y(strict)38 b(rule)f(ab)s(out)h(what)g(to)
-h(do)f(if)f(this)g(is)g(not)i(the)f(case,)k(but)37 b(nonetheless)h(a)g
-(pla)m(y)m(er)h(refuses)330 874 y(to)f(coun)m(t)g(up)e(\(e.g.)63
-b(b)s(ecause)38 b(he)f(do)s(es)g(not)h(ha)m(v)m(e)g(enough)f(p)s(oin)m
-(ts)g(for)g(a)g(dra)m(w\).)62 b(It)38 b(has)f(b)s(een)330
-984 y(generally)30 b(accepted)i(that)g(in)e(suc)m(h)g(a)h(case)h(the)g
-(game)f(ends)g(and)f(the)h(pieces)g(are)g(coun)m(ted)g(after)330
-1093 y(one)g(pla)m(y)m(er)f(has)g(managed)h(to)g(get)h(all)d(his)g
-(pieces)h(protected)h(in)e(the)i(promotion)f(zone.)150
-1355 y Fe(2.1.7)63 b(Handicaps)275 1552 y Fj(Unlik)m(e)34
-b(in)m(ternational)g(c)m(hess,)j(shogi)e(has)g(a)h(w)m(ell-established)
-d(handicap)h(system)h(whic)m(h)f(is)h(used)150 1662 y(when)28
-b(pla)m(y)m(ers)i(of)f(di\013eren)m(t)g(strengths)g(pla)m(y)g(against)g
-(eac)m(h)i(other.)41 b(Handicaps)28 b(range)i(from)e(small)g(to)150
-1771 y(h)m(uge,)h(whic)m(h)d(mak)m(es)j(it)e(p)s(ossible)f(for)h(w)m
-(eak)i(pla)m(y)m(ers)e(to)i(pla)m(y)e(against)h(ev)m(en)h(v)m(ery)f
-(strong)g(pla)m(y)m(ers)g(and)150 1881 y(ha)m(v)m(e)k(an)e(ev)m(en)h(c)
-m(hance)g(of)g(winning.)275 2020 y(Shogi)f(pla)m(y)m(ers)i(are)f(rank)m
-(ed)h(as)f(follo)m(ws:)42 b(the)32 b(w)m(eak)m(est)i(rank)c(is)h
-(around)f(15)j(\\kyu",)f(whic)m(h)e(repre-)150 2130 y(sen)m(ts)j(a)g(b)
-s(eginner.)46 b(14)33 b(kyu)f(is)g(higher)f(than)h(15)i(kyu,)f(13)g
-(kyu)f(is)g(higher)f(still,)g(and)h(so)h(on)g(un)m(til)e(y)m(ou)150
-2240 y(get)e(to)g(1)g(kyu.)40 b(The)27 b(next)i(highest)e(rank)h(is)f
-(1)i(\\dan",)g(follo)m(w)m(ed)f(b)m(y)g(2)h(dan,)f(3)h(dan)f(and)f(so)i
-(forth.)39 b(The)150 2349 y(highest)34 b(amateur)g(rank)g(is)g(6)g
-(dan;)i(professionals)d(go)i(up)e(to)i(9)g(dan.)52 b(Ho)m(w)m(ev)m(er,)
-38 b(professional)33 b(ranks)150 2459 y(are)c(not)g(the)h(same)f(as)g
-(amateur)g(ranks;)g(a)h(professional)d(1)i(dan)g(is)f
-Fd(much)36 b Fj(stronger)29 b(than)g(an)f(amateur)150
-2568 y(1)35 b(dan.)55 b(This)33 b(system)i(is)f(similar)f(to)j(that)f
-(used)f(b)m(y)h(go)h(pla)m(y)m(ers)f(\(and)g(also)g(other)h(Japanese)f
-(sp)s(orts)150 2678 y(suc)m(h)30 b(as)h(k)-5 b(arate\).)275
-2817 y(A)40 b(handicap)f(consists)g(of)i(the)f(stronger)h(pla)m(y)m(er)
-f(pla)m(ying)f(White)h(and)g(remo)m(ving)g(one)h(or)f(more)150
-2927 y(pieces)35 b(from)f(his)g(side)g(of)h(the)g(b)s(oard)f(at)i(the)f
-(start)g(of)h(the)f(game.)55 b(These)35 b(pieces)g(are)g(p)s(ermanen)m
-(tly)150 3037 y(remo)m(v)m(ed)c(from)f(pla)m(y;)g(they)h(are)g(not)f
-(in)f(hand.)275 3176 y(The)e(follo)m(wing)g(is)h(a)h(list)e(of)h(the)h
-(accepted)h(handicaps,)d(from)h(w)m(eak)m(est)i(to)f(strongest.)41
-b(The)28 b(degree)150 3286 y(of)37 b(the)g(handicap,)h(represen)m(ted)f
-(b)m(y)g(the)g(p)s(osition)e(in)h(the)h(list,)g(represen)m(ts)g(the)g
-(di\013erence)g(in)e(rank)150 3395 y(b)s(et)m(w)m(een)45
-b(the)f(t)m(w)m(o)h(pla)m(y)m(ers)f(for)f(whic)m(h)g(the)h(handicap)e
-(is)h(appropriate.)80 b(These)44 b(rules)f(are)h(tak)m(en)150
-3505 y(from)32 b(the)g(b)s(o)s(oks)f(\\Shogi)h(for)g(Beginners")f(b)m
-(y)h(John)g(F)-8 b(airbairn)30 b(and)i(\\The)g(Art)g(of)g(Shogi")g(b)m
-(y)g(T)-8 b(on)m(y)150 3614 y(Hoskings)33 b(\(see)i(Chapter)f(5)g
-([References)h(and)e(links],)g(page)i(41\))g(and,)f(I)g(b)s(eliev)m(e,)
-g(represen)m(t)g(curren)m(t)150 3724 y(Japanese)d(practice.)199
-3943 y(1.)61 b(The)30 b(stronger)g(pla)m(y)m(er)h(remo)m(v)m(es)h(his)d
-(left)h(lance)g(\(on)h(1a\).)199 4080 y(2.)61 b(The)31
-b(pla)m(y)m(ers)h(pla)m(y)f(a)h(t)m(w)m(o-game)i(matc)m(h;)f(in)d(the)i
-(\014rst)f(game)h(the)g(stronger)g(pla)m(y)m(er)f(remo)m(v)m(es)i(his)
-330 4190 y(left)d(lance)g(\(on)h(1a\),)h(while)c(in)h(the)i(second)f
-(game)i(he)e(remo)m(v)m(es)i(his)d(bishop.)199 4327 y(3.)61
-b(The)30 b(stronger)g(pla)m(y)m(er)h(remo)m(v)m(es)h(his)d(bishop.)199
-4463 y(4.)61 b(The)30 b(stronger)g(pla)m(y)m(er)h(remo)m(v)m(es)h(his)d
-(ro)s(ok.)199 4600 y(5.)61 b(The)30 b(stronger)g(pla)m(y)m(er)h(remo)m
-(v)m(es)h(his)d(ro)s(ok)h(and)g(left)g(lance.)199 4737
-y(6.)61 b(The)31 b(pla)m(y)m(ers)h(pla)m(y)f(a)h(t)m(w)m(o-game)i(matc)
-m(h;)f(in)d(the)i(\014rst)f(game)h(the)g(stronger)g(pla)m(y)m(er)f
-(remo)m(v)m(es)i(his)330 4847 y(ro)s(ok)d(and)f(left)h(lance)g(\(on)g
-(1a\),)h(while)d(in)h(the)h(second)g(game)h(he)f(remo)m(v)m(es)h(his)d
-(ro)s(ok)i(and)g(bishop.)199 4984 y(7.)61 b(The)30 b(stronger)i(pla)m
-(y)m(er)f(remo)m(v)m(es)h(his)d(ro)s(ok)i(and)g(bishop.)40
-b(This)29 b(is)h(usually)f(called)h(a)h(\\t)m(w)m(o-piece")330
-5093 y(handicap.)199 5230 y(8.)61 b(The)31 b(stronger)g(pla)m(y)m(er)g
-(remo)m(v)m(es)h(his)e(ro)s(ok,)h(bishop,)f(and)g(b)s(oth)g(lances.)43
-b(This)29 b(is)h(called)g(a)i(\\four-)330 5340 y(piece")f(handicap.)p
-eop
-%%Page: 19 21
-19 20 bop 150 -116 a Fj(Chapter)30 b(2:)41 b(Ab)s(out)30
-b(the)g(game)i(of)e(shogi)2061 b(19)199 299 y(9.)61 b(The)33
-b(stronger)h(pla)m(y)m(er)g(remo)m(v)m(es)h(his)d(ro)s(ok,)i(bishop,)f
-(b)s(oth)g(lances,)h(and)f(b)s(oth)g(knigh)m(ts.)50 b(This)32
-b(is)330 408 y(called)e(a)g(\\six-piece")h(handicap.)154
-545 y(10.)61 b(The)41 b(stronger)h(pla)m(y)m(er)f(remo)m(v)m(es)i(his)d
-(ro)s(ok,)45 b(bishop,)e(b)s(oth)e(lances,)j(b)s(oth)d(knigh)m(ts,)j
-(and)d(b)s(oth)330 655 y(silv)m(ers.)e(This)29 b(is)g(called)h(an)g
-(\\eigh)m(t-piece")i(handicap.)275 930 y(Another)j(adv)-5
-b(an)m(tage)38 b(of)e(pla)m(ying)e(handicap)h(games)h(is)f(that)h(the)g
-(handicaps)e(alter)i(the)g(optimal)150 1040 y(strategy)g(for)e(b)s(oth)
-g(pla)m(y)m(ers.)54 b(F)-8 b(or)35 b(instance,)h(handicaps)d(all)g(ha)m
-(v)m(e)j(their)e(o)m(wn)g(op)s(ening)f(lines)g(whic)m(h)150
-1150 y(ma)m(y)j(b)s(ear)g(little)e(or)i(no)f(resem)m(blance)h(to)h
-(those)f(used)f(in)f(non-handicap)g(shogi.)57 b(This)34
-b(means)h(that)150 1259 y(when)26 b(learning)f(handicap)g(shogi,)i(y)m
-(ou)g(are)g(essen)m(tially)e(learning)g(completely)h(new)g(games)i
-(whic)m(h)d(use)150 1369 y(the)31 b(same)f(equipmen)m(t!)275
-1508 y(The)c(reader)g(ma)m(y)h(w)m(onder)f(ho)m(w)h(on)f(earth)h(a)g
-(pla)m(y)m(er)g(giving)e(an)i(eigh)m(t-piece)g(handicap,)f(sa)m(y)-8
-b(,)29 b(could)150 1617 y(p)s(ossibly)37 b(hop)s(e)j(to)h(win.)68
-b(Don't)41 b(forget,)j(though,)f(that)d(in)f(shogi)h(the)g(opp)s(onen)m
-(t's)g(pieces)g(can)h(b)s(e)150 1727 y(captured)g(and)h(then)f(b)s
-(ecome)h(part)g(of)g(one's)g(o)m(wn)g(arm)m(y)-8 b(.)76
-b(Th)m(us,)44 b(if)d(the)h(opp)s(onen)m(t)f(pla)m(ys)g(badly)150
-1837 y(enough,)30 b(the)h(n)m(um)m(b)s(er)e(of)i(pieces)f(will)d(so)s
-(on)j(ev)m(en)i(out.)150 2070 y Fe(2.1.8)63 b(Notes)41
-b(for)g(c)m(hess)g(pla)m(y)m(ers)275 2267 y Fj(Here)29
-b(are)h(a)f(few)g(miscellaneous)f(things)f(that)j(ma)m(y)g(confuse)f(c)
-m(hess)g(pla)m(y)m(ers.)41 b(Some)29 b(of)g(these)h(ha)m(v)m(e)150
-2376 y(b)s(een)g(men)m(tioned)g(elsewhere,)g(but)f(they)i(b)s(ear)f
-(rep)s(eating.)199 2595 y(1.)61 b(There)30 b(is)f(no)i(queen.)199
-2732 y(2.)61 b(P)m(a)m(wns)29 b(capture)h(the)f(same)h(w)m(a)m(y)g
-(they)f(mo)m(v)m(e.)42 b(There)29 b(is)f(no)h(initial)e(t)m(w)m
-(o-space)k(pa)m(wn)e(mo)m(v)m(e)i(and)330 2842 y(no)f
-Fd(en-p)-5 b(assant)41 b Fj(mo)m(v)m(e.)199 2979 y(3.)61
-b(There)42 b(is)g(no)h(sp)s(ecial)e(castling)h(mo)m(v)m(e.)80
-b(There)42 b Fd(ar)-5 b(e)51 b Fj(a)43 b(large)g(n)m(um)m(b)s(er)e(of)i
-(p)s(ossible)d(defensiv)m(e)330 3088 y(formations)31
-b(referred)f(to)i(as)g(\\castles")h(\(see)f(Section)f(2.2)h([Sample)f
-(game],)i(page)f(19\))g(but)f(there)330 3198 y(is)e(no)i(need)f(for)g
-(sp)s(ecial)f(mo)m(v)m(es)j(to)f(create)h(them.)199 3334
-y(4.)61 b(A)30 b(giv)m(en)h(piece)f(can)h(only)e(promote)i(to)g
-Fd(one)38 b Fj(other)30 b(kind)f(of)h(piece.)150 3630
-y Fk(2.2)68 b(Sample)46 b(game)275 3827 y Fj(This)e(game)k(w)m(as)f
-(annotated)g(b)m(y)g(Pieter)f(Stouten)h(\(see)g(Chapter)f(5)h
-([References)h(and)e(links],)150 3937 y(page)40 b(41\).)70
-b(I)39 b(ha)m(v)m(e)i(made)f(some)f(minor)g(corrections.)68
-b(Note)41 b(that)f(captures)g(are)g(denoted)f(b)m(y)h(the)150
-4046 y(\\x")34 b(sym)m(b)s(ol)f(e.g.)51 b(Rx3f)34 b(and)e(drops)h(are)h
-(denoted)f(b)m(y)h(the)g(\\*")g(sym)m(b)s(ol)f(e.g.)51
-b(R*3f.)g(Chec)m(k)34 b(is)e(indi-)150 4156 y(cated)k(b)m(y)g(a)g(\\)p
-Fg(+)p Fj(")g(after)g(the)f(mo)m(v)m(e,)k(e.g.)56 b(R3f)p
-Fg(+)p Fj(.)g(I)35 b(recommend)h(y)m(ou)f(use)g(gn)m(ushogi/xshogi)g
-(to)h(pla)m(y)150 4266 y(along)i(with)f(this)g(game.)66
-b(In)37 b(xshogi)h(simply)e(hit)h(the)h(\\F)-8 b(orce)41
-b(Mo)m(v)m(es")f(button)e(after)h(starting)f(up,)150
-4375 y(while)26 b(in)h(gn)m(ushogi)g(en)m(ter)i(the)f(w)m(ord)f
-(\\force")j(at)f(the)f(prompt.)39 b(This)26 b(will)f(allo)m(w)j(y)m(ou)
-g(to)h(en)m(ter)g(mo)m(v)m(es)150 4485 y(for)h(b)s(oth)g(sides.)275
-4624 y(Note)d(also)f(that)h(the)g(mo)m(v)m(e)g(n)m(um)m(b)s(ering)e
-(system)h(used)f(here)h(is)g(the)g(c)m(hess-t)m(yp)s(e)h(system)g
-(where)f(one)150 4733 y(mo)m(v)m(e)33 b(means)d(one)i(mo)m(v)m(e)g(b)m
-(y)f(eac)m(h)h(pla)m(y)m(er.)43 b(The)31 b(Japanese)g(coun)m(t)h(one)f
-(mo)m(v)m(e)i(made)e(b)m(y)g(eac)m(h)h(pla)m(y)m(er)150
-4843 y(as)f(t)m(w)m(o)g(mo)m(v)m(es.)275 4982 y
-(|||||||||||||||||||||||||)275 5121 y(Belo)m(w)c(y)m(ou)g(will)d
-(\014nd)h(\(the)i(English)d(translation)i(of)7 b(\))27
-b(an)f(annotated)i(game)f(whic)m(h)f(w)m(as)h(published)150
-5230 y(in)41 b(the)i(Dutc)m(h)h(Shogi)d(magazine)j(\\81")g(and)e(in)g
-(the)g(Dutc)m(h)i(b)s(eginners)c(b)s(o)s(oklet.)77 b(It)43
-b(has)g(pro)m(v)m(en)150 5340 y(to)e(b)s(e)e(a)h(v)m(ery)g(useful)e
-(game)j(to)g(explain)d(some)i(basic)f(principles)d(of)k(Shogi.)69
-b(Also,)42 b(it)d(is)g(a)h(rather)p eop
-%%Page: 20 22
-20 21 bop 150 -116 a Fj(20)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(straigh)m(tforw)m(ard)44 b(game)i(compared)e(to)h(professional)e
-(games)i(where)f(in)f(most)i(cases)h(v)m(ery)e(di\013use)150
-408 y(middle)28 b(game)j(\014gh)m(ts)g(tak)m(e)h(place.)275
-543 y(Pieter)e(Stouten,)g(14th)h(Ma)m(y)h(1990.)275 678
-y(|||||||||||||||||||||||||)275 813 y(Blac)m(k:)41 b(Mic)m(hael)31
-b(T)-8 b(ren)m(t)30 b(\(1-dan\).)42 b(White:)e(Da)m(vid)31
-b(Murph)m(y)e(\(2-dan\).)275 948 y(1.)41 b(P2f)30 b(P3d)g(2.)41
-b(P2e)31 b(B3c)150 1058 y([)j(This)f(mo)m(v)m(e)i(is)f(necessary)-8
-b(,)36 b(as)e(otherwise)g(white)f(can)i(exc)m(hange)g(pa)m(wns:)48
-b(3.)53 b(P2d)33 b(Px2d)h(4.)53 b(Rx2d.)150 1167 y(He)31
-b(w)m(ould)e(th)m(us)h(get)i(a)e(pa)m(wn)g(in)f(hand)h(and)f(op)s(en)h
-(up)f(his)g(ro)s(ok)i(\014le.)39 b(])275 1302 y(3.)i(P7f)30
-b(P4d)150 1412 y([)39 b(White)f(closes)h(the)g(bishop)d(diagonal)i
-(again.)66 b(He)39 b(plans)e(to)i(pla)m(y)f(ranging)g(ro)s(ok)h(\(the)g
-(ro)s(ok)f(go)s(es)150 1521 y(to)h(5b,)g(4b,)h(3)e(or)g(2b;)k(a)c
-(defensiv)m(e)f(strategy\))i(and)f(in)e(that)i(case)h(he'd)f(b)s(etter)
-f(a)m(v)m(oid)i(an)e(exc)m(hange)150 1631 y(of)32 b(bishops.)42
-b(One)32 b(of)f(the)h(reasons)g(is)f(that)h(he)g(will)d(ha)m(v)m(e)j
-(problems)e(dev)m(eloping)h(his)f(pieces)i(without)150
-1740 y(lea)m(ving)e(holes)g(for)g(bishop)e(drops.)40
-b(])275 1875 y(4.)h(S4h)29 b(R3b)i(5.)41 b(P3f)30 b(S4b)g(6.)41
-b(K6h)30 b(K6b)150 1985 y([)36 b(In)g(general)g(the)h(ro)s(ok)f(pla)m
-(ys)f(an)i(imp)s(ortan)m(t)e(role)h(in)f(the)h(attac)m(ks.)61
-b(It)36 b(is)f(wise)h(to)h(mo)m(v)m(e)g(the)g(king)150
-2094 y(a)m(w)m(a)m(y)h(from)d(the)h(area)g(where)f(the)h(initial)d
-(\014gh)m(ts)j(will)d(b)s(e)i(and)g(b)s(oth)g(pla)m(y)m(ers)h(act)h
-(according)e(to)i(the)150 2204 y(Shogi)29 b(pro)m(v)m(erb)i(\\k)m(eep)g
-(the)g(ro)s(ok)f(and)g(king)f(apart".)42 b(])275 2339
-y(7.)f(K7h)30 b(K7b)g(8.)41 b(P5f)30 b(P5d)g(9.)41 b(G4i-5h)31
-b(G4a-5b)150 2449 y([)g(Both)g(pla)m(y)m(ers)f(use)g(their)f(second)i
-(gold)f(general)g(to)h(build)d(their)h(castle.)41 b(])275
-2583 y(10.)g(S6h)150 2693 y([)25 b(In)f(itself)f(this)g(mo)m(v)m(e)j
-(is)e(not)h(bad.)38 b(Ho)m(w)m(ev)m(er,)28 b(it)c(will)e(b)s(ecome)j
-(clear)g(that)g(blac)m(k)f(plans)f(a)i(quic)m(k)g(attac)m(k)150
-2803 y(and)30 b(in)f(that)i(case)g(it)f(is)g(wiser)f(to)i(omit)f(this)f
-(mo)m(v)m(e.)42 b(])275 2937 y(10...)g(S5c)30 b(11.)42
-b(P1f)30 b(P1d)150 3047 y([)38 b(The)e(adv)-5 b(ance)38
-b(of)g(the)f(edge)h(pa)m(wns)f(m)m(ust)g(b)s(e)g(timed)g(v)m(ery)g(w)m
-(ell.)61 b(The)37 b(remark)g(at)h(blac)m(k's)f(ten)m(th)150
-3157 y(mo)m(v)m(e)i(applies)c(here)i(to)s(o:)54 b(this)36
-b(mo)m(v)m(e)j(is)d(go)s(o)s(d)h(if)f(blac)m(k)h(w)m(an)m(ts)h(to)g
-(pla)m(y)e(a)i(slo)m(w)e(game,)k(b)s(ecause)d(it)150
-3266 y(eliminates)29 b(a)i(future)e(B1e.)42 b(])275 3401
-y(12.)f(P4f)31 b(K8b)e(13.)42 b(N3g)31 b(S7b)150 3511
-y([)25 b(Blac)m(k)g(dev)m(elops)f(his)f(knigh)m(t)h(in)f(order)h(to)h
-(start)g(an)g(attac)m(k)h(o)m(v)m(er)g(the)f(second,)h(third)c(and)i
-(fourth)g(\014les.)150 3620 y(White)36 b(strengthens)f(his)g(king's)g
-(p)s(osition)f(and)h(a)m(w)m(aits)i(the)f(attac)m(k.)60
-b(He)37 b(aims)e(at)i(a)f(coun)m(terattac)m(k)150 3730
-y(as)c(so)s(on)g(as)g(blac)m(k)g(has)g(brok)m(en)g(through)f(in)m(to)h
-(the)g(white)f(camp.)46 b(Probably)30 b(white's)i(breakthrough)150
-3839 y(will)e(tak)m(e)k(place)e(later,)i(but)d(he)i(has)f(go)s(o)s(d)g
-(comp)s(ensation)g(in)f(the)i(form)f(of)h(a)f(stronger)h(castle.)48
-b(This)150 3949 y(theme)31 b(o)s(ccurs)f(v)m(ery)h(often)f(in)f(static)
-i(ro)s(ok)g(v)m(ersus)f(ranging)f(ro)s(ok)i(games.)41
-b(])275 4084 y(14.)g(P4e)31 b(R4b)150 4194 y([)c(Blac)m(k)h(starts)f
-(his)e(attac)m(k)30 b(and)c(white)g(puts)g(up)g(a)h(v)m(ery)g(passiv)m
-(e)g(defence.)40 b(His)26 b(ro)s(ok)h(has)f(a)h(hard)f(task)150
-4303 y(no)m(w)34 b(to)h(p)s(enetrate)g(the)f(blac)m(k)h(p)s(osition.)50
-b(Moreo)m(v)m(er,)38 b(he)c(blo)s(c)m(ks)g(his)e(o)m(wn)j(bishop.)50
-b(It)34 b(seems)h(m)m(uc)m(h)150 4413 y(b)s(etter)29
-b(to)h(start)g(a)g(coun)m(terattac)m(k)i(with)c(14...)42
-b(P3e,)30 b(later)f(to)h(b)s(e)f(follo)m(w)m(ed)g(b)m(y)g(B2b,)h(B5a)g
-(or)g(Bx4d)f(in)150 4522 y(order)h(to)h(use)f(his)f(ro)s(ok)h(more)h
-(activ)m(ely)-8 b(.)41 b(])275 4657 y(15.)g(Px4d)30 b(Sx4d)g(16.)42
-b(P*4e)31 b(S5c)150 4767 y([)j(16...)52 b(Sx4e)34 b(is)f(more)g(activ)m
-(e.)52 b(A)34 b(silv)m(er)e(general)i(is)f(normally)f(more)i(v)-5
-b(aluable)32 b(than)h(a)h(knigh)m(t,)h(but)150 4876 y(white)f(gets)h(t)
-m(w)m(o)h(pa)m(wns)e(in)f(hand)h(and)g(blac)m(k)g(none,)i(while)d(the)i
-(knigh)m(t)f(migh)m(t)g(come)h(in)f(handy)f(for)150 4986
-y(white)c(to)s(o.)42 b(])275 5121 y(17.)f(Bx3c)p Fg(+)31
-b Fj(Nx3c)h(18.)41 b(P2d)30 b(Px2d)150 5230 y([)38 b(Blac)m(k)i
-(threatens)e(to)h(break)f(through)g(and)g(white)f(has)h(to)h(consider)e
-(taking)h(the)h(pa)m(wn)f(on)g(2d)g(or)150 5340 y(starting)28
-b(a)h(coun)m(terattac)m(k)j(with)27 b(Nx4e.)41 b(If)28
-b(he)g(c)m(ho)s(oses)i(the)f(latter,)g(blac)m(k)g(can)f(pla)m(y)g(Px2c)
-p Fg(+)h Fj(follo)m(w)m(ed)p eop
-%%Page: 21 23
-21 22 bop 150 -116 a Fj(Chapter)30 b(2:)41 b(Ab)s(out)30
-b(the)g(game)i(of)e(shogi)2061 b(21)150 299 y(b)m(y)33
-b Fg(+)p Fj(P3c.)48 b(The)33 b(disadv)-5 b(an)m(tage)33
-b(is)f(the)h(blac)m(k)g(\\tokin")g(\(=promoted)g(pa)m(wn\))g(that)g
-(white)f(will)e(get)k(in)150 408 y(his)k(camp;)44 b(the)39
-b(adv)-5 b(an)m(tage)41 b(is)d(that)i(it)f(will)d(cost)k(blac)m(k)f(t)m
-(w)m(o)i(more)e(mo)m(v)m(es)i(to)e(promote)h(his)e(ro)s(ok.)150
-518 y(Because)32 b(white)d(did)f(not)j(trust)e(that)i(the)g(result)e
-(after)h(engaging)h(in)e(a)i(\\semeai")g(\(=m)m(utual)e(attac)m(k\))150
-628 y(with)g(18...Nx4e)j(w)m(ould)d(giv)m(e)h(a)g(p)s(ositiv)m(e)f
-(result,)g(he)h(captured)f(the)h(pa)m(wn)f(on)h(2d.)41
-b(Making)29 b(the)h(righ)m(t)150 737 y(decision)c(in)g(momen)m(ts)i
-(lik)m(e)f(this)f(often)i(mak)m(es)g(the)g(di\013erence)f(b)s(et)m(w)m
-(een)h(a)g(win)d(and)i(a)h(loss:)39 b(miss)26 b(one)150
-847 y(attac)m(king)39 b(c)m(hance)f(and)f(y)m(ou)g(will)d(b)s(e)j
-(forced)g(to)h(defend)e(the)i(whole)e(game)i(un)m(til)d(the)j(una)m(v)m
-(oidable)150 956 y(defeat;)i(on)c(the)g(other)g(hand,)h(an)e(unsound)f
-(attac)m(k)39 b(can)d(destro)m(y)g(all)f(\\a)5 b(ji")37
-b(\(=p)s(oten)m(tial,)g(meaning)150 1066 y(p)s(ossibilities,)26
-b(threats\))31 b(without)f(getting)h(an)m(ything)f(in)f(return.)39
-b(])275 1200 y(19.)i(Rx2d)30 b(Nx4e)i(20.)41 b(Nx4e)31
-b(Rx4e)h(21.)41 b(R2a)p Fg(+)31 b Fj(P*4g)150 1310 y([)k(No)m(w)h(it)f
-(b)s(ecomes)g(clear)g(wh)m(y)g(blac)m(k's)g(10.)56 b(S6h)35
-b(w)m(as)g(not)h(go)s(o)s(d.)54 b(Had)36 b(this)e(mo)m(v)m(e)i(b)s(een)
-f(omitted,)150 1420 y(then)f(white)f(w)m(ould)g(not)i(ha)m(v)m(e)h(had)
-d(the)i(time)f(to)h(pla)m(y)f(13...)54 b(S7b)33 b(and)h(after)h(R2a)p
-Fg(+)g Fj(the)f(gold)g(on)g(6a)150 1529 y(w)m(ould)25
-b(hang.)40 b(Th)m(us)25 b(blac)m(k)i(w)m(ould)e(ha)m(v)m(e)j(k)m(ept)f
-(\\sen)m(te")i(\(=initiativ)m(e\).)38 b(Instead)27 b(of)g(21...)40
-b(P*4g,)29 b(B*6d)150 1639 y(is)h(a)h(v)m(ery)g(go)s(o)s(d)g(mo)m(v)m
-(e,)h(b)s(ecause)f(after)h(22.)42 b(P*2h)31 b(blac)m(k)g(do)s(es)g(not)
-g(ha)m(v)m(e)h(a)f(pa)m(wn)f(in)g(hand)f(an)m(ymore)150
-1748 y(and)g(he)h(is)f(b)s(eing)g(threatened)h(with)f(the)h(anno)m
-(ying)g(22...)42 b(N*4f)31 b(23.)41 b(G5g)31 b(N3h)p
-Fg(+)f Fj(24.)42 b(S4g)30 b Fg(+)p Fj(N4h)g(also.)150
-1858 y(Blac)m(k)j(can)g(also)f(coun)m(ter)h(21...)47
-b(B*6d)33 b(with)e(22.)47 b(N*3g.)h(White)32 b(w)m(ould)f(then)h(reply)
-f(with)g(22...)47 b(R4b)150 1968 y(23.)40 b(B*3c)29 b(P*4g)e(24.)41
-b(Bx4b)p Fg(+)26 b Fj(Sx4b.)39 b(The)26 b(white)g(ro)s(ok)h(has)f(pla)m
-(y)m(ed)h(its)f(role)g(and)g(instead)g(of)g(sp)s(ending)150
-2077 y(mo)m(v)m(es)k(on)f(sa)m(ving)g(it)g(white)f(starts)h(to)h
-(scatter)h(blac)m(k's)e(defences)g(b)m(y)g(successiv)m(e)g(pa)m(wn)g
-(drops)f(on)h(the)150 2187 y(fourth)i(\014le:)42 b(25.)j(Gx4g)33
-b(P*4f)f(26.)46 b(G5g)32 b(N*6e)h(27.)46 b(G5h)32 b(P4g)p
-Fg(+)g Fj(28.)45 b(Gx4g)33 b(P*4f.)45 b(This)29 b(analysis)i(w)m(as)150
-2296 y(pro)m(vided)k(b)m(y)h(Kato)i(Hifumi,)d(9-dan)i(professional)e
-(\(the)i(highest)e(regular)h(grade\).)60 b(Destro)m(ying)37
-b(the)150 2406 y(coherence)25 b(of)g(the)f(enem)m(y)h(pieces)f(\(their)
-g(shap)s(e\))g(b)m(y)g(dropping)e(pa)m(wns)i(is)f(one)i(of)g(the)f
-(most)h(imp)s(ortan)m(t)150 2516 y(Shogi)k(tec)m(hniques.)41
-b(With)30 b(the)g(actual)h(mo)m(v)m(e)h(21...)42 b(P*4g)31
-b(white)f(missed)f(a)i(go)s(o)s(d)f(c)m(hance.)42 b(])275
-2650 y(22.)f(Sx4g)31 b(P*4f)g(23.)41 b(B*3g)32 b(Px4g)p
-Fg(+)f Fj(24.)42 b Fg(+)p Fj(Rx6a)30 b Fg(+)p Fj(Px3g)150
-2760 y([)38 b(23.)64 b(B*3g)40 b(seems)e(p)s(oin)m(tless,)g(but)g(a)g
-(closer)g(lo)s(ok)f(rev)m(eals)i(that)f(it)g(is)f(actually)g(quite)g
-(mean.)64 b(On)150 2869 y(mo)m(v)m(e)38 b(24)f(white)e(cannot)i
-(capture)g(blac)m(k's)f(\\Ryu")g(\(=dragon)h(=promoted)f(ro)s(ok\))g
-(with)f(his)g(silv)m(er:)150 2979 y(24...)53 b(Sx6a)35
-b(25.)53 b(N*7d)34 b(K7b)g(26.)53 b(G*8b)34 b(mate.)53
-b(By)35 b(attac)m(king)g(the)g(fron)m(t)f(of)g(the)h(white)e(castle)i
-(and)150 3088 y(threatening)26 b(to)h(mate)g(him)e(there,)i(blac)m(k)g
-(has)f(the)g(c)m(hance)h(to)g(break)f(do)m(wn)g(the)h(white)e(defences)
-h(from)150 3198 y(the)31 b(side.)39 b(])275 3333 y(25.)i
-Fg(+)p Fj(Rx5b)30 b(S*6b)150 3442 y([)h(Here)h(25...)44
-b(B*4d)32 b(w)m(ould)e(b)s(e)g(m)m(uc)m(h)h(b)s(etter,)h(b)s(ecause)f
-(it)g(is)f(defensiv)m(e)g(and)h(attac)m(king)h(at)g(the)g(same)150
-3552 y(time.)44 b(After)32 b(e.g.)45 b(26.)g(G*4c)34
-b(Bx9i)p Fg(+)d Fj(27.)45 b(Gx5c)33 b(blac)m(k)e(threatens)h(28.)46
-b Fg(+)p Fj(Rx7b)31 b(Kx7b)g(29.)45 b(S*6a)32 b(K8b)150
-3661 y(30.)44 b(S*7a)33 b(Kx7a)e(31.)45 b(G*7b)32 b(mate.)44
-b(White)31 b(is)g(one)g(mo)m(v)m(e)i(quic)m(k)m(er,)f(ho)m(w)m(ev)m
-(er.)45 b(He)32 b(has)f(the)g(follo)m(wing)150 3771 y(b)s(eautiful)d
-(\\tsume")k(\(mating)f(sequence)h(where)e(ev)m(ery)i(mo)m(v)m(e)g(is)e
-(c)m(hec)m(k\):)44 b(27...)g(N*8f)32 b(28.)43 b(Px8f)31
-b(S*8g)150 3880 y(29.)53 b(Kx8g)35 b(B*9h)g(30.)54 b(K7h)34
-b(Bx8i)p Fg(+)g Fj(31.)53 b(K8g)35 b Fg(+)p Fj(B8i-8h)f(32.)54
-b(K9f)34 b(L*9e)h(mate.)54 b(This)32 b(illustrates)h(the)150
-3990 y(sharpness)c(of)h(Shogi:)40 b(one)31 b(mo)m(v)m(e)h(can)e(mak)m
-(e)i(the)e(di\013erence)g(b)s(et)m(w)m(een)h(winning)d(and)h(losing.)40
-b(])275 4125 y(26.)h(P*4f)31 b(Rx4f)150 4234 y([)37 b(This)d(mo)m(v)m
-(e)39 b(eliminates)34 b(white's)i(last)h(c)m(hances.)60
-b(26...)g(R4b)37 b(27.)60 b Fg(+)p Fj(Rx4b)36 b(Sx4b)g(28.)60
-b(R*4a)38 b(seems)150 4344 y(anno)m(ying,)33 b(but)e(after)i(28...)48
-b(B*3c)34 b(29.)48 b(S7g)33 b(B*3b)g(white)e(wins)g(the)h(ro)s(ok)h
-(and)e(with)g(his)g(\\tokin")i(on)150 4453 y(3g)e(there)g(still)d(is)h
-(some)i(hop)s(e.)40 b(])275 4588 y(27.)h(N*6e)32 b Fg(+)p
-Fj(P4g)150 4697 y([)j(White)g(cannot)h(defend)e(an)m(ymore,)j(so)f(he)f
-(starts)g(a)h(desp)s(erate)f(attac)m(k.)57 b(Blac)m(k)36
-b(do)s(es)f(not)h(lose)f(the)150 4807 y(righ)m(t)30 b(trac)m(k,)i(ho)m
-(w)m(ev)m(er.)42 b(])275 4941 y(28.)52 b(Nx5c)p Fg(+)35
-b(+)p Fj(Px5h)e(29.)52 b Fg(+)p Fj(Nx6b)34 b Fg(+)p Fj(Px6h)g(30.)52
-b(Gx6h)34 b(N*8f)h(31.)52 b(Px8f)34 b(B*6i)h(32.)52 b(Gx6i)34
-b(R4h)p Fg(+)g Fj(33.)150 5051 y(N*6h)d Fg(+)p Fj(Rx6h)f(34.)41
-b(Gx6h)31 b(S*8g)g(35.)42 b(Kx8g)31 b(N*9e)g(36.)42 b(K7h)30
-b(Resigns)150 5161 y([)h(White)f(resigns)f(here,)i(b)s(ecause)f(after)h
-(36...)42 b(B*8g)32 b(27.)41 b(K7g)31 b(his)e(attac)m(k)k(has)d(p)s
-(etered)g(out.)41 b(])p eop
-%%Page: 22 24
-22 23 bop 150 -116 a Fj(22)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y Fk(2.3)68 b(Mating)46 b(problems)275 491 y Fj(One)29
-b(go)s(o)s(d)h(w)m(a)m(y)h(to)f(impro)m(v)m(e)g(at)h(shogi)e(is)g(to)i
-(solv)m(e)f(mating)g(problems.)39 b(There)29 b(are)i(sev)m(eral)f(t)m
-(yp)s(es)150 601 y(of)38 b(these)h(problems,)f(but)f(the)i(most)f
-(common)g(is)f(called)h(a)g(\\tsume-shogi")h(problem,)f(or)g(\\tsume")
-150 711 y(problem)26 b(for)i(short.)40 b(In)27 b(a)i(tsume)e(problem,)g
-(all)g(pieces)h(that)h(are)f(not)g(on)g(the)h(b)s(oard)e(are)h(assumed)
-f(to)150 820 y(b)s(e)h(in)f(the)i(opp)s(onen)m(t's)f(hand)g(\(except)i
-(for)e(y)m(our)h(King,)f(whic)m(h)f(is)h(usually)e(not)j(sho)m(wn\).)40
-b(Ev)m(ery)28 b(mo)m(v)m(e)150 930 y(y)m(ou)33 b(mak)m(e)g(m)m(ust)g(b)
-s(e)f(c)m(hec)m(k)i(un)m(til)c(the)j(\014nal)e(c)m(hec)m(kmate.)50
-b(Y)-8 b(our)33 b(opp)s(onen)m(t)f(ma)m(y)h(pla)m(y)f(an)m(y)h(piece)f
-(on)150 1039 y(the)37 b(b)s(oard)e(or)i(drop)e(an)m(y)i(of)g(his)e
-(pieces)h(in)f(hand)g(in)h(order)g(to)h(prev)m(en)m(t)g(the)g(mate.)60
-b(In)35 b(a)i(prop)s(erly)150 1149 y(constructed)32 b(tsume)g(problem,)
-g(all)f(of)h(y)m(our)g(pieces)g(on)g(the)h(b)s(oard)e(and)h(in)e(hand)i
-(m)m(ust)g(b)s(e)f(essen)m(tial)150 1259 y(to)i(the)g(solution.)46
-b(One)32 b(consequence)h(of)g(this)e(is)h(that)h(all)e(of)i(y)m(our)g
-(pieces)f(in)f(hand)h(m)m(ust)g(b)s(e)g(pla)m(y)m(ed)150
-1368 y(during)38 b(the)h(solution.)68 b(There)39 b(should)f(only)h(b)s
-(e)g(one)h(correct)h(solution)d(for)i(the)g(giv)m(en)f(n)m(um)m(b)s(er)
-g(of)150 1478 y(mo)m(v)m(es.)59 b(Tsume)36 b(problems)e(use)i
-(Japanese-st)m(yle)h(mo)m(v)m(e)g(n)m(um)m(b)s(ering;)g(th)m(us,)h(a)e
-(problem)f(where)h(y)m(ou)150 1587 y(mo)m(v)m(e)e(\(and)f(giv)m(e)h(c)m
-(hec)m(k\),)i(y)m(our)c(opp)s(onen)m(t)h(mo)m(v)m(es,)i(and)e(y)m(ou)g
-(mo)m(v)m(e)i(to)e(giv)m(e)h(c)m(hec)m(kmate)h(is)d(called)h(a)150
-1697 y(three-mo)m(v)m(er.)42 b(Here)31 b(is)f(a)g(really)g(trivial)e
-(three-mo)m(v)m(er:)293 1916 y Fg(3)191 b(2)f(1)150 2026
-y(----------------+)198 2135 y(|)g(|)h(|)g(|)95 b(a)150
-2245 y(----------------+)198 2355 y(|)190 b(|)h(|)47
-b(wK)h(|)95 b(b)150 2464 y(----------------+)198 2574
-y(|)190 b(|)h(|)g(|)95 b(c)150 2683 y(----------------+)198
-2793 y(|)47 b(bN)g(|)191 b(|)g(|)95 b(d)150 2902 y(----------------+)
-198 3012 y(|)190 b(|)h(|)g(|)95 b(e)150 3122 y(----------------+)198
-3231 y(|)190 b(|)48 b(bN)f(|)191 b(|)95 b(f)150 3341
-y(----------------+)150 3450 y(Black)46 b(in)i(hand:)94
-b(2G)275 3794 y Fj(Here,)38 b(Blac)m(k)f(pla)m(ys)f(G*2b,)j(White)d
-(pla)m(ys)g(K1c,)i(and)e(Blac)m(k)h(pla)m(ys)f(G*1d)h(mate.)59
-b(More)37 b(t)m(ypical)150 3904 y(tsume)28 b(problems)f(range)i(from)g
-(5)g(mo)m(v)m(es)h(to)f(arbitrarily)d(high)h(n)m(um)m(b)s(ers)g(of)i
-(mo)m(v)m(es,)i(and)d(they)h(can)g(b)s(e)150 4013 y(quite)k
-(brain-busting.)49 b(Tsume)33 b(problems)f(ma)m(y)j(seem)f
-(arti\014cial,)g(but)f(in)g(the)h(closing)f(stages)j(of)e(the)150
-4123 y(game)d(where)e(b)s(oth)h(pla)m(y)m(ers)g(ha)m(v)m(e)h(a)f(lot)g
-(of)g(pieces)g(in)f(hand,)g(it)h(is)f(often)h(necessary)g(to)h(giv)m(e)
-g(c)m(hec)m(k)g(at)150 4232 y(ev)m(ery)h(mo)m(v)m(e,)h(or)e(else)f(y)m
-(our)h(opp)s(onen)m(t)g(will)d(start)k(a)f(coun)m(terattac)m(k)j(and)d
-(will)d(mate)k(y)m(ou)f(b)s(efore)g(y)m(ou)150 4342 y(mate)25
-b(him.)37 b(A)23 b(tsume)h(problem)e(is)h(a)h(w)m(orst-case)i(scenario)
-d(for)h(the)g(attac)m(k)m(er:)40 b(y)m(ou)24 b(ha)m(v)m(e)h(to)f(mate)h
-(y)m(our)150 4452 y(opp)s(onen)m(t)k(ev)m(en)h(though)f(he)g(has)g(ev)m
-(ery)h(piece)f(not)h(on)f(the)g(b)s(oard)f(in)g(hand,)h(whic)m(h)f
-(means)h(y)m(ou)h(ha)m(v)m(e)150 4561 y(to)d(dev)m(elop)g(sharp)e
-(attac)m(king)j(skills.)37 b(Man)m(y)27 b(more)f(tsume)h(problems)d
-(can)j(b)s(e)f(found)f(on)h(the)h(in)m(ternet;)150 4671
-y(I)36 b(particularly)f(recommend)h(P)m(atric)m(k)i(Da)m(vin's)f
-(\\Shogi)f(Nexus")h(\(see)h(Chapter)e(5)h([References)h(and)150
-4780 y(links],)29 b(page)i(41\).)p eop
-%%Page: 23 25
-23 24 bop 150 -116 a Fj(Chapter)30 b(2:)41 b(Ab)s(out)30
-b(the)g(game)i(of)e(shogi)2061 b(23)150 299 y Fk(2.4)68
-b(Shogi)45 b(v)-7 b(arian)l(ts)275 500 y Fj(Sev)m(eral)39
-b(historical)e(v)-5 b(arian)m(ts)39 b(of)g(shogi)g(exist.)67
-b(Most)40 b(of)f(these)h(w)m(ere)f(in)m(v)m(en)m(ted)h(b)s(efore)e(mo)s
-(dern)150 610 y(shogi)29 b(\(in)f(some)h(cases)h(h)m(undreds)d(of)i(y)m
-(ears)h(b)s(efore\),)g(are)f(m)m(uc)m(h)g(larger)g(than)g(mo)s(dern)f
-(shogi)g(and)h(are)150 719 y(not)38 b(pla)m(y)m(ed)g(with)e(drops.)62
-b(Th)m(us,)39 b(in)e(man)m(y)h(w)m(a)m(ys)g(they)g(are)h(really)d(more)
-i(lik)m(e)g(gian)m(t)g(c)m(hess)g(games)150 829 y(than)g(lik)m(e)g(mo)s
-(dern)f(shogi.)65 b(The)38 b(only)f(one)i(of)g(these)g(games)g(to)g(ha)
-m(v)m(e)h(surviv)m(ed)d(in)g(Japan)h(is)g(Ch)m(u)150
-938 y(\(middle\))e(shogi,)i(whic)m(h)e(is)g(still)g(pla)m(y)m(ed)h(a)g
-(little)g(bit.)60 b(Thanks)36 b(to)i(the)f(e\013orts)h(of)g(George)h
-(Ho)s(dges)150 1048 y(and)c(John)g(F)-8 b(airbairn)34
-b(of)i(the)g(Shogi)f(Asso)s(ciation)g(\(t)m(w)m(o)i(British)d(shogi)h
-(en)m(th)m(usiasts\),)j(these)e(games)150 1157 y(w)m(ere)h(resurrected)
-g(and)f(rules)g(and)g(sets)h(for)g(them)g(can)g(still)d(b)s(e)j(purc)m
-(hased)f(from)g(George)j(Ho)s(dges)150 1267 y(\(see)31
-b(Chapter)e(5)h([References)h(and)e(links],)f(page)j(41\).)41
-b(I)30 b(hop)s(e)f(to)h(ev)m(en)m(tually)g(extend)g(GNU)g(shogi)g(so)
-150 1377 y(that)f(it)f(can)g(pla)m(y)g(at)h(least)g(some)g(of)f(these)h
-(games.)41 b(There)28 b(are)h(also)f(sev)m(eral)h(non-historical)d(v)-5
-b(arian)m(ts)150 1486 y(of)33 b(shogi;)h(I)e(don't)h(kno)m(w)g(m)m(uc)m
-(h)g(ab)s(out)g(them)g(but)f(y)m(ou)h(can)g(\014nd)e(information)h(ab)s
-(out)g(them)h(on)g(the)150 1596 y(in)m(ternet)d(\(see)h(Chapter)f(5)h
-([References)g(and)f(links],)f(page)i(41\).)275 1739
-y(The)e(historical)g(v)-5 b(arian)m(ts)30 b(include:)199
-1958 y(1.)61 b(T)-8 b(ori)32 b(\(bird\))f(shogi,)h(pla)m(y)m(ed)h(on)f
-(a)h(7x7)g(b)s(oard)e(with)g(32)i(pieces)g(in)e(all;)h(this)f(is)h(the)
-g(only)g(v)-5 b(arian)m(t)330 2068 y(that)31 b(is)e(kno)m(wn)h(to)h(ha)
-m(v)m(e)h(b)s(een)e(pla)m(y)m(ed)g(with)f(drops.)199
-2206 y(2.)61 b(W)-8 b(a)32 b(shogi,)e(pla)m(y)m(ed)h(on)g(an)f(11x11)j
-(b)s(oard)d(with)f(54)j(pieces.)41 b(This)29 b(game)j(can)f(b)s(e)f
-(pla)m(y)m(ed)h(with)e(or)330 2316 y(without)34 b(drops)g(but)h(the)g
-(historical)f(evidence)h(fa)m(v)m(ors)h(the)g(view)e(that)i(it)f(w)m
-(as)h(pla)m(y)m(ed)f(without)330 2425 y(drops.)57 b(Ho)m(w)m(ev)m(er,)
-40 b(most)c(p)s(eople)f(who)h(ha)m(v)m(e)h(tried)f(it)f(claim)g(it)h
-(is)f(a)i(m)m(uc)m(h)f(b)s(etter)g(game)h(with)330 2535
-y(drops,)29 b(b)s(eing)g(ev)m(en)j(more)e(in)m(tricate)g(than)h
-(standard)e(shogi.)199 2674 y(3.)61 b(Ch)m(u)30 b(\(middle\))f(shogi,)i
-(pla)m(y)m(ed)f(on)h(a)g(12x12)i(b)s(oard)d(with)f(92)j(pieces.)42
-b(This)29 b(w)m(as)i(\(and)f(is\))g(b)m(y)h(far)330 2783
-y(the)36 b(most)f(p)s(opular)f(of)h(the)h(v)-5 b(arian)m(ts,)37
-b(and)e(has)g(21)h(di\013eren)m(t)f(kinds)f(of)h(pieces)g(in)g(the)g
-(starting)330 2893 y(line-up)28 b(alone)i(\(along)h(with)e(sev)m(eral)h
-(others)h(that)f(app)s(ear)g(up)s(on)f(promotion\).)40
-b(Unlik)m(e)29 b(mo)s(dern)330 3003 y(shogi,)h(there)g(are)g(a)h
-(tremendous)e(n)m(um)m(b)s(er)g(of)h(ranging)f(pieces)h(and)f(the)i
-(game)g(is)e(de\014nitely)f(not)330 3112 y(pla)m(y)m(ed)j(with)f
-(drops.)42 b(There)30 b(is)g(also)h(an)g(amazing)h(piece)f(called)f
-(the)h(Lion)f(whic)m(h)g(has)h(a)g(double)330 3222 y(king)36
-b(mo)m(v)m(e)j(and)d(can)i(capture)f(t)m(w)m(o)i(pieces)d(at)i(once!)62
-b(Ch)m(u)36 b(shogi)h(has)g(a)g(small)f(but)g(fanatical)330
-3331 y(follo)m(wing,)29 b(some)i(of)f(whom)g(consider)f(it)h(b)s(etter)
-h(than)f(mo)s(dern)f(shogi.)199 3470 y(4.)61 b(Dai)40
-b(\(great\))h(shogi,)h(pla)m(y)m(ed)d(on)h(a)f(15x15)j(b)s(oard)c(with)
-g(130)j(pieces.)68 b(Other)39 b(than)h(the)f(larger)330
-3580 y(b)s(oard,)30 b(this)f(game)i(is)f(v)m(ery)g(similar)e(to)j(Ch)m
-(u)f(shogi.)199 3718 y(5.)61 b(T)-8 b(enjiku)26 b(\(exotic\))j(shogi,)e
-(pla)m(y)m(ed)g(on)h(a)f(16x16)i(b)s(oard)e(with)f(176)i(pieces.)40
-b(This)25 b(game)j(is)f(p)s(ossibly)330 3828 y(the)35
-b(most)g(complex)f(tactical)i(game)g(in)d(existence.)54
-b(There)35 b(are)g(man)m(y)g(astoundingly)d(p)s(o)m(w)m(erful)330
-3938 y(pieces,)c(including)c(one)k(\(the)g(Fire)f(Demon\))i(that)f(can)
-g(capture)f(up)g(to)h(eigh)m(t)g(opp)s(osing)e(pieces)h(in)330
-4047 y(a)j(single)e(mo)m(v)m(e!)42 b(Despite)30 b(the)f(size)h(of)g
-(the)f(game,)i(c)m(hec)m(kmates)h(can)e(o)s(ccur)f(v)m(ery)h(suddenly)d
-(\(and)330 4157 y(often)34 b(v)m(ery)h(early)f(on\))g(if)f(one)h(pla)m
-(y)m(er)g(mak)m(es)h(a)g(wrong)e(mo)m(v)m(e.)53 b(T)-8
-b(enjiku)33 b(also)h(has)g(a)g(small)f(but)330 4266 y(fanatical)27
-b(follo)m(wing,)f(one)h(of)g(whom)f(\(Colin)g(Adams\))h(has)f(written)g
-(a)h(b)s(o)s(ok)g(on)f(the)h(game)h(whic)m(h)330 4376
-y(is)h(a)m(v)-5 b(ailable)30 b(for)g(do)m(wnload)g(at)h
-Fg(http://www.colina.demon.)o(co.u)o(k/te)o(nji)o(ku.h)o(tml)o
-Fj(.)199 4515 y(6.)61 b(Dai-dai)39 b(\(great-great\))k(shogi,)e(pla)m
-(y)m(ed)e(on)g(a)h(17x17)h(b)s(oard)d(with)g(192)j(pieces.)67
-b(The)38 b(op)s(ening)330 4624 y(setup)29 b(alone)g(has)h(64)g
-(di\013eren)m(t)f(kinds)e(of)j(pieces!)40 b(This)28 b(game)i(and)f(the)
-h(larger)f(ones)h(that)g(follo)m(w)330 4734 y(sound)35
-b(prett)m(y)j(outlandish,)e(but)g(they)h(ha)m(v)m(e)h(actually)e(b)s
-(een)g(pla)m(y)m(ed;)k(a)d(game)h(of)e(Dai-dai)h(can)330
-4843 y(supp)s(osedly)28 b(b)s(e)h(pla)m(y)m(ed)i(in)e(ab)s(out)h(12)h
-(hours.)199 4982 y(7.)61 b(Mak)-5 b(a-dai-dai)33 b
-(\(great-great-great\))k(shogi,)c(pla)m(y)m(ed)g(on)g(a)g(19x19)h(b)s
-(oard)e(with)f(192)j(pieces.)47 b(F)-8 b(or)330 5092
-y(those)31 b(for)f(whom)g(Dai-dai)g(shogi)f(is)h(just)g(to)s(o)h(small)
-e(:-\))199 5230 y(8.)61 b(T)-8 b(ai)35 b(\(grand\))g(shogi,)h(pla)m(y)m
-(ed)f(on)g(a)h(25x25)h(b)s(oard)d(with)g(354)i(pieces!)55
-b(Un)m(til)34 b(recen)m(tly)-8 b(,)38 b(this)c(w)m(as)330
-5340 y(though)m(t)d(to)g(b)s(e)f(the)g(biggest)h(c)m(hess)g(game)g(ev)m
-(er)g(devised,)f(but)f(no)m(w)i(there)f(is...)p eop
-%%Page: 24 26
-24 25 bop 150 -116 a Fj(24)2734 b(GNU)31 b(Shogi)f(man)m(ual)199
-299 y(9.)61 b(Ky)m(oku)36 b(tai)g(\(extremely)h(grand?\))57
-b(shogi,)37 b(pla)m(y)m(ed)f(on)g(a)g(36x36)i(b)s(oard)d(with)g(402)i
-(pieces.)57 b(The)330 408 y(rules)22 b(for)g(this)g(ha)m(v)m(e)j(just)d
-(b)s(een)h(unearthed)f(in)g(an)h(old)f(Japanese)h(b)s(o)s(ok.)38
-b(Hop)s(efully)21 b(someone)j(will)330 518 y(so)s(on)36
-b(organize)h(a)f(p)s(ostal)g(Ky)m(oku)g(tai)g(shogi)g(c)m(hampionship;)
-h(ma)m(yb)s(e)f(their)f(distan)m(t)h(ancestors)330 628
-y(could)29 b(\014nish)f(it)i(:-\))330 768 y(It)40 b(is)g(though)m(t)h
-(that)f(the)h(really)e(h)m(uge)i(games)g(\(Dai-dai)f(and)g(up\))f(w)m
-(ere)i(nev)m(er)g(really)e(pla)m(y)m(ed)330 877 y(to)k(an)m(y)f
-(signi\014can)m(t)f(exten)m(t)i(\(gee,)j(w)m(onder)c(wh)m(y?\))75
-b(and)41 b(w)m(ere)h(devised)f(merely)g(so)h(that)h(the)330
-987 y(creators)38 b(could)e(ha)m(v)m(e)j(the)e(fun)f(of)h(in)m(v)m(en)m
-(ting)g(enormous)g(games,)j(amazing)d(their)g(friends)e(and)330
-1096 y(confounding)27 b(their)h(enemies.)40 b(Ho)m(w)m(ev)m(er,)32
-b(the)d(games)h(up)d(to)j(T)-8 b(enjiku)28 b(shogi)g(at)i(least)f(app)s
-(ear)f(to)330 1206 y(b)s(e)i(quite)g(pla)m(y)m(able,)g(assuming)f(one)h
-(has)h(the)f(time.)150 1521 y Fk(2.5)68 b(Di\013erences)46
-b(b)t(et)l(w)l(een)g(shogi)g(and)f(c)l(hess)275 1725
-y Fj(Some)22 b(di\013erences)g(b)s(et)m(w)m(een)h(shogi)f(and)g(in)m
-(ternational)g(c)m(hess)h(ha)m(v)m(e)g(b)s(een)f(men)m(tioned)g
-(elsewhere)g(in)150 1834 y(this)h(do)s(cumen)m(t;)j(I)e(summarize)f
-(them)h(here)f(for)h(p)s(eople)f(who)h(are)g(in)m(terested)g(in)f(game)
-i(comparisons.)37 b(I)150 1944 y(w)m(on't)27 b(try)g(to)g(deal)g(with)e
-(the)i(thorn)m(y)f(question)g(of)h(whic)m(h)f(game)h(is)f(\\b)s(etter")
-i(although)e(m)m(y)h(bias)e(ma)m(y)150 2053 y(ha)m(v)m(e)37
-b(already)e(come)h(through)f(:-\))h(In)f(fact,)j(the)d(drop)g(rule)f
-(mak)m(es)i(the)g(t)m(w)m(o)g(games)h(so)e(di\013eren)m(t)g(in)150
-2163 y(c)m(haracter)28 b(that)g(arguing)e(o)m(v)m(er)i(whic)m(h)d(game)
-j(is)e(b)s(etter)h(is)f(lik)m(e)g(comparing)g(apples)g(to)h(oranges)g
-(\(y)m(ou'd)150 2273 y(b)s(e)43 b(b)s(etter)g(o\013)h(comparing)f(c)m
-(hess)g(to)i(Ch)m(u)d(shogi)h(\(see)h(Section)f(2.4)i([Shogi)d(v)-5
-b(arian)m(ts],)47 b(page)d(23\).)150 2382 y(Ho)m(w)m(ev)m(er,)39
-b(I)c(b)s(eliev)m(e)f(that)i(if)e(y)m(ou)i(are)g(a)f(c)m(hess)h(fan)f
-(y)m(ou'll)g(really)f(lik)m(e)g(shogi)h(as)h(w)m(ell,)f(and)g(shogi)g
-(is)150 2492 y(also)30 b(p)s(opular)e(with)i(man)m(y)g(p)s(eople)f(who)
-h(don't)h(particularly)d(lik)m(e)h(c)m(hess.)275 2637
-y(Here)h(are)h(the)g(signi\014can)m(t)e(di\013erences)h(b)s(et)m(w)m
-(een)h(c)m(hess)g(and)e(shogi:)199 2856 y(1.)61 b(In)26
-b(shogi,)i(captured)f(pieces)g(b)s(ecome)g(the)g(prop)s(ert)m(y)g(of)g
-(the)g(capturer)g(and)g(can)g(re-en)m(ter)h(pla)m(y)f(b)m(y)330
-2966 y(b)s(eing)h(dropp)s(ed)f(on)m(to)j(almost)g(an)m(y)f(v)-5
-b(acan)m(t)31 b(square.)40 b(In)28 b(c)m(hess,)i(captured)f(pieces)g
-(are)h(out)f(of)h(the)330 3076 y(game.)45 b(Th)m(us,)32
-b(in)e(shogi,)h(piece)h(exc)m(hanges)h(complicate)f(the)g(pla)m(y)f
-(signi\014can)m(tly)f(while)f(in)h(c)m(hess)330 3185
-y(they)h(simplify)26 b(it.)199 3325 y(2.)61 b(The)30
-b(shogi)g(b)s(oard)f(is)g(9x9;)j(the)e(c)m(hess)h(b)s(oard)f(is)f(8x8.)
-199 3465 y(3.)61 b(Shogi)37 b(has)g(\014v)m(e)h(pieces)g(with)e(no)i
-(coun)m(terpart)g(in)f(c)m(hess:)56 b(the)38 b(gold)f(and)g(silv)m(er)g
-(generals,)j(the)330 3575 y(lance,)47 b(the)d(promoted)g(ro)s(ok)g(and)
-f(the)h(promoted)g(bishop.)79 b(Chess)43 b(has)h(one)g(piece)g(with)e
-(no)330 3684 y(coun)m(terpart)33 b(in)f(shogi:)45 b(the)33
-b(queen.)48 b(The)33 b(knigh)m(t's)f(mo)m(v)m(e)i(in)e(shogi)g(is)g(m)m
-(uc)m(h)h(more)g(restrictiv)m(e)330 3794 y(than)f(in)f(c)m(hess.)46
-b(Pieces)32 b(in)f(shogi)g(generally)g(ha)m(v)m(e)j(a)e(m)m(uc)m(h)g
-(smaller)f(range)h(of)g(mo)m(v)m(emen)m(t)i(than)330
-3903 y(in)29 b(c)m(hess)i(\(unless)e(they)h(are)h(in)e(hand\).)199
-4043 y(4.)61 b(In)30 b(shogi,)h(all)f(pieces)h(except)g(the)h(gold)e
-(general)h(and)f(the)i(king)e(can)h(promote,)h(but)e(only)g(to)i(one)
-330 4153 y(kind)c(of)i(piece.)41 b(Promotion)29 b(is)g(easier)h(in)e
-(shogi)i(b)s(ecause)g(the)g(promotion)f(zone)h(is)f(closer)h(to)h(the)
-330 4263 y(starting)25 b(p)s(osition)e(of)i(the)g(pieces)f(\(esp)s
-(ecially)g(pa)m(wns\).)39 b(In)24 b(c)m(hess,)i(only)e(the)i(pa)m(wn)e
-(can)h(promote,)330 4372 y(but)30 b(it)g(can)g(promote)h(to)g(an)m(y)g
-(other)g(piece)f(except)h(the)g(king.)199 4512 y(5.)61
-b(In)32 b(shogi,)g(pa)m(wns)g(capture)h(the)f(same)h(w)m(a)m(y)g(they)g
-(mo)m(v)m(e.)48 b(There)32 b(is)g(no)g(initial)e(t)m(w)m(o-space)k(pa)m
-(wn)330 4622 y(mo)m(v)m(e)42 b(and)e(hence)h(no)f Fd(en-p)-5
-b(assant)51 b Fj(captures.)71 b(In)40 b(c)m(hess,)k(pa)m(wns)c(capture)
-g(diagonally)f(whic)m(h)330 4731 y(means)30 b(that)h(opp)s(osing)e(pa)m
-(wns)h(can)g(blo)s(c)m(k)g(eac)m(h)i(other.)199 4871
-y(6.)61 b(In)25 b(shogi,)i(y)m(ou)g(only)e(ha)m(v)m(e)j(one)e(ro)s(ok)g
-(and)g(one)g(bishop.)38 b(Note)27 b(that)g(the)f(bishop)f(is)g(not)h
-(restricted)330 4981 y(to)36 b(only)e(one)h(\\color")i(square)d
-(\(squares)h(in)f(shogi)h(aren't)g(colored,)i(but)d(nev)m(er)i(mind\))d
-(b)s(ecause)330 5090 y(promoted)d(bishops)f(can)h(also)h(mo)m(v)m(e)g
-(one)g(square)f(orthogonally)-8 b(.)199 5230 y(7.)61
-b(There)26 b(is)g(no)g(sp)s(ecial)f(castling)h(mo)m(v)m(e)i(in)d
-(shogi.)39 b(The)26 b(term)h(\\castle")h(is)d(used)h(in)f(shogi)h(to)h
-(denote)330 5340 y(a)42 b(defensiv)m(e)g(formation)g(consisting)f(of)h
-(\(usually\))e(three)j(generals)e(whic)m(h)g(protect)i(the)g(king.)p
-eop
-%%Page: 25 27
-25 26 bop 150 -116 a Fj(Chapter)30 b(2:)41 b(Ab)s(out)30
-b(the)g(game)i(of)e(shogi)2061 b(25)330 299 y(There)38
-b(are)g(man)m(y)h(suc)m(h)f(castles)h(\(ab)s(out)f(40)h(or)f(so)h(ha)m
-(v)m(e)g(names\).)65 b(See)38 b(Section)h(2.2)g([Sample)330
-408 y(game],)32 b(page)f(19.)199 543 y(8.)61 b(Dra)m(ws)26
-b(are)f(m)m(uc)m(h)g(rarer)g(in)f(shogi)g(than)h(in)f(c)m(hess.)40
-b(P)m(erp)s(etual)24 b(c)m(hec)m(k)j(is)d(not)h(allo)m(w)m(ed.)39
-b(Stalemate)330 653 y(is)29 b(a)i(virtual)e(imp)s(ossibilit)m(y)-8
-b(,)26 b(and)k(is)g(a)g(loss)g(for)g(the)h(stalematee.)199
-787 y(9.)61 b(Since)33 b(pieces)h(are)g(nev)m(er)g(out)g(of)g(pla)m(y)g
-(in)f(shogi,)h(c)m(hess-t)m(yp)s(e)h(endgames)f(in)m(v)m(olving)f(only)
-g(a)h(few)330 897 y(pieces)c(do)g(not)h(o)s(ccur.)154
-1031 y(10.)61 b(Shogi)29 b(games)j(are)e(generally)g(longer)g(than)g(c)
-m(hess)h(games)g(\(ab)s(out)g(60-70)h(mo)m(v)m(es)g(is)d(t)m(ypical\).)
-154 1166 y(11.)61 b(Shogi)29 b(has)i(a)f(w)m(ell-dev)m(elop)s(ed)f
-(handicap)g(system)i(whic)m(h)e(is)g(in)g(general)i(use;)f(c)m(hess)h
-(do)s(es)f(not.)275 1435 y(The)f(e\013ects)j(of)f(all)e(these)i
-(di\013erences)e(on)i(pla)m(y)f(include)e(\(in)h(m)m(y)i(opinion\):)199
-1654 y(1.)61 b(Piece/pa)m(wn)34 b(structures)f(in)f(c)m(hess)i(are)h
-(more)e(rigid)f(than)h(in)g(shogi.)50 b(P)m(a)m(wns)34
-b(blo)s(c)m(k)f(eac)m(h)i(other)330 1763 y(and)22 b(pa)m(wns,)i(once)g
-(adv)-5 b(anced,)25 b(cannot)e(ev)m(er)h(retreat.)39
-b(In)22 b(shogi,)i(y)m(ou)g(can)f(repair)e(the)i(hole)g(caused)330
-1873 y(b)m(y)32 b(a)h(pa)m(wn)g(adv)-5 b(ance)33 b(b)m(y)f(exc)m
-(hanging)h(the)g(pa)m(wn)f(and)g(dropping)e(it)i(bac)m(k)i(where)e(y)m
-(ou)h(w)m(an)m(t)g(it.)330 1983 y(Th)m(us)c(shogi)h(is)g(more)g
-(\015uid)e(than)i(c)m(hess)h(and)f(less)g(\\structural".)199
-2117 y(2.)61 b(Coun)m(terattac)m(k)39 b(is)d(MUCH)h(more)f(common)h(in)
-f(shogi)g(than)g(in)g(c)m(hess.)60 b(Games)37 b(t)m(ypically)f(end)330
-2227 y(in)e(m)m(utual)h(mating)g(attac)m(ks,)40 b(where)35
-b(eac)m(h)i(pla)m(y)m(er)e(is)g(trying)g(to)h(c)m(hec)m(kmate)i(the)e
-(other)g(pla)m(y)m(er)330 2336 y(b)s(efore)k(b)s(eing)f(c)m(hec)m
-(kmated)k(himself.)69 b(This)38 b(mak)m(es)k(temp)s(o)e(incredibly)d
-(imp)s(ortan)m(t)j(and)g(also)330 2446 y(mak)m(es)31
-b(sacri\014cial)e(pla)m(y)h(quite)g(common.)199 2580
-y(3.)61 b(A)m(ttac)m(ks)43 b(in)m(v)m(olving)c(only)g(ranging)g(pieces)
-i(are)f(more)h(a)f(feature)h(of)g(c)m(hess)f(than)g(of)h(shogi.)70
-b(A)330 2690 y(shogi)39 b(attac)m(k)j(t)m(ypically)c(uses)h(a)h
-(ranging)f(piece)g(or)h(pieces)f(to)h(supp)s(ort)e(an)i(attac)m(k)i(b)m
-(y)d(short-)330 2800 y(range)c(pieces)e(\(esp)s(ecially)g(generals\).)
-53 b(It)34 b(is)f(v)m(ery)i(rare)f(to)h(mate)g(a)f(king)f(with)g(a)i
-(non-adjacen)m(t)330 2909 y(ranging)40 b(piece)h(in)f(shogi)h(since)g
-(the)g(pla)m(y)m(er)g(whose)g(king)g(is)f(threatened)i(can)f(almost)g
-(alw)m(a)m(ys)330 3019 y(in)m(terp)s(ose)30 b(b)m(y)g(dropping)e(a)j
-(piece.)p eop
-%%Page: 26 28
-26 27 bop 150 -116 a Fj(26)2734 b(GNU)31 b(Shogi)f(man)m(ual)p
-eop
-%%Page: 27 29
-27 28 bop 150 -116 a Fj(Chapter)30 b(3:)41 b(gn)m(ushogi)2697
-b(27)150 299 y Fh(3)80 b(gn)l(ushogi)275 500 y Fj(This)28
-b(section)j(describ)s(es)d(ho)m(w)j(to)g(run)e(the)h(\\gn)m(ushogi")h
-(program.)275 737 y(SYNOPSIS)275 975 y(gn)m(ushogi)d([)i([[-]a])h([-b)f
-(b)s(o)s(ok\014le])e([-B)j(bin)m(b)s(o)s(ok\014le])c([-C])j([-h)f
-(lang\014le])g([-L)h(lang\014le])e([-r)i(length])f([-R])150
-1084 y([-s)i(pathname])f([-l)g(pathname])h([-S)f(bin)m(b)s(o)s(oksize])
-f([-t])i([-c)h(size])e([-T)h(size])f([-v])h([-x])g([-X])h(arg1)f(arg2)g
-(])275 1322 y(DESCRIPTION)275 1559 y(GNU)26 b(shogi)g(\(gn)m(ushogi\))h
-(pla)m(ys)e(a)i(game)g(of)g(japanese)f(c)m(hess)h(\(shogi\))g(against)f
-(the)h(user)e(or)i(it)e(pla)m(ys)150 1669 y(against)31
-b(itself.)275 1797 y(A)m(t)h(startup)f(gn)m(ushogi)g(reads)g(the)h(bin)
-m(b)s(o)s(ok)e(\014le)g(if)h(it)g(is)f(presen)m(t.)45
-b(It)31 b(then)g(lo)s(oks)g(for)h(a)g(b)s(o)s(ok)f(\014le.)150
-1906 y(If)c(it)g(is)f(presen)m(t)h(it)g(adds)f(its)h(con)m(ten)m(ts)i
-(to)f(the)f(bin)m(b)s(o)s(ok)f(data.)40 b(If)27 b(the)g(bin)m(b)s(o)s
-(ok)f(\014le)g(is)g(writable)g(a)h(new)150 2016 y(com)m(bined)j(bin)m
-(b)s(o)s(ok)e(\014le)i(is)f(written.)275 2144 y(Gn)m(ushogi)j(is)g(a)h
-(mo)s(di\014ed)e(v)m(ersion)h(of)h(the)g(gn)m(uc)m(hess)h(program.)48
-b(It)33 b(has)g(a)g(simple)e(alphan)m(umeric)150 2253
-y(b)s(oard)g(displa)m(y)-8 b(,)31 b(or)h(it)f(can)h(b)s(e)g(used)f
-(with)f(the)i(xshogi)f(program)h(under)e(X)i(windo)m(ws.)44
-b(The)31 b(program)150 2363 y(gets)j(its)e(op)s(ening)f(mo)m(v)m(es)j
-(from)e(the)h(\014le)f(gn)m(ushogi.bbk)g(whic)m(h)f(is)h(lo)s(cated)h
-(in)e(a)i(directory)g(sp)s(eci\014ed)150 2473 y(in)c(the)i(Mak)m
-(e\014le.)41 b(T)-8 b(o)31 b(in)m(v)m(ok)m(e)g(the)g(program)f(t)m(yp)s
-(e:)150 2710 y(`)p Fg(gnushogi)e(-C)p Fj(')630 2820 y(simple)g(curses)i
-(based)g(v)m(ersion)150 2966 y(`)p Fg(gnushogi)e(-X)i(\(or)g(just)f
-(gnushogi\))p Fj(')630 3075 y(xshogi)h(compatible)f(v)m(ersion)150
-3222 y(`)p Fg(gnushogi)f(-R)p Fj(')630 3331 y(ra)m(w)i(test)i(displa)m
-(y)c(v)m(ersion)275 3587 y(TIME)i(CONTR)m(OLS)275 3824
-y(If)23 b(one)h(argumen)m(t)h(is)e(giv)m(en,)j(it)d(is)g(the)h(searc)m
-(h)h(time)f(p)s(er)f(mo)m(v)m(e)i(in)e([min)m(utes:]seconds.)39
-b(So)24 b(gn)m(ushogi)150 3934 y(30)f(will)c(generate)k(one)f(mo)m(v)m
-(e)h(ev)m(ery)g(30)g(seconds,)g(while)d(gn)m(ushogi)h(5:00)i(will)d
-(generate)j(one)f(mo)m(v)m(e)h(ev)m(ery)150 4044 y(5)31
-b(min)m(utes.)275 4172 y(If)h(t)m(w)m(o)j(or)e(more)h(argumen)m(ts)g
-(are)f(giv)m(en,)i(they)e(will)e(b)s(e)h(used)h(to)h(set)g(tournamen)m
-(t)g(time)f(con)m(trols)150 4281 y(with)f(the)h(\014rst)f(argumen)m(t)i
-(of)f(eac)m(h)h(pair)e(b)s(eing)f(the)i(n)m(um)m(b)s(er)f(of)h(mo)m(v)m
-(es)i(and)d(the)h(second)g(b)s(eing)f(the)150 4391 y(total)e(clo)s(c)m
-(k)g(time)f(in)g(min)m(utes[:seconds].)40 b(Th)m(us,)29
-b(en)m(tering)g(gn)m(ushogi)g(60)h(5)g(will)d(set)j(the)g(clo)s(c)m(ks)
-f(for)h(5)150 4500 y(min)m(utes)d(\(300)i(seconds\))e(for)h(the)f
-(\014rst)g(60)h(mo)m(v)m(es,)i(and)d(gn)m(ushogi)g(30)h(3:30)h(will)c
-(allo)m(w)i(3)h(min)m(utes)f(and)150 4610 y(30)k(seconds)g(for)f(30)h
-(mo)m(v)m(es.)275 4738 y(gn)m(ushogi)h(30)h(5)g(1)g(:30)h(will)29
-b(allo)m(w)k(5)g(min)m(utes)e(for)i(the)f(\014rst)g(30)i(mo)m(v)m(es)f
-(and)f(30)i(seconds)e(for)h(eac)m(h)150 4847 y(mo)m(v)m(e)f(after)f
-(that.)41 b(Up)30 b(to)h(4)g(pairs)e(of)h(con)m(trols)h(ma)m(y)g(b)s(e)
-f(sp)s(eci\014ed.)275 4975 y(If)f(no)i(argumen)m(t)g(is)e(giv)m(en)h
-(the)h(program)f(will)e(prompt)h(the)i(user)e(for)i(lev)m(el)f(of)g
-(pla)m(y)-8 b(.)275 5103 y(F)g(or)37 b(use)g(with)f(xshogi)h(see)h(the)
-f(do)s(cumen)m(tation)g(on)g(that)h(program.)61 b(See)38
-b(Chapter)e(4)i([xshogi],)150 5213 y(page)31 b(33.)p
-eop
-%%Page: 28 30
-28 29 bop 150 -116 a Fj(28)2734 b(GNU)31 b(Shogi)f(man)m(ual)275
-299 y(BOOK)275 541 y(The)24 b(b)s(o)s(ok)g(gn)m(ushogi.tbk)g(consists)h
-(of)g(a)g(sequence)g(of)g(op)s(enings.)38 b(An)24 b(op)s(ening)f(b)s
-(egins)h(with)f(a)j(line)150 650 y(starting)k(with)f(a)h(#)g(\(the)h
-(rest)f(of)g(the)h(line)d(is)h(a)i(commen)m(t\).)42 b(F)-8
-b(ollo)m(wing)29 b(this)g(is)h(a)g(series)f(of)i(mo)m(v)m(es)g(in)150
-760 y(algebraic)i(notation)h(alternating)f(b)s(et)m(w)m(een)h(blac)m(k)
-f(and)g(white)g(separated)h(b)m(y)f(whitespace.)50 b(A)33
-b(mo)m(v)m(e)150 870 y(ma)m(y)i(ha)m(v)m(e)h(a)f(?)52
-b(after)35 b(it)f(indicating)f(this)g(mo)m(v)m(e)j(should)c(nev)m(er)j
-(b)s(e)f(made)g(in)g(this)f(p)s(osition.)51 b(Mo)m(v)m(es)150
-979 y(are)31 b(stored)f(as)h(p)s(osition:mo)m(v)m(e)f(so)h(transp)s
-(ositions)d(b)s(et)m(w)m(een)j(op)s(enings)e(can)h(tak)m(e)i(place.)275
-1221 y(HASHFILE)275 1463 y(The)37 b(hash\014le)f(if)g(created)j(should)
-c(b)s(e)i(on)h(the)g(order)f(of)g(4)h(megab)m(ytes;)43
-b(y)m(ou)38 b(can)g(create)h(suc)m(h)f(a)150 1573 y(hash\014le)h(b)m(y)
-h(t)m(yping)g(\\gn)m(ushogi)h(-c)g(22")g(\(see)h(b)s(elo)m(w\).)70
-b(This)39 b(\014le)h(con)m(tains)g(p)s(ositions)f(and)h(mo)m(v)m(es)150
-1682 y(learned)25 b(from)g(previous)g(games.)40 b(If)25
-b(a)i(hash\014le)d(is)h(used)g(the)h(computer)g(mak)m(es)h(use)e(of)h
-(the)h(exp)s(erience)150 1792 y(it)h(gained)f(in)g(past)h(games.)40
-b(T)-8 b(ests)29 b(run)d(so)j(far)e(sho)m(w)h(that)h(it)e(pla)m(ys)h
-(no)g(w)m(orse)g(with)f(the)h(hash\014le)e(than)150 1902
-y(without,)k(but)f(it)h(is)g(not)g(clear)h(y)m(et)g(whether)f(it)g(pro)
-m(vides)f(a)i(real)f(adv)-5 b(an)m(tage.)275 2144 y(LEGAL)30
-b(MO)m(VES)275 2386 y(Note:)54 b(Piece)37 b(letters)f(are)h(determined)
-f(b)m(y)g(the)h(language)g(\014le.)58 b(What)37 b(is)f(sp)s(eci\014ed)f
-(here)h(is)g(the)150 2495 y(default)30 b(\(English\).)275
-2628 y(Once)44 b(gn)m(ushogi)f(is)g(in)m(v)m(ok)m(ed,)48
-b(the)d(program)f(will)d(displa)m(y)h(the)j(b)s(oard)e(and)g(prompt)g
-(the)i(user)150 2737 y(for)d(a)h(mo)m(v)m(e.)78 b(T)-8
-b(o)43 b(en)m(ter)g(a)f(mo)m(v)m(e,)47 b(use)42 b(the)h(notation)f
-(7g7f)i(where)d(the)i(\014rst)f(letter-n)m(um)m(b)s(er)f(pair)150
-2847 y(indicates)j(the)g(origin)f(square)i(and)f(the)h(second)f
-(letter-n)m(um)m(b)s(er)g(pair)g(indicates)f(the)i(destination)150
-2956 y(square.)k(An)33 b(alternativ)m(e)g(is)f(to)i(use)f(the)g
-(notation)h(P7f)f(where)f(the)i(\014rst)e(letter)i(indicates)e(the)h
-(piece)150 3066 y(t)m(yp)s(e)c(\(P)-8 b(,L,N,S,G,B,R,K\).)32
-b(T)-8 b(o)29 b(promote)h(app)s(end)d(a)i Fg(+)g Fj(the)g(t)m(yp)s(e)g
-(of)g(the)h(new)e(piece)h(to)h(the)f(mo)m(v)m(e,)i(as)150
-3176 y(in)e(2d2c)p Fg(+)i Fj(or)f(P2c)p Fg(+)p Fj(.)41
-b(Note)32 b(that)f(y)m(ou)g(m)m(ust)f(use)g(capital)g(letters)h(for)f
-(the)g(pieces)g(b)m(y)h(default.)275 3418 y(COMMAND-LINE)g(OPTIONS)150
-3660 y(`)p Fg(-a)p Fj(')334 b(Do)31 b(not)g(searc)m(h)g(on)f(opp)s
-(onen)m(t's)g(time.)150 3815 y(`)p Fg(a)p Fj(')382 b(Do)31
-b(searc)m(h)g(on)f(opp)s(onen)m(t's)h(time.)150 3970
-y(`)p Fg(-b)f Ff(b)s(o)s(ok\014le)5 b Fj(')630 4080 y(Use)31
-b(b)s(o)s(ok\014le)e(for)h(op)s(ening)f(b)s(o)s(ok.)150
-4235 y(`)p Fg(-B)h Ff(bin)m(b)s(o)s(ok\014le)5 b Fj(')630
-4345 y(Use)31 b(bin)m(b)s(o)s(ok\014le)c(for)k(binary)d(op)s(ening)h(b)
-s(o)s(ok.)150 4500 y(`)p Fg(-c)h Ff(size)5 b Fj(')157
-b(Create)46 b(a)f(new)f(HASHFILE.)h(File)f(size)g(is)g(2)p
-Fg(^)p Fj(size)h(en)m(tries)f(of)h(appro)m(ximately)f(65)p
-Fg(+)p Fj(?)630 4609 y(b)m(ytes.)150 4765 y(`)p Fg(-C)p
-Fj(')334 b(Use)31 b(curses-based)f(displa)m(y)e(mo)s(de.)150
-4920 y(`)p Fg(-h)p Fj(')334 b(Do)31 b(not)g(use)f(hash\014le.)150
-5075 y(`)p Fg(h)p Fj(')382 b(Do)31 b(use)f(hash\014le.)150
-5230 y(`)p Fg(-l)g Ff(pathname)5 b Fj(')630 5340 y(P)m(athname)31
-b(of)g(the)f(load\014le)f(used)h(with)f(get)i(or)g(xget.)p
-eop
-%%Page: 29 31
-29 30 bop 150 -116 a Fj(Chapter)30 b(3:)41 b(gn)m(ushogi)2697
-b(29)150 299 y(`)p Fg(-L)30 b Ff(lang)8 b Fj(')129 b(Use)31
-b(language)h(lang)e(from)h(the)g(\014le)f(gn)m(ushogi.lang.)42
-b(If)30 b(-L)h(is)f(not)h(sp)s(eci\014ed)f(it)g(uses)h(the)630
-408 y(\014rst)f(language)g(in)f(the)i(\014le.)150 567
-y(`)p Fg(-P)f Ff(plylev)m(els)t Fj(')630 676 y(Num)m(b)s(er)f(of)i
-(plys)e(to)i(include)d(in)h(the)i(bin)m(b)s(o)s(ok\014le.)38
-b(F)-8 b(or)31 b(generating)f(a)h(bin)m(b)s(o)s(ok\014le.)150
-835 y(`)p Fg(-r)f Ff(length)p Fj(')630 944 y(Rehash)g
-Fd(length)38 b Fj(times)30 b(in)f(searc)m(hing)h(en)m(tries)g(for)g(p)s
-(osition)f(in)g(transp)s(osition)f(table.)150 1103 y(`)p
-Fg(-R)p Fj(')334 b(Use)26 b(ra)m(w)g(text)g(displa)m(y)e(mo)s(de.)39
-b(This)23 b(can)j(b)s(e)f(used)g(for)g(dum)m(b)f(terminals)g(or)i(for)f
-(systems)630 1212 y(that)31 b(don't)f(ha)m(v)m(e)i(curses.)150
-1370 y(`)p Fg(-s)e Ff(pathname)5 b Fj(')630 1480 y(P)m(athname)31
-b(of)g(the)f(sa)m(v)m(e)i(\014le)e(to)h(use)f(with)f(the)h(sa)m(v)m(e)i
-(command.)150 1638 y(`)p Fg(-S)e Ff(size)5 b Fj(')157
-b(Size)30 b(of)g(bin)m(b)s(o)s(ok\014le)e(for)i(memory)g(based)g(b)s(o)
-s(oks.)40 b(F)-8 b(or)32 b(creating)e(a)h(bin)m(b)s(o)s(ok\014le.)150
-1797 y(`)p Fg(-t)p Fj(')334 b(Sho)m(w)30 b(statistics)g(for)g
-(HASHFILE.)150 1955 y(`)p Fg(-T)g Ff(size)5 b Fj(')157
-b(Set)31 b(the)f(transp)s(osition)e(table)j(size)f(to)h(2)p
-Fg(^)p Fj(size)f(en)m(tries.)150 2113 y(`)p Fg(-v)p Fj(')334
-b(Sho)m(w)30 b(v)m(ersion)g(and)g(patc)m(hlev)m(el.)150
-2271 y(`)p Fg(-x)g Ff(v)-5 b(alue)5 b Fj(')94 b(Use)31
-b(v)-5 b(alue)30 b(as)g(the)h(ev)-5 b(aluation)30 b(windo)m(w)e(xwndw.)
-150 2430 y(`)p Fg(-X)p Fj(')334 b(Use)31 b(xshogi)f(displa)m(y)e(mo)s
-(de)i(\(the)h(default\).)275 2698 y(COMMANDS)275 2941
-y(In)42 b(addition)f(to)j(legal)f(mo)m(v)m(es,)48 b(the)43
-b(follo)m(wing)e(commands)i(can)g(b)s(e)g(en)m(tered)g(at)h(the)g(gn)m
-(ushogi)150 3051 y(prompt.)39 b(Note:)h(command)26 b(names)g(are)h
-(determined)e(b)m(y)h(the)h(language)g(\014le)e(and)h(ma)m(y)h(v)-5
-b(ary)27 b(with)e(the)150 3160 y(implemen)m(tation.)39
-b(The)30 b(default)g(language)h(is)e(English.)150 3319
-y(`)p Fg(alg)p Fj(')286 b(allo)m(w)30 b(algebraic)g(input)e(\(not)j
-(implemen)m(ted\).)150 3477 y(`)p Fg(Awindow)p Fj(')94
-b(c)m(hange)32 b(Alpha)d(windo)m(w)g(\(default)g(score)i
-Fg(+)f Fj(90\).)150 3635 y(`)p Fg(Bwindow)p Fj(')94 b(c)m(hange)32
-b(Beta)f(windo)m(w)e(\(default)h(score)h(-)g(90\).)150
-3794 y(`)p Fg(beep)p Fj(')238 b(toggles)32 b(b)s(eeping)c(after)j(eac)m
-(h)h(mo)m(v)m(e)g(\(default:)40 b(on\).)150 3952 y(`)p
-Fg(bd)p Fj(')334 b(up)s(dates)29 b(the)i(curren)m(t)f(b)s(oard)f(p)s
-(osition)g(on)h(the)h(displa)m(y)-8 b(.)150 4110 y(`)p
-Fg(book)p Fj(')238 b(turns)29 b(o\013)i(use)f(of)h(the)f(op)s(ening)f
-(library)-8 b(.)150 4268 y(`)p Fg(both)p Fj(')238 b(causes)31
-b(the)f(computer)h(to)g(pla)m(y)f(b)s(oth)f(sides)h(of)g(a)h(shogi)f
-(game.)150 4427 y(`)p Fg(black)p Fj(')190 b(causes)31
-b(the)f(computer)h(to)g(pla)m(y)f(as)g(White,)h(if)e(the)i(computer)f
-(w)m(as)h(to)g(mo)m(v)m(e)h(\014rst.)150 4585 y(`)p Fg(bsave)p
-Fj(')190 b(sa)m(v)m(es)33 b(a)f(game)g(to)g(disk)e(as)i(a)g(b)s(o)s(ok)
-e(text\014le.)44 b(The)31 b(program)h(will)c(prompt)j(the)g(user)g(for)
-630 4695 y(a)g(\014le)e(name.)150 4853 y(`)p Fg(gamein)p
-Fj(')142 b(toggles)36 b(game)g(mo)s(de)f(time)g(con)m(trol.)55
-b(Assumes)34 b(the)i(time)f(sp)s(eci\014ed)e(for)i(time)f(con)m(trol)
-630 4963 y(is)d(the)h(time)f(for)g(a)h(complete)g(game.)46
-b(Input)30 b(with)h(the)g(lev)m(el)h(command)f(should)f(b)s(e)h(the)630
-5072 y(game)36 b(time)f(and)g(the)g(exp)s(ected)h(n)m(um)m(b)s(er)e(of)
-h(mo)m(v)m(es)i(in)d(a)i(game.)56 b(go)36 b(command)f(m)m(ust)630
-5182 y(b)s(e)30 b(giv)m(en.)150 5340 y(`)p Fg(coords)p
-Fj(')142 b(sho)m(w)30 b(co)s(ordinates)g(on)h(the)f(displa)m(y)f
-(\(visual)g(only\).)p eop
-%%Page: 30 32
-30 31 bop 150 -116 a Fj(30)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(`)p Fg(contempt)p Fj(')630 408 y(allo)m(ws)g(the)g(v)-5
-b(alue)30 b(of)h Fd(c)-5 b(ontempt)40 b Fj(to)31 b(b)s(e)f(mo)s
-(di\014ed.)150 565 y(`)p Fg(debug)p Fj(')190 b(asks)33
-b(for)g(a)h(piece)f(as)g(color)g(piece,)h(as)f(wb)g(or)g(bn,)g(and)f
-(sho)m(ws)h(its)f(calculated)h(v)-5 b(alue)33 b(on)630
-674 y(eac)m(h)f(square.)150 830 y(`)p Fg(debuglevel)p
-Fj(')630 940 y(sets)f(lev)m(el)f(of)g(debugging)g(output)g(if)f
-(compiled)g(with)g(debug)h(options.)150 1096 y(`)p Fg(depth)p
-Fj(')190 b(allo)m(ws)41 b(the)h(user)f(to)h(c)m(hange)h(the)f(searc)m
-(h)g(depth)f(of)h(the)g(program.)74 b(The)41 b(maxim)m(um)630
-1205 y(depth)32 b(is)f(29)i(ply)-8 b(.)46 b(Normally)31
-b(the)i(depth)e(is)g(set)i(to)g(29)h(and)d(the)i(computer)f(terminates)
-630 1315 y(its)23 b(searc)m(h)h(based)f(on)h(elapsed)f(time)g(rather)h
-(than)f(depth.)38 b(If)23 b(depth)g(is)f(set)i(to)h(\(sa)m(y\))g(4)f
-(ply)-8 b(,)630 1425 y(the)28 b(program)g(will)d(searc)m(h)j(un)m(til)e
-(all)h(mo)m(v)m(es)i(ha)m(v)m(e)g(b)s(een)e(examined)g(to)i(a)f(depth)f
-(of)h(4)g(ply)630 1534 y(\(with)g(extensions)h(up)f(to)i(11)g
-(additional)d(ply)h(for)h(sequences)g(of)g(c)m(hec)m(ks)i(and)d
-(captures\).)630 1644 y(If)38 b(y)m(ou)h(set)g(a)g(maxim)m(um)f(time)g
-(p)s(er)g(mo)m(v)m(e)i(and)e(also)h(use)f(the)h(depth)f(command,)j(the)
-630 1753 y(searc)m(h)36 b(will)c(stop)j(at)h(the)f(sp)s(eci\014ed)e
-(time)i(or)g(the)g(sp)s(eci\014ed)e(depth,)j(whic)m(hev)m(er)e(comes)
-630 1863 y(\014rst.)150 2019 y(`)p Fg(easy)p Fj(')238
-b(toggles)28 b(easy)f(mo)s(de)f(\(thinking)e(on)i(opp)s(onen)m(ts)g
-(time\))h(on)f(and)g(o\013.)39 b(The)26 b(default)g(is)f(easy)630
-2129 y(mo)s(de)34 b(ON.)h(If)f(easy)h(mo)s(de)f(is)f(disabled,)h(the)g
-(k)m(eyb)s(oard)h(is)e(p)s(olled)g(for)h(input)e(ev)m(ery)k(so)630
-2238 y(often)22 b(and)f(when)g(input)f(is)g(seen)i(the)g(searc)m(h)g
-(is)f(terminated.)38 b(It)21 b(ma)m(y)i(also)e(b)s(e)g(terminated)630
-2348 y(with)29 b(a)i(sigin)m(t.)150 2504 y(`)p Fg(edit)p
-Fj(')238 b(allo)m(ws)30 b(the)g(user)g(to)h(set)g(up)e(a)i(b)s(oard)e
-(p)s(osition.)679 2637 y Fi(\000)60 b Fj(#)30 b(clear)g(the)h(b)s
-(oard.)679 2770 y Fi(\000)60 b Fj(c)31 b(toggle)g(piece)g(color.)679
-2902 y Fi(\000)60 b Fj(.)41 b(command)30 b(will)e(exit)i(setup)g(mo)s
-(de.)679 3035 y Fi(\000)60 b Fj(p3b)30 b(place)g(a)h(pa)m(wn)f(on)g(3b)
-679 3168 y Fi(\000)60 b Fj(p3b)p Fg(+)29 b Fj(place)i(a)g(promoted)f
-(pa)m(wn)g(on)g(3b)679 3301 y Fi(\000)60 b Fj(p*)30 b(place)h(a)f(pa)m
-(wn)g(in)f(hand)h(\(among)h(the)f(captured)g(pieces\))630
-3457 y(Pieces)35 b(are)h(en)m(tered)f(b)m(y)g(t)m(yping)g(a)g(letter)g
-(\(p,l,n,s,g,b,r,k\))g(for)g(the)g(piece)g(follo)m(w)m(ed)g(b)m(y)630
-3567 y(the)c(co)s(ordinate.)40 b(Here,)31 b(letter)g(case)g(is)f
-(ignored.)630 3699 y(The)g(usual)f(w)m(arning)g(ab)s(out)h(the)h
-(language)f(\014le)g(applies.)150 3856 y(`)p Fg(exit)p
-Fj(')238 b(exits)30 b(gn)m(ushogi.)150 4012 y(`)p Fg(first)p
-Fj(')190 b(tells)27 b(the)h(computer)f(to)i(mo)m(v)m(e)g(\014rst.)39
-b(Computer)27 b(b)s(egins)g(searc)m(hing)g(for)h(a)g(mo)m(v)m(e.)41
-b(\(same)630 4121 y(as)31 b(\\go"\).)150 4277 y(`)p Fg(force)p
-Fj(')190 b(allo)m(ws)28 b(the)i(user)e(to)i(en)m(ter)g(mo)m(v)m(es)g
-(for)f(b)s(oth)g(sides.)39 b(T)-8 b(o)29 b(get)i(the)e(program)g(to)h
-(pla)m(y)e(after)630 4387 y(a)j(sequence)g(of)f(mo)m(v)m(es)i(has)e(b)s
-(een)g(en)m(tered)g(use)h(the)f(\\blac)m(k")h(or)g(\\white")f
-(commands.)150 4543 y(`)p Fg(get)p Fj(')286 b(retriev)m(es)31
-b(a)f(game)i(from)e(disk.)39 b(The)30 b(program)g(will)e(prompt)h(the)i
-(user)e(for)i(a)f(\014le)g(name.)150 4699 y(`)p Fg(go)p
-Fj(')334 b(tells)27 b(the)h(computer)f(to)i(mo)m(v)m(e)g(\014rst.)39
-b(Computer)27 b(b)s(egins)g(searc)m(hing)g(for)h(a)g(mo)m(v)m(e.)41
-b(\(same)630 4809 y(as)31 b(\\\014rst"\).)150 4965 y(`)p
-Fg(hash)p Fj(')238 b(use/don't)31 b(use)f(hash\014le.)150
-5121 y(`)p Fg(hashdepth)p Fj(')630 5230 y(allo)m(ws)38
-b(the)g(user)g(to)h(c)m(hange)g(the)f(minim)m(um)e(depth)h(for)h(using)
-f(the)h(hash\014le)f(and)h(the)630 5340 y(n)m(um)m(b)s(er)29
-b(of)i(mo)m(v)m(es)g(from)f(the)h(b)s(eginning)c(of)k(the)g(game)g(to)g
-(use)f(it.)p eop
-%%Page: 31 33
-31 32 bop 150 -116 a Fj(Chapter)30 b(3:)41 b(gn)m(ushogi)2697
-b(31)150 299 y(`)p Fg(help)p Fj(')238 b(displa)m(ys)25
-b(a)i(short)f(description)f(of)i(the)g(commands)f(and)g(the)h(curren)m
-(t)f(status)i(of)e(options.)150 458 y(`)p Fg(hint)p Fj(')238
-b(causes)31 b(the)f(program)g(to)i(supply)c(the)i(user)g(with)f(its)h
-(predicted)f(mo)m(v)m(e.)150 617 y(`)p Fg(level)p Fj(')190
-b(allo)m(ws)28 b(the)h(user)f(to)h(set)g(time)g(con)m(trols)g(suc)m(h)f
-(as)h(60)h(mo)m(v)m(es)f(in)f(5)h(min)m(utes)f(etc.)41
-b(In)28 b(tour-)630 726 y(namen)m(t)f(mo)s(de,)h(the)f(program)g(will)d
-(v)-5 b(ary)27 b(the)g(time)g(it)g(tak)m(es)h(for)f(eac)m(h)h(mo)m(v)m
-(e)g(dep)s(ending)630 836 y(on)39 b(the)g(situation.)64
-b(If)39 b(easy)g(mo)s(de)f(is)g(disabled)f(\(using)g(the)i(\\easy")i
-(command\),)g(the)630 945 y(program)28 b(will)d(often)j(resp)s(ond)e
-(with)h(its)g(mo)m(v)m(e)j(immediately)-8 b(,)27 b(sa)m(ving)h(time)f
-(on)h(its)g(clo)s(c)m(k)630 1055 y(for)i(use)g(later)h(on.)150
-1214 y(`)p Fg(list)p Fj(')238 b(writes)27 b(the)h(game)i(mo)m(v)m(es)f
-(and)f(some)g(statistics)g(on)g(searc)m(h)h(depth,)f(no)s(des,)g(and)f
-(time)h(to)630 1324 y(the)j(\014le)e(\\shogi.lst".)150
-1482 y(`)p Fg(material)p Fj(')630 1592 y(toggle)j(material)e(\015ag)g
-(-)h(dra)m(ws)f(on)g(no)g(pa)m(wns)g(and)g(b)s(oth)f(sides)h
-Fg(<)g Fj(ro)s(ok.)150 1751 y(`)p Fg(new)p Fj(')286 b(starts)31
-b(a)g(new)e(game.)150 1910 y(`)p Fg(p)p Fj(')382 b(ev)-5
-b(aluates)34 b(the)f(b)s(oard)f(and)h(sho)m(ws)g(the)h(p)s(oin)m(t)e
-(score)i(for)f(eac)m(h)h(piece.)49 b(The)33 b(total)h(score)630
-2019 y(for)c(a)h(p)s(osition)d(is)i(the)g(sum)g(of)g(these)h
-(individual)26 b(piece)k(scores.)150 2178 y(`)p Fg(post)p
-Fj(')238 b(causes)31 b(the)h(program)e(to)i(displa)m(y)d(the)j
-(principal)27 b(v)-5 b(ariation)31 b(and)f(the)h(score)h(during)d(the)
-630 2288 y(searc)m(h.)41 b(A)31 b(score)g(of)f(100)i(is)d(equiv)-5
-b(alen)m(t)30 b(to)h(a)g(1)g(pa)m(wn)f(adv)-5 b(an)m(tage)32
-b(for)e(the)h(computer.)150 2447 y(`)p Fg(quit)p Fj(')238
-b(exits)30 b(the)h(game.)150 2606 y(`)p Fg(random)p Fj(')142
-b(causes)31 b(the)f(program)g(to)i(randomize)d(its)h(mo)m(v)m(e)i
-(selection)e(sligh)m(tly)-8 b(.)150 2765 y(`)p Fg(rcptr)p
-Fj(')190 b(set)31 b(recapture)f(mo)s(de.)150 2924 y(`)p
-Fg(remove)p Fj(')142 b(bac)m(k)m(out)32 b(the)e(last)h(lev)m(el)f(for)g
-(b)s(oth)g(sides.)39 b(Equal)29 b(to)j(2)e(undo's.)150
-3082 y(`)p Fg(reverse)p Fj(')94 b(causes)36 b(the)g(b)s(oard)f(displa)m
-(y)f(to)j(b)s(e)e(rev)m(ersed.)58 b(That)35 b(is,)i(the)f(Blac)m(k's)h
-(pieces)f(will)d(no)m(w)630 3192 y(app)s(ear)d(at)h(the)f(top)h(of)g
-(the)f(b)s(oard.)150 3351 y(`)p Fg(rv)p Fj(')334 b(rev)m(erse)31
-b(b)s(oard)e(displa)m(y)-8 b(.)150 3510 y(`)p Fg(save)p
-Fj(')238 b(sa)m(v)m(es)32 b(a)f(game)g(to)g(disk.)39
-b(The)30 b(program)g(will)e(prompt)i(the)g(user)g(for)g(a)h(\014le)e
-(name.)150 3669 y(`)p Fg(switch)p Fj(')142 b(causes)31
-b(the)f(program)g(to)i(switc)m(h)d(places)i(with)e(the)h(opp)s(onen)m
-(t)g(and)g(b)s(egin)f(searc)m(hing.)150 3828 y(`)p Fg(test)p
-Fj(')238 b(p)s(erforms)52 b(some)i(sp)s(eed)e(tests)j(for)e(Mo)m(v)m
-(eList)i(and)e(CaptureList)f(generation,)60 b(and)630
-3937 y(ScoreP)m(osition)30 b(p)s(osition)f(scoring)g(for)i(the)f
-(curren)m(t)g(b)s(oard.)150 4096 y(`)p Fg(time)p Fj(')238
-b(set)28 b(computer's)g(time)f(remaining,)g(in)m(tended)f(for)h(sync)m
-(hronizing)f(clo)s(c)m(ks)i(among)g(m)m(ulti-)630 4206
-y(ple)h(pla)m(y)m(ers.)150 4365 y(`)p Fg(tsume)p Fj(')190
-b(toggle)35 b(tsume)e(mo)s(de.)50 b(In)33 b(tsume)h(mo)s(de,)g(not)g
-(all)f(p)s(ossible)e(mo)m(v)m(es)k(will)c(b)s(e)i(generated.)630
-4474 y(If)f(a)i(king)e(is)f(in)h(c)m(hec)m(k,)j(only)d(mo)m(v)m(es)i
-(that)g(get)g(the)f(king)f(out)h(of)g(c)m(hec)m(k)h(are)g(generated.)
-630 4584 y(If)f(the)h(king)e(is)h(not)h(in)e(c)m(hec)m(k,)k(only)d(mo)m
-(v)m(es)h(that)h(giv)m(e)f(c)m(hec)m(k)h(to)f(the)g(opp)s(onen)m(t's)f
-(king)630 4693 y(are)e(generated.)150 4852 y(`)p Fg(undo)p
-Fj(')238 b(undo)s(es)29 b(the)h(last)g(mo)m(v)m(e)h(whether)f(it)f(w)m
-(as)i(the)f(computer's)g(or)g(the)g(h)m(uman's.)40 b(Y)-8
-b(ou)30 b(ma)m(y)630 4962 y(also)i(t)m(yp)s(e)g(\\remo)m(v)m(e".)47
-b(This)30 b(is)g(equiv)-5 b(alen)m(t)31 b(to)i(t)m(w)m(o)g(\\undo"'s)f
-(\(e.g.)46 b(retract)32 b(one)g(mo)m(v)m(e)630 5071 y(for)e(eac)m(h)i
-(side\).)150 5230 y(`)p Fg(white)p Fj(')190 b(causes)35
-b(the)g(computer)g(to)g(pla)m(y)f(as)h(Blac)m(k;)k(if)33
-b(the)i(computer)g(is)f(to)h(mo)m(v)m(e)h(\014rst)e(the)h(go)630
-5340 y(command)30 b(m)m(ust)g(b)s(e)g(giv)m(en.)p eop
-%%Page: 32 34
-32 33 bop 150 -116 a Fj(32)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(`)p Fg(xget)p Fj(')238 b(read)30 b(an)h(xshogi)e(p)s(osition)g
-(\014le.)150 458 y(`)p Fg(xsave)p Fj(')190 b(sa)m(v)m(e)32
-b(as)f(an)f(xshogi)g(p)s(osition)e(\014le.)150 618 y(`)p
-Fg(xwndw)p Fj(')190 b(c)m(hange)32 b(X)e(windo)m(w.)39
-b(The)30 b(windo)m(w)f(around)g(alpha/b)s(eta)h(used)g(to)h(determine)f
-(whether)630 727 y(the)k(p)s(osition)d(should)h(b)s(e)h(scored)g(or)h
-(just)f(estimated.)50 b(Note:)f(this)32 b(has)h Fd(nothing)43
-b Fj(to)34 b(do)630 837 y(with)29 b(xshogi)h(or)g(X)h(windo)m(ws;)e
-(the)h(terms)g(are)h(completely)f(separate.)p eop
-%%Page: 33 35
-33 34 bop 150 -116 a Fj(Chapter)30 b(4:)41 b(xshogi)2793
-b(33)150 299 y Fh(4)80 b(xshogi)275 508 y Fj(This)28
-b(section)j(describ)s(es)d(ho)m(w)j(to)g(run)e(the)h(\\xshogi")h
-(program.)275 747 y(SYNOPSIS)275 986 y(xshogi)e([)i(options)f(])275
-1225 y(DESCRIPTION)275 1465 y(xshogi)36 b(pro)m(vides)g(an)i(X11/Xt/A)m
-(thena)i(Widgets)e(user)e(in)m(terface)i(for)f(gn)m(ushogi.)61
-b(With)36 b(xshogi)150 1574 y(y)m(ou)29 b(can)f(pla)m(y)g(gn)m(ushogi,)
-g(set)h(up)f(arbitrary)f(p)s(ositions,)g(force)h(v)-5
-b(ariations,)28 b(or)h(w)m(atc)m(h)g(xshogi)f(manage)150
-1684 y(a)k(game)h(b)s(et)m(w)m(een)g(t)m(w)m(o)h(shogi)d(programs.)45
-b(F)-8 b(urthermore,)33 b(it)f(can)g(b)s(e)f(used)g(as)i(an)f(in)m
-(terface)g(b)s(et)m(w)m(een)150 1793 y(t)m(w)m(o)g(pla)m(y)m(ers)e(on)g
-(di\013eren)m(t)g(displa)m(ys.)275 1923 y(xshogi)d(can)h(also)g(b)s(e)f
-(used)g(as)h(a)g(shogi)g(b)s(oard)f(to)h(pla)m(y)g(out)g(games.)41
-b(It)28 b(will)d(read)j(through)f(a)h(game)150 2032 y(\014le)j(or)g
-(allo)m(w)g(a)h(pla)m(y)m(er)f(to)h(pla)m(y)f(through)g(a)h(v)-5
-b(ariation)30 b(man)m(ually)g(\(force)j(mo)s(de\).)43
-b(This)30 b(is)h(useful)e(for)150 2142 y(k)m(eeping)h(trac)m(k)i(of)e
-(email)g(p)s(ostal)g(games)h(or)f(bro)m(wsing)f(games)i(o\013)g(the)g
-(net.)275 2271 y(After)e(starting)g(xshogi,)f(y)m(ou)i(can)f(mak)m(e)h
-(mo)m(v)m(es)g(b)m(y)f(pressing)f(mouse)g(button)h(1)g(while)e(the)j
-(cursor)150 2381 y(is)36 b(o)m(v)m(er)i(a)f(square)g(with)f(y)m(our)h
-(piece)f(on)h(it)g(and)f(dragging)h(the)g(mouse)f(to)i(another)f
-(square.)60 b(If)37 b(the)150 2491 y(mo)m(v)m(e)32 b(is)d(illegal,)g
-(gn)m(ushogi)h(will)e(not)i(allo)m(w)g(it.)40 b(xshogi)30
-b(will)e(then)i(retract)h(the)g(mo)m(v)m(e.)275 2730
-y(COMMAND-LINE)g(OPTIONS)275 2969 y(The)f(follo)m(wing)e(command)j
-(line)e(options)g(also)i(corresp)s(ond)e(to)i(X)g(resources)f(that)i(y)
-m(ou)e(can)h(set)g(in)150 3078 y(y)m(our)f(.Xdefaults)g(\014le.)150
-3318 y(`)p Fg([standard)e(Xt)i(options])p Fj(')630 3427
-y(xshogi)g(accepts)h(standard)f(Xt)h(options)f(lik)m(e)f(-displa)m(y)-8
-b(,)30 b(-geometry)-8 b(,)32 b(and)e(-iconic.)150 3577
-y(`)p Fg(-tc)g(or)f(-timeControl)f(minutes[:seconds])p
-Fj(')630 3686 y(Amoun)m(t)42 b(of)g(time)g(for)f(a)h(set)h(of)f(mo)m(v)
-m(es)h(determined)d(b)m(y)i(mo)m(v)m(esP)m(erSession.)76
-b(If)41 b(this)630 3796 y(n)m(um)m(b)s(er)e(of)h(mo)m(v)m(es)h(is)e
-(pla)m(y)m(ed)h(within)d(the)j(time)g(con)m(trol)g(p)s(erio)s(d,)g
-(xshogi)f(resets)i(the)630 3905 y(time)30 b(clo)s(c)m(ks.)41
-b(Default:)g(5)31 b(min)m(utes.)150 4055 y(`)p Fg(-mps)e(or)h
-(-movesPerSession)c(moves)p Fj(')630 4164 y(Num)m(b)s(er)j(of)i(mo)m(v)
-m(es)h(in)d(a)h(time)g(con)m(trol)h(p)s(erio)s(d.)39
-b(Default:)h(40)32 b(mo)m(v)m(es.)150 4314 y(`)p Fg(-st)e(or)f
-(-searchTime)f(minutes[:seconds])p Fj(')630 4423 y(T)-8
-b(ell)30 b(gn)m(ushogi)g(to)i(sp)s(end)d(at)j(most)f(the)h(giv)m(en)f
-(amoun)m(t)g(of)g(time)g(searc)m(hing)g(for)g(eac)m(h)h(of)630
-4533 y(its)f(mo)m(v)m(es.)46 b(Without)32 b(this)e(option,)i(gn)m
-(ushogi)f(c)m(ho)s(oses)i(its)e(searc)m(h)h(time)g(based)f(on)h(the)630
-4643 y(n)m(um)m(b)s(er)k(of)i(mo)m(v)m(es)h(and)f(amoun)m(t)g(of)g
-(time)f(remaining)f(un)m(til)g(the)i(next)g(time)f(con)m(trol.)630
-4752 y(Setting)30 b(this)f(option)h(also)h(sets)f(-clo)s(c)m(kMo)s(de)i
-(to)f(F)-8 b(alse.)150 4902 y(`)p Fg(-sd)30 b(or)f(-searchDepth)f
-(number)p Fj(')630 5011 y(T)-8 b(ell)26 b(gn)m(ushogi)g(to)i(lo)s(ok)f
-(ahead)g(at)h(most)f(the)g(giv)m(en)g(n)m(um)m(b)s(er)f(of)h(mo)m(v)m
-(es)h(when)e(searc)m(hing)630 5121 y(for)37 b(a)h(mo)m(v)m(e)i(to)e
-(mak)m(e.)64 b(Without)37 b(this)g(option,)i(gn)m(ushogi)e(c)m(ho)s
-(oses)h(its)f(searc)m(h)i(depth)630 5230 y(based)e(on)g(the)h(n)m(um)m
-(b)s(er)e(of)h(mo)m(v)m(es)i(and)e(amoun)m(t)h(of)f(time)g(remaining)f
-(un)m(til)f(the)j(next)630 5340 y(time)30 b(con)m(trol.)41
-b(Setting)30 b(this)g(option)f(also)i(sets)g(-clo)s(c)m(kMo)s(de)g(to)g
-(F)-8 b(alse.)p eop
-%%Page: 34 36
-34 35 bop 150 -116 a Fj(34)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(`)p Fg(-clock)f(or)h(-clockMode)d(\(True)i(|)h(False\))p
-Fj(')630 408 y(Determines)36 b(whether)f(or)h(not)g(to)h(use)e(the)h
-(clo)s(c)m(k.)58 b(If)36 b(clo)s(c)m(kMo)s(de)g(is)f(F)-8
-b(alse,)38 b(the)f(clo)s(c)m(k)630 518 y(do)s(es)30 b(not)h(run,)e(but)
-h(the)g(side)f(that)i(is)f(to)h(pla)m(y)f(next)g(is)g(still)e(highligh)
-m(ted.)150 667 y(`)p Fg(-td)i(or)f(-timeDelay)f(seconds)p
-Fj(')630 777 y(Time)37 b(dela)m(y)h(b)s(et)m(w)m(een)g(mo)m(v)m(es)h
-(during)d(\\Load)i(Game".)64 b(This)36 b(do)s(esn't)i(ha)m(v)m(e)h(to)f
-(b)s(e)g(a)630 887 y(round)29 b(n)m(um)m(b)s(er.)39 b(T)-8
-b(ry)30 b(-td)h(0.4.)42 b(Default:)e(1)31 b(second.)150
-1036 y(`)p Fg(-nsp)e(or)h(-noShogiProgram)c(\(True)j(|)h(False\))p
-Fj(')630 1146 y(If)k(this)f(option)h(is)f(T)-8 b(rue,)35
-b(xshogi)f(acts)i(as)e(a)h(passiv)m(e)f(shogi)g(b)s(oard;)h(it)f(do)s
-(es)g(not)h(try)f(to)630 1255 y(start)h(a)g(shogi)e(program,)j(not)e
-(ev)m(en)i(to)f(c)m(hec)m(k)h(whether)d(mo)m(v)m(es)j(made)e(in)f(F)-8
-b(orce)36 b(mo)s(de)630 1365 y(are)31 b(legal.)40 b(It)31
-b(also)f(sets)h(-clo)s(c)m(kMo)s(de)g(to)g(F)-8 b(alse.)42
-b(Default:)f(F)-8 b(alse.)150 1514 y(`)p Fg(-fsp)29 b(or)h
-(-firstShogiProgram)c(program)p Fj(')630 1624 y(Name)33
-b(of)f(\014rst)f(shogi)g(program.)45 b(In)31 b(matc)m(hes)i(b)s(et)m(w)
-m(een)g(t)m(w)m(o)g(mac)m(hines,)f(this)f(program)630
-1733 y(pla)m(ys)f(white.)40 b(Default:)h(\\gn)m(ushogi".)150
-1883 y(`)p Fg(-ssp)29 b(or)h(-secondShogiProgram)25 b(program)p
-Fj(')630 1993 y(Name)34 b(of)g(second)g(shogi)f(program,)i(if)d
-(needed.)51 b(In)33 b(matc)m(hes)i(b)s(et)m(w)m(een)f(t)m(w)m(o)h(mac)m
-(hines,)630 2102 y(this)29 b(program)h(pla)m(ys)g(blac)m(k;)h
-(otherwise)f(it)g(is)f(not)i(started.)41 b(Default:)g(\\gn)m(ushogi".)
-150 2252 y(`)p Fg(-fh)30 b(or)f(-firstHost)f(host)p Fj(')630
-2361 y(Name)j(of)g(host)f(the)h(\014rst)e(shogi)h(program)g(pla)m(ys)g
-(on.)41 b(Default:)g(\\lo)s(calhost".)150 2511 y(`)p
-Fg(-sh)30 b(or)f(-secondHost)f(host)p Fj(')630 2620 y(Name)j(of)g(host)
-f(the)h(second)f(shogi)g(program)g(pla)m(ys)g(on.)41
-b(Default:)f(\\lo)s(calhost".)150 2770 y(`)p Fg(-rsh)29
-b(or)h(-remoteShell)d(shell_name)p Fj(')630 2879 y(Some)k(systems)h(do)
-f(not)h(use)f(rsh)f(as)i(the)g(remote)g(shell.)42 b(This)30
-b(option)h(allo)m(ws)g(a)g(user)g(to)630 2989 y(name)f(the)h(remote)g
-(shell)e(command.)40 b(This)29 b(should)f(b)s(e)i(done)g(in)f(the)i
-(resource)f(\014le.)150 3138 y(`)p Fg(-mm)g(or)f(-matchMode)f(\(False)h
-(|)h(Init)f(|)h(Position)e(|)i(Opening\))p Fj(')630 3248
-y(Automatically)46 b(run)f(a)i(game)g(b)s(et)m(w)m(een)h
-(\014rstShogiProgram)d(and)g(secondShogiPro-)630 3357
-y(gram.)52 b(If)33 b(matc)m(hMo)s(de)j(is)d(set)h(to)h(Init,)f(xshogi)g
-(will)d(start)j(the)h(game)g(with)d(the)j(initial)630
-3467 y(shogi)26 b(p)s(osition.)38 b(If)26 b(matc)m(hMo)s(de)h(is)f(set)
-h(to)g(P)m(osition,)g(xshogi)f(will)e(start)j(the)g(game)g(with)630
-3577 y(the)k(p)s(osition)e(sp)s(eci\014ed)g(b)m(y)i(the)g(loadP)m
-(ositionFile)e(resource.)42 b(If)30 b(matc)m(hMo)s(de)i(is)e(set)h(to)
-630 3686 y(Op)s(ening,)22 b(xshogi)h(will)d(pla)m(y)j(out)g(the)g(op)s
-(ening)e(mo)m(v)m(es)k(sp)s(eci\014ed)c(b)m(y)i(the)g(-loadGameFile)630
-3796 y(resource.)40 b(If)26 b(the)i(-sa)m(v)m(eGameFile)h(resource)e
-(is)f(set,)j(a)e(mo)m(v)m(e)i(record)e(for)f(the)i(matc)m(h)g(will)630
-3905 y(b)s(e)i(sa)m(v)m(ed)h(in)e(the)i(sp)s(eci\014ed)d(\014le.)40
-b(Default:)h(\\F)-8 b(alse".)150 4055 y(`)p Fg(-lgf)29
-b(or)h(-loadGameFile)d(file)p Fj(')630 4164 y(Name)j(of)f(\014le)g(to)h
-(read)f(a)g(game)h(record)g(from.)39 b(Game)31 b(\014les)d(are)h(found)
-f(in)g(the)h(directory)630 4274 y(named)h(b)m(y)f(the)i(SHOGIDIR)e(en)m
-(vironmen)m(t)h(v)-5 b(ariable.)39 b(If)30 b(this)f(v)-5
-b(ariable)29 b(is)g(not)h(set,)h(the)630 4384 y(curren)m(t)f(directory)
-g(is)f(used)h(unless)f(the)h(\014le)g(name)g(starts)h(with)e(a)i(/.)150
-4533 y(`)p Fg(-lpf)e(or)h(-loadPositionFile)c(file)p
-Fj(')630 4643 y(Name)44 b(of)g(\014le)f(to)h(read)g(a)g(game)h(p)s
-(osition)c(from.)80 b(P)m(osition)43 b(\014les)g(are)h(found)e(in)h
-(the)630 4752 y(directory)38 b(named)g(b)m(y)g(the)g(SHOGIDIR)g(en)m
-(vironmen)m(t)g(v)-5 b(ariable.)63 b(If)38 b(this)f(v)-5
-b(ariable)37 b(is)630 4862 y(not)31 b(set,)g(the)f(curren)m(t)h
-(directory)e(is)h(used)f(unless)g(the)i(\014le)e(name)i(starts)f(with)f
-(a)i(/.)150 5011 y(`)p Fg(-sgf)e(or)h(-saveGameFile)d(file)p
-Fj(')630 5121 y(Name)37 b(of)g(\014le)e(to)j(sa)m(v)m(e)g(a)f(game)g
-(record)g(to.)59 b(Game)38 b(\014les)d(are)i(sa)m(v)m(ed)h(in)d(the)h
-(directory)630 5230 y(named)30 b(b)m(y)f(the)i(SHOGIDIR)e(en)m
-(vironmen)m(t)h(v)-5 b(ariable.)39 b(If)30 b(this)f(v)-5
-b(ariable)29 b(is)g(not)h(set,)h(the)630 5340 y(curren)m(t)f(directory)
-g(is)f(used)h(unless)f(the)h(\014le)g(name)g(starts)h(with)e(a)i(/.)p
-eop
-%%Page: 35 37
-35 36 bop 150 -116 a Fj(Chapter)30 b(4:)41 b(xshogi)2793
-b(35)150 299 y(`)p Fg(-spf)29 b(or)h(-savePositionFile)c(file)p
-Fj(')630 408 y(Name)h(of)g(\014le)f(to)h(sa)m(v)m(e)h(a)f(game)h(p)s
-(osition)d(to.)40 b(P)m(osition)26 b(\014les)g(are)h(sa)m(v)m(ed)g(in)f
-(the)g(directory)630 518 y(named)k(b)m(y)f(the)i(SHOGIDIR)e(en)m
-(vironmen)m(t)h(v)-5 b(ariable.)39 b(If)30 b(this)f(v)-5
-b(ariable)29 b(is)g(not)h(set,)h(the)630 628 y(curren)m(t)f(directory)g
-(is)f(used)h(unless)f(the)h(\014le)g(name)g(starts)h(with)e(a)i(/.)150
-787 y(`)p Fg(-coords)e(or)g(-showCoords)f(\(True)h(|)h(False\))p
-Fj(')630 897 y(If)35 b(this)f(option)h(is)f(T)-8 b(rue,)36
-b(xshogi)f(displa)m(ys)e(algebraic)i(co)s(ordinates)g(along)g(the)h(b)s
-(oard's)630 1006 y(left)d(and)g(b)s(ottom)g(edges.)50
-b(The)33 b(default)f(is)g(F)-8 b(alse.)50 b(The)33 b(co)s(ordF)-8
-b(on)m(t)35 b(resource)e(sp)s(eci\014es)630 1116 y(what)d(fon)m(t)h(to)
-g(use.)150 1275 y(`)p Fg(-mono)e(or)h(-monoMode)e(\(True)h(|)h(False\))
-p Fj(')630 1385 y(Determines)36 b(whether)f(xshogi)g(displa)m(ys)f(its)
-h(pieces)h(and)f(squares)g(with)g(t)m(w)m(o)i(colors)f(or)630
-1494 y(four.)42 b(Y)-8 b(ou)31 b(shouldn't)e(ha)m(v)m(e)j(to)g(sp)s
-(ecify)e(mono)s(c)m(hrome.)42 b(xshogi)31 b(will)d(determine)i(if)g
-(this)630 1604 y(is)f(necessary)-8 b(.)150 1763 y(`)p
-Fg(-pc)30 b(or)f(-pieceColor)f(color)p Fj(')630 1873
-y(Color)i(sp)s(eci\014cation)f(for)h(pieces)g(suitable)f(for)h(XP)m
-(arseColor\(\).)42 b(Default:)f(#FFFFD7.)150 2032 y(`)p
-Fg(-sc)30 b(or)f(-squareColor)f(color)p Fj(')630 2142
-y(Same)i(for)h(squares.)40 b(Default:)h(#EBDFB0.)150
-2301 y(`)p Fg(-wps)29 b(or)h(-westernPieceSet)c(\(True)j(|)h(False\))p
-Fj(')630 2411 y(Cho)s(ose)g(the)h(W)-8 b(estern)31 b(st)m(yle)g(piece)f
-(set.)150 2570 y(`)p Fg(-npb)f(or)h(-normalPawnBitmap)c(file)p
-Fj(')150 2705 y(`)p Fg(-nnb)j(or)h(-normalKnightBitmap)25
-b(file)p Fj(')150 2839 y(`)p Fg(-nbb)k(or)h(-normalBishopBitmap)25
-b(file)p Fj(')150 2974 y(`)p Fg(-nrb)k(or)h(-normalRookBitmap)c(file)p
-Fj(')150 3108 y(`)p Fg(-nkb)j(or)h(-normalKingBitmap)c(file)p
-Fj(')630 3218 y(Names)31 b(of)f(the)h(bitmap)e(\014les)h(for)g(the)g
-(bitmap)f(piece)i(icons.)150 3377 y(`)p Fg(-rpb)e(or)h
-(-reversePawnBitmap)c(file)p Fj(')150 3512 y(`)p Fg(-rnb)j(or)h
-(-reverseKnightBitmap)25 b(file)p Fj(')150 3646 y(`)p
-Fg(-rbb)k(or)h(-reverseBishopBitmap)25 b(file)p Fj(')150
-3781 y(`)p Fg(-rrb)k(or)h(-reverseRookBitmap)c(file)p
-Fj(')150 3915 y(`)p Fg(-rkb)j(or)h(-reverseKingBitmap)c(file)p
-Fj(')630 4025 y(Names)31 b(of)f(the)h(bitmap)e(\014les)h(for)g(the)g
-(outline)f(piece)i(icons.)150 4184 y(`)p Fg(-debug)e(or)h(-debugMode)d
-(\(True)i(|)h(False\))p Fj(')630 4294 y(T)-8 b(urns)29
-b(on)h(debugging)f(prin)m(tout.)p eop
-%%Page: 36 38
-36 37 bop 150 -116 a Fj(36)2734 b(GNU)31 b(Shogi)f(man)m(ual)275
-299 y(OTHER)f(X)i(RESOUR)m(CES)150 540 y(`)p Fg(initString)p
-Fj(')630 650 y(The)k(actual)h(string)f(that)h(is)f(sen)m(t)h(to)g
-(initialize)d(the)j(shogi)f(program)g(can)h(b)s(e)f(set)h(from)630
-759 y(.Xdefaults.)k(It)29 b(can't)h(b)s(e)e(set)i(from)f(the)g(command)
-g(line)e(b)s(ecause)i(of)h(syn)m(tax)f(problems.)630
-869 y(The)j(default)g(v)-5 b(alue)32 b(is)g(\\new)p Fg(\\)p
-Fj(n)m(b)s(eep)p Fg(\\)p Fj(nrandom)p Fg(\\)p Fj(neasy)p
-Fg(\\)p Fj(n".)45 b(The)32 b(\\new")i(and)e(\\b)s(eep")630
-978 y(commands)i(are)g(required.)51 b(Y)-8 b(ou)35 b(can)f(remo)m(v)m
-(e)i(the)e(\\random")h(command)f(if)f(y)m(ou)h(lik)m(e;)630
-1088 y(including)28 b(it)j(causes)g(gn)m(ushogi)g(to)h(randomize)e(its)
-h(mo)m(v)m(e)i(selection)e(sligh)m(tly)e(so)j(that)f(it)630
-1198 y(do)s(esn't)c(pla)m(y)g(the)h(same)g(mo)m(v)m(es)g(in)e(ev)m(ery)
-i(game.)41 b(Ev)m(en)28 b(without)e(\\random",)j(gn)m(ushogi)630
-1307 y(randomizes)38 b(its)g(c)m(hoice)h(of)g(mo)m(v)m(es)h(from)e(its)
-f(op)s(ening)h(b)s(o)s(ok.)64 b(Y)-8 b(ou)39 b(can)g(also)f(remo)m(v)m
-(e)630 1417 y(\\easy")30 b(if)d(y)m(ou)i(lik)m(e;)f(including)d(it)j
-(toggles)h(easy)g(mo)s(de)f(o\013,)h(causing)f(gn)m(ushogi)f(to)i
-(think)630 1526 y(on)d(y)m(our)g(time.)39 b(That)25 b(is,)i(if)e
-(\\easy")i(is)e(included)e(in)i(the)h(initString,)e(GNU)j(Shogi)e
-(thinks)630 1636 y(on)33 b(y)m(our)h(time;)h(if)d(not,)j(it)e(do)s(es)g
-(not.)50 b(\(Y)-8 b(es,)36 b(this)c(do)s(es)h(seem)h(bac)m(kw)m(ards,)h
-(do)s(esn't)e(it.\))630 1745 y(Y)-8 b(ou)39 b(can)f(also)g(try)g
-(adding)f(other)h(commands)g(to)h(the)f(initString;)h(see)g(the)g(gn)m
-(ushogi)630 1855 y(do)s(cumen)m(tation)30 b(\(see)i(Chapter)d(3)i([gn)m
-(ushogi],)g(page)g(27\))g(for)f(details.)150 2008 y(`)p
-Fg(blackString)e(and)h(whiteString)p Fj(')630 2118 y(These)42
-b(resources)h(con)m(trol)g(what)f(is)g(sen)m(t)h(when)e(the)i(Mac)m
-(hine)f(Blac)m(k)i(and)e(Mac)m(hine)630 2228 y(White)i(buttons)g(are)h
-(selected.)84 b(This)43 b(is)g(mostly)h(for)g(compatibilit)m(y)f(with)g
-(obsolete)630 2337 y(v)m(ersions)30 b(of)g(gn)m(ushogi.)630
-2469 y(Alternate)e(bitmaps)e(for)h(piece)h(icons)f(can)h(b)s(e)f(sp)s
-(eci\014ed)e(either)i(b)m(y)h(c)m(ho)s(osing)f(one)h(of)g(the)630
-2578 y(built-in)j(sets)k(or)f(with)e(the)j(\014le)e(name)h(resources)g
-(describ)s(ed)e(ab)s(o)m(v)m(e.)54 b(There)33 b(are)i(three)630
-2688 y(built-in)c(sets)j(of)g(piece)g(bitmaps)f(a)m(v)-5
-b(ailable,)34 b(large)g(\(the)g(default\),)h(medium,)e(or)h(small.)630
-2798 y(It)c(is)g(easiest)h(to)g(select)g(the)f(set)h(y)m(ou)g(prefer)f
-(in)f(the)h(.Xdefaults)g(\014le:)630 2929 y(XShogi*b)s(oardSize:)39
-b(Medium)630 3061 y(The)25 b(fon)m(t)g(used)g(for)g(button)g(lab)s(els)
-e(and)i(commen)m(ts)h(can)g(b)s(e)e(c)m(hanged)i(in)e(the)h(.Xdefaults)
-630 3170 y(\014le.)40 b(Y)-8 b(ou)31 b(ma)m(y)g(w)m(an)m(t)g(to)g(c)m
-(ho)s(ose)g(a)g(smaller)e(fon)m(t)i(if)e(y)m(ou)i(are)g(using)e(the)h
-(small)f(pieces:)630 3302 y(XShogi*fon)m(t:)41 b(helv)m(etica)p
-1536 3302 28 4 v 33 w(oblique12)630 3433 y(The)26 b(fon)m(t)i(used)e
-(for)g(co)s(ordinates)h(\(when)f(the)h(sho)m(wCo)s(ords)f(option)g(is)g
-(T)-8 b(rue\))27 b(can)g(b)s(e)f(set)630 3543 y(similarly:)630
-3674 y(XShogi*co)s(ordF)-8 b(on)m(t:)42 b(helv)m(etica)p
-1780 3674 V 33 w(10)630 3806 y(If)30 b(y)m(ou)h(are)f(using)f(a)i(gra)m
-(yscale)h(monitor,)e(try)g(setting)g(the)h(colors)f(to:)630
-3937 y(XShogi*pieceColor:)40 b(gra)m(y100)630 4047 y
-(XShogi*squareColor:)g(gra)m(y60)275 4419 y(COMMAND)31
-b(BUTTONS)e(AND)i(KEYS)150 4661 y(`)p Fg(Quit)p Fj(')238
-b(Quits)29 b(xshogi.)40 b(Q)30 b(or)h(q)f(is)f(a)i(k)m(eyb)s(oard)f
-(equiv)-5 b(alen)m(t.)150 4814 y(`)p Fg(Reset)p Fj(')190
-b(Resets)34 b(xshogi)e(to)h(the)g(b)s(eginning)e(of)h(a)i(shogi)e
-(game.)49 b(It)33 b(also)g(deselects)g(an)m(y)g(game)h(or)630
-4924 y(p)s(osition)28 b(\014les.)150 5077 y(`)p Fg(Flip)h(View)p
-Fj(')630 5187 y(in)m(v)m(erts)h(the)h(view)e(of)i(the)f(shogi)g(b)s
-(oard.)150 5340 y(`)p Fg(Hint)p Fj(')238 b(displa)m(ys)28
-b(a)j(mo)m(v)m(e)h(hin)m(t)d(from)h(gn)m(ushogi.)p eop
-%%Page: 37 39
-37 38 bop 150 -116 a Fj(Chapter)30 b(4:)41 b(xshogi)2793
-b(37)150 299 y(`)p Fg(Load)29 b(Game)p Fj(')630 408 y(pla)m(ys)34
-b(a)h(game)g(from)f(a)h(record)f(\014le.)52 b(If)34 b(no)h(\014le)e(is)
-h(sp)s(eci\014ed)f(a)h(p)s(opup)f(dialog)h(asks)g(for)630
-518 y(a)39 b(\014lename.)63 b(Game)39 b(\014les)e(are)i(found)e(in)g
-(the)h(directory)g(named)g(b)m(y)g(the)g(SHOGIDIR)630
-628 y(en)m(vironmen)m(t)26 b(v)-5 b(ariable.)39 b(If)26
-b(this)g(v)-5 b(ariable)25 b(is)h(not)h(declared)f(then)h(the)g(curren)
-m(t)f(directory)630 737 y(is)34 b(used)g(unless)f(the)j(\014le)e(name)h
-(starts)g(with)f(a)h(/.)55 b(G)35 b(or)g(g)g(is)f(a)h(k)m(eyb)s(oard)g
-(equiv)-5 b(alen)m(t.)630 847 y(The)24 b(game)i(\014le)d(parser)h(will)
-e(accept)27 b(almost)d(an)m(y)h(\014le)f(that)h(con)m(tains)g(mo)m(v)m
-(es)h(in)d(algebraic)630 956 y(notation.)67 b(If)38 b(the)i(\014rst)e
-(line)f(b)s(egins)g(with)h(`#',)k(it)c(is)g(assumed)h(to)g(b)s(e)g(a)g
-(title)g(and)f(is)630 1066 y(displa)m(y)m(ed.)64 b(T)-8
-b(ext)39 b(enclosed)g(in)e(paren)m(theses)i(or)f(square)h(brac)m(k)m
-(ets)h(is)d(assumed)h(to)i(b)s(e)630 1176 y(commen)m(tary)30
-b(and)f(is)f(displa)m(y)m(ed)g(in)g(a)h(p)s(op-up)f(windo)m(w.)38
-b(An)m(y)30 b(other)f(text)h(in)e(the)i(\014le)e(is)630
-1285 y(ignored.)150 1463 y(`)p Fg(Load)h(Position)p Fj(')630
-1573 y(sets)f(up)f(a)h(p)s(osition)e(from)h(a)h(p)s(osition)e(\014le.)
-39 b(If)27 b(no)h(\014le)e(is)h(sp)s(eci\014ed)f(a)i(p)s(opup)e(dialog)
-h(asks)630 1682 y(for)21 b(a)g(\014lename.)36 b(P)m(osition)21
-b(\014les)e(are)i(found)f(in)f(the)i(directory)f(named)h(b)m(y)f(the)h
-(SHOGIDIR)630 1792 y(en)m(vironmen)m(t)26 b(v)-5 b(ariable.)39
-b(If)26 b(this)g(v)-5 b(ariable)25 b(is)h(not)h(declared)f(then)h(the)g
-(curren)m(t)f(directory)630 1902 y(is)g(used)g(unless)f(the)i(\014le)f
-(name)h(starts)h(with)d(a)j(/.)40 b(P)m(osition)26 b(\014les)g(m)m(ust)
-h(b)s(e)f(in)f(the)j(format)630 2011 y(that)j(the)g(Sa)m(v)m(e)g(P)m
-(osition)f(command)g(writes.)150 2189 y(`)p Fg(Save)f(Game)p
-Fj(')630 2299 y(sa)m(v)m(es)42 b(a)e(game)i(to)f(a)g(record)f(\014le.)
-70 b(If)39 b(no)i(\014le)e(is)g(sp)s(eci\014ed)g(a)i(p)s(opup)d(dialog)
-i(asks)g(for)630 2408 y(a)34 b(\014lename.)50 b(If)33
-b(the)h(\014lename)f(exists,)i(the)e(user)g(is)g(ask)m(ed)h(whether)g
-(the)f(curren)m(t)h(game)630 2518 y(record)24 b(is)g(b)s(e)g(app)s
-(ended)e(to)j(this)f(\014le)f(or)i(if)e(the)i(\014le)e(should)g(b)s(e)h
-(replaced.)38 b(Game)25 b(\014les)f(are)630 2628 y(sa)m(v)m(ed)33
-b(in)d(the)i(directory)g(named)f(b)m(y)h(the)g(SHOGIDIR)f(en)m
-(vironmen)m(t)h(v)-5 b(ariable.)44 b(If)31 b(this)630
-2737 y(v)-5 b(ariable)31 b(is)f(not)i(declared)f(then)h(the)g(curren)m
-(t)f(directory)g(is)g(used)g(unless)f(the)i(\014le)f(name)630
-2847 y(starts)h(with)f(a)h(/.)46 b(Game)33 b(\014les)e(are)h(h)m
-(uman-readable,)g(and)f(can)h(also)g(b)s(e)g(read)f(bac)m(k)i(b)m(y)630
-2956 y(the)38 b(Load)g(Game)h(command.)63 b(F)-8 b(urthermore,)40
-b(they)e(are)g(accepted)h(as)g(gn)m(ushogi)e(text)630
-3066 y(b)s(o)s(ok\014les.)150 3244 y(`)p Fg(Save)29 b(Position)p
-Fj(')630 3354 y(sa)m(v)m(es)j(a)f(p)s(osition)d(to)k(a)e(p)s(osition)f
-(\014le.)40 b(If)30 b(no)h(\014le)e(is)h(sp)s(eci\014ed)f(a)h(p)s(opup)
-f(dialog)h(asks)g(for)630 3463 y(a)j(\014lename.)46 b(P)m(osition)32
-b(\014les)g(are)h(sa)m(v)m(ed)g(in)e(the)i(directory)f(named)g(b)m(y)h
-(the)f(SHOGIDIR)630 3573 y(en)m(vironmen)m(t)26 b(v)-5
-b(ariable.)39 b(If)26 b(this)g(v)-5 b(ariable)25 b(is)h(not)h(declared)
-f(then)h(the)g(curren)m(t)f(directory)630 3682 y(is)k(used)h(unless)e
-(the)j(\014le)e(name)h(starts)h(with)e(a)i(/.)43 b(P)m(osition)31
-b(\014les)f(are)i(h)m(uman-readable,)630 3792 y(and)e(can)g(also)h(b)s
-(e)e(read)i(bac)m(k)g(b)m(y)f(the)h(Load)f(P)m(osition)g(command.)150
-3970 y(`)p Fg(Machine)f(White)p Fj(')630 4080 y(forces)i(gn)m(ushogi)f
-(to)h(pla)m(y)f(white.)150 4258 y(`)p Fg(Machine)f(Black)p
-Fj(')630 4367 y(forces)i(gn)m(ushogi)f(to)h(pla)m(y)f(blac)m(k.)150
-4545 y(`)p Fg(Force)f(Moves)p Fj(')630 4655 y(forces)h(a)g(series)g(of)
-g(mo)m(v)m(es.)41 b(That)30 b(is,)f(gn)m(ushogi)h(stops)f(pla)m(ying)g
-(and)g(xshogi)g(allo)m(ws)h(y)m(ou)630 4765 y(to)h(mak)m(e)g(mo)m(v)m
-(es)h(for)e(b)s(oth)g(white)f(and)h(blac)m(k.)150 4943
-y(`)p Fg(Two)g(Machines)p Fj(')630 5052 y(pla)m(ys)g(a)h(game)g(b)s(et)
-m(w)m(een)g(t)m(w)m(o)h(computer)e(programs.)150 5230
-y(`)p Fg(Forward)p Fj(')94 b(mo)m(v)m(es)41 b(forw)m(ard)e(through)g(a)
-h(series)e(of)i(remem)m(b)s(ered)f(mo)m(v)m(es.)69 b(F)40
-b(or)f(f)h(is)e(a)i(k)m(eyb)s(oard)630 5340 y(equiv)-5
-b(alen)m(t.)p eop
-%%Page: 38 40
-38 39 bop 150 -116 a Fj(38)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(`)p Fg(Backward)p Fj(')630 408 y(mo)m(v)m(es)j(bac)m(kw)m(ard)g
-(through)e(a)i(series)e(of)h(remem)m(b)s(ered)g(mo)m(v)m(es.)47
-b(As)32 b(a)g(side)f(e\013ect,)k(puts)630 518 y(xshogi)30
-b(in)m(to)g(F)-8 b(orce)32 b(Mo)m(v)m(es)g(mo)s(de.)41
-b(B)30 b(or)h(b)f(is)f(a)i(k)m(eyb)s(oard)f(equiv)-5
-b(alen)m(t.)150 683 y(`)p Fg(Pause)p Fj(')190 b(pauses)24
-b(the)g(clo)s(c)m(ks)g(or)h(\(in)e(Load)h(Game)h(mo)s(de\))f(pauses)g
-(the)g(game)i(b)s(eing)c(loaded.)38 b(Press)630 792 y(P)m(ause)31
-b(again)f(to)h(con)m(tin)m(ue.)41 b(P)31 b(or)f(p)g(is)f(a)i(k)m(eyb)s
-(oard)f(equiv)-5 b(alen)m(t.)150 957 y(`)p Fg(Edit)29
-b(Position)p Fj(')630 1066 y(lets)f(y)m(ou)h(set)g(up)e(an)i(arbitrary)
-e(b)s(oard)g(p)s(osition.)39 b(Use)28 b(mouse)h(button)f(1)h(to)g(drag)
-f(pieces)630 1176 y(to)37 b(new)f(squares,)i(or)f(to)g(delete)g(a)g
-(piece)g(b)m(y)f(dragging)g(it)g(o\013)h(the)g(b)s(oard)f(or)g
-(dragging)630 1285 y(an)f(empt)m(y)g(square)g(on)g(top)h(of)f(it.)54
-b(T)-8 b(o)36 b(drop)e(a)h(new)g(piece)g(on)g(a)g(square,)i(press)d
-(mouse)630 1395 y(button)26 b(2)g(or)g(3)h(o)m(v)m(er)g(the)g(square.)
-39 b(This)24 b(brings)g(up)h(a)i(men)m(u)f(of)g(blac)m(k)g(pieces)g
-(\(button)g(2\))630 1505 y(or)32 b(white)f(pieces)h(\(button)g(3\).)46
-b(Additional)29 b(men)m(u)j(c)m(hoices)h(let)e(y)m(ou)i(empt)m(y)f(the)
-g(square)630 1614 y(or)g(clear)h(the)f(b)s(oard.)45 b(Y)-8
-b(ou)33 b(can)g(set)f(the)h(side)e(to)i(pla)m(y)f(next)g(b)m(y)g(clic)m
-(king)f(on)i(the)f(Blac)m(k)630 1724 y(or)e(White)h(indicator)e(at)i
-(the)f(top)h(of)g(the)f(screen.)150 1888 y(`)p Fg(Challenge)p
-Fj(')630 1998 y(allo)m(ws)f(y)m(ou)h(to)h(mak)m(e)g(a)f(t)m(w)m(o)h
-(displa)m(y)d(game)j(b)s(et)m(w)m(een)f(t)m(w)m(o)h(h)m(uman)e(pla)m(y)
-m(ers.)41 b(En)m(ter)30 b(the)630 2108 y(displa)m(y)36
-b(y)m(ou)j(w)m(an)m(t)g(to)g(connect)g(to.)65 b(If)37
-b(y)m(ou)i(are)g(allo)m(w)m(ed)f(to)g(connect,)k(a)c(new)g(b)s(oard)630
-2217 y(is)h(displa)m(y)m(ed)f(at)j(the)f(remote)h(displa)m(y)-8
-b(.)68 b(Challenge)38 b(mo)s(de)i(can)g(only)f(b)s(e)g(stopp)s(ed)g(b)m
-(y)630 2327 y(pressing)29 b(\\quit".)150 2491 y(`)p Fg(Select)g(Level)p
-Fj(')630 2601 y(allo)m(ws)f(y)m(ou)g(to)h(reset)g(the)f(clo)s(c)m(ks)h
-(for)f(b)s(oth)f(pla)m(y)m(ers.)40 b(En)m(ter)28 b(the)h(n)m(um)m(b)s
-(er)e(of)h(mo)m(v)m(es)i(and)630 2710 y(the)h(n)m(um)m(b)s(er)e(of)h
-(min)m(utes)g(in)f(whic)m(h)g(the)h(mo)m(v)m(es)i(should)c(b)s(e)i
-(done.)150 2875 y(`)p Fg(Move)f(NOW)p Fj(')65 b(force)31
-b(computer)f(to)h(stop)g(thinking)d(and)i(to)h(mak)m(e)g(the)g(curren)m
-(t)f(b)s(est)g(mo)m(v)m(e.)150 3040 y(`)p Fg(Iconify)f(I,)g(i,)h(C)g
-(or)g(c)p Fj(')630 3149 y(iconi\014es)f(xshogi.)275 3426
-y(LIMIT)-8 b(A)g(TIONS)275 3675 y(If)28 b(y)m(ou)g(press)g(the)h(P)m
-(ause)f(button)h(during)d(GNU)j(Shogi's)e(turn,)h(xshogi)g(will)e(stop)
-j(the)f(clo)s(c)m(ks,)i(but)150 3785 y(gn)m(ushogi)g(will)d(still)i
-(mak)m(e)i(a)g(mo)m(v)m(e.)275 3924 y(After)d(a)h(mate)h(or)f(dra)m(w)f
-(when)g(pla)m(ying)f(against)i(gn)m(ushogi,)g(if)e(y)m(ou)i(bac)m(k)h
-(up)d(with)h(the)h(Bac)m(kw)m(ard)150 4034 y(button,)h(the)h(clo)s(c)m
-(ks)f(are)h(reset)g(\(b)s(ecause)g(gn)m(ushogi)f(has)g(exited)g(and)g
-(m)m(ust)g(b)s(e)g(restarted\).)275 4173 y(The)f(game)j(parser)e
-(recognizes)h(only)e(algebraic)h(notation.)275 4423 y(A)m(UTHORS)275
-4672 y(Original)d(authors)j(of)h(XBoard:)41 b(Chris)28
-b(Sears)i(and)g(Dan)h(Sears.)275 4812 y(Enhancemen)m(ts)f(for)g(XBoard)
-h(\(V)-8 b(ersion)30 b(2.0\):)42 b(Tim)29 b(Mann.)275
-4951 y(Con)m(v)m(ersion)g(to)j(XShogi)d(\(V)-8 b(ersion)31
-b(1.1\):)42 b(Matthias)31 b(Mutz.)275 5091 y(Curren)m(t)e(main)m
-(tainer:)40 b(Mik)m(e)30 b(V)-8 b(anier.)275 5340 y(COPYRIGHT)29
-b(INF)m(ORMA)-8 b(TION)p eop
-%%Page: 39 41
-39 40 bop 150 -116 a Fj(Chapter)30 b(4:)41 b(xshogi)2793
-b(39)275 299 y(XShogi)29 b(b)s(orro)m(ws)h(its)f(piece)i(bitmaps)e
-(from)h(CRANES)f(Shogi.)275 433 y(Cop)m(yrigh)m(t)83
-b(1991)j(b)m(y)e(Digital)f(Equipmen)m(t)f(Corp)s(oration,)97
-b(Ma)m(ynard,)h(Massac)m(h)m(usetts.)150 543 y(Enhancemen)m(ts)39
-b(Cop)m(yrigh)m(t)f(1992)j(F)-8 b(ree)40 b(Soft)m(w)m(are)g(F)-8
-b(oundation,)41 b(Inc.)66 b(Enhancemen)m(ts)39 b(Cop)m(yrigh)m(t)150
-653 y(1993)k(Matthias)f(Mutz.)74 b(F)-8 b(urther)41 b(enhancemen)m(ts)h
-(cop)m(yrigh)m(t)f(1999)i(b)m(y)f(Mic)m(hael)f(V)-8 b(anier)41
-b(and)g(the)150 762 y(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8
-b(oundation,)30 b(Inc.)275 897 y(The)44 b(follo)m(wing)f(terms)i(apply)
-e(to)j(Digital)e(Equipmen)m(t)f(Corp)s(oration's)h(cop)m(yrigh)m(t)h
-(in)m(terest)g(in)150 1006 y(XBoard:)275 1141 y(All)29
-b(Righ)m(ts)h(Reserv)m(ed)275 1275 y(P)m(ermission)f(to)j(use,)f(cop)m
-(y)-8 b(,)33 b(mo)s(dify)-8 b(,)30 b(and)h(distribute)d(this)i(soft)m
-(w)m(are)j(and)e(its)f(do)s(cumen)m(tation)h(for)150
-1385 y(an)m(y)36 b(purp)s(ose)e(and)g(without)h(fee)h(is)e(hereb)m(y)i
-(gran)m(ted,)h(pro)m(vided)d(that)i(the)g(ab)s(o)m(v)m(e)h(cop)m(yrigh)
-m(t)f(notice)150 1494 y(app)s(ear)30 b(in)f(all)g(copies)h(and)f(that)i
-(b)s(oth)f(that)h(cop)m(yrigh)m(t)f(notice)h(and)f(this)f(p)s
-(ermission)e(notice)k(app)s(ear)150 1604 y(in)j(supp)s(orting)e(do)s
-(cumen)m(tation,)k(and)f(that)g(the)h(name)f(of)g(Digital)f(not)i(b)s
-(e)e(used)g(in)g(adv)m(ertising)g(or)150 1714 y(publicit)m(y)18
-b(p)s(ertaining)g(to)j(distribution)16 b(of)21 b(the)f(soft)m(w)m(are)i
-(without)d(sp)s(eci\014c,)j(written)d(prior)g(p)s(ermission.)275
-1848 y(DIGIT)-8 b(AL)24 b(DISCLAIMS)f(ALL)h(W)-10 b(ARRANTIES)23
-b(WITH)h(REGARD)h(TO)e(THIS)g(SOFTW)-10 b(ARE,)150 1958
-y(INCLUDING)26 b(ALL)f(IMPLIED)g(W)-10 b(ARRANTIES)25
-b(OF)g(MER)m(CHANT)-8 b(ABILITY)26 b(AND)g(FITNESS,)150
-2067 y(IN)41 b(NO)g(EVENT)h(SHALL)e(DIGIT)-8 b(AL)42
-b(BE)g(LIABLE)f(F)m(OR)h(ANY)f(SPECIAL,)g(INDIRECT)f(OR)150
-2177 y(CONSEQUENTIAL)50 b(D)m(AMA)m(GES)k(OR)d(ANY)h(D)m(AMA)m(GES)i
-(WHA)-8 b(TSOEVER)51 b(RESUL)-8 b(TING)150 2286 y(FR)m(OM)66
-b(LOSS)d(OF)i(USE,)g(D)m(A)-8 b(T)g(A)66 b(OR)f(PR)m(OFITS,)f(WHETHER)h
-(IN)g(AN)g(A)m(CTION)g(OF)150 2396 y(CONTRA)m(CT,)43
-b(NEGLIGENCE)g(OR)g(OTHER)g(TOR)-8 b(TIOUS)42 b(A)m(CTION,)h(ARISING)g
-(OUT)g(OF)150 2506 y(OR)30 b(IN)g(CONNECTION)f(WITH)i(THE)f(USE)f(OR)h
-(PERF)m(ORMANCE)h(OF)f(THIS)g(SOFTW)-10 b(ARE.)275 2640
-y(The)36 b(follo)m(wing)g(terms)h(apply)f(to)i(the)g(enhanced)f(v)m
-(ersion)g(of)g(XShogi)g(distributed)d(b)m(y)j(the)h(F)-8
-b(ree)150 2750 y(Soft)m(w)m(are)31 b(F)-8 b(oundation:)275
-2884 y(This)28 b(\014le)i(is)f(part)h(of)h(XSHOGI.)275
-3019 y(XSHOGI)h(is)f(distributed)f(in)h(the)i(hop)s(e)e(that)i(it)f
-(will)e(b)s(e)i(useful,)g(but)f(WITHOUT)h(ANY)h(W)-10
-b(AR-)150 3128 y(RANTY.)30 b(No)g(author)f(or)h(distributor)d(accepts)k
-(resp)s(onsibilit)m(y)25 b(to)31 b(an)m(y)m(one)f(for)g(the)g
-(consequences)g(of)150 3238 y(using)e(it)h(or)g(for)g(whether)g(it)g
-(serv)m(es)h(an)m(y)f(particular)f(purp)s(ose)g(or)h(w)m(orks)g(at)h
-(all,)f(unless)f(he)h(sa)m(ys)h(so)f(in)150 3347 y(writing.)39
-b(Refer)30 b(to)h(the)g(XSHOGI)f(General)g(Public)e(License)i(for)g
-(full)e(details.)275 3482 y(Ev)m(ery)m(one)43 b(is)f(gran)m(ted)h(p)s
-(ermission)c(to)44 b(cop)m(y)-8 b(,)47 b(mo)s(dify)40
-b(and)i(redistribute)e(XSHOGI,)j(but)f(only)150 3592
-y(under)d(the)i(conditions)e(describ)s(ed)g(in)g(the)i(XSHOGI)f
-(General)h(Public)d(License.)71 b(A)41 b(cop)m(y)g(of)g(this)150
-3701 y(license)34 b(is)f(supp)s(osed)g(to)i(ha)m(v)m(e)h(b)s(een)d(giv)
-m(en)i(to)g(y)m(ou)g(along)g(with)e(XSHOGI)h(so)h(y)m(ou)g(can)f(kno)m
-(w)h(y)m(our)150 3811 y(righ)m(ts)f(and)h(resp)s(onsibilities.)49
-b(It)35 b(should)e(b)s(e)i(in)e(a)j(\014le)e(named)g(COPYING.)h(Among)h
-(other)f(things,)150 3920 y(the)c(cop)m(yrigh)m(t)f(notice)h(and)f
-(this)f(notice)i(m)m(ust)f(b)s(e)g(preserv)m(ed)g(on)g(all)f(copies.)p
-eop
-%%Page: 40 42
-40 41 bop 150 -116 a Fj(40)2734 b(GNU)31 b(Shogi)f(man)m(ual)p
-eop
-%%Page: 41 43
-41 42 bop 150 -116 a Fj(Chapter)30 b(5:)41 b(References)31
-b(and)f(links)2231 b(41)150 299 y Fh(5)80 b(References)52
-b(and)i(links)275 506 y Fj(There)30 b(are)g(v)m(ery)h(few)f
-(English-language)f(b)s(o)s(oks)h(for)g(p)s(eople)g(learning)f(shogi.)
-40 b(The)30 b(t)m(w)m(o)i(I)e(recom-)150 616 y(mend)f(are:)199
-835 y(1.)61 b Ff(Shogi)40 b(for)h(Beginners,)i(2nd.)71
-b(Edition)p Fj(,)42 b(b)m(y)f(John)f(F)-8 b(airbairn.)71
-b(This)39 b(is)h(a)h(sup)s(erb)e(b)s(eginner's)330 945
-y(b)s(o)s(ok)57 b(in)f(ev)m(ery)j(w)m(a)m(y)-8 b(,)66
-b(co)m(v)m(ering)58 b(all)f(phases)g(of)h(the)g(game.)123
-b(It)58 b(w)m(as)g(out)g(of)g(prin)m(t)e(for)330 1054
-y(a)k(long)e(time,)67 b(but)58 b(has)h(no)m(w)g(b)s(een)g(reprin)m(ted)
-f(and)g(is)h(a)m(v)-5 b(ailable)58 b(either)h(from)g(Kiseido)330
-1164 y(\()p Fg(http://www.labnet.or.jp/~k)o(ise)o(ido)p
-Fj(\))24 b(or)31 b(from)f(George)h(Ho)s(dges)g(\(see)h(b)s(elo)m(w\).)
-199 1293 y(2.)61 b Ff(The)54 b(Art)g(of)g(Shogi)p Fj(,)59
-b(b)m(y)54 b(T)-8 b(on)m(y)55 b(Hoskings.)111 b(This)52
-b(is)h(one)i(step)f(up)f(from)g(the)i(F)-8 b(airbairn)330
-1403 y(b)s(o)s(ok.)120 b(It)57 b(co)m(v)m(ers)i(a)e(lot)g(of)h(ground,)
-63 b(and)56 b(is)g(esp)s(ecially)f(notew)m(orth)m(y)k(for)d(its)h
-(detailed)330 1512 y(treatmen)m(t)36 b(of)f(op)s(ening)e(lines.)51
-b(Y)-8 b(ou)36 b(can)e(order)g(this)g(b)s(o)s(ok)g(from)g(Amazon.com's)
-i(UK)f(branc)m(h)330 1622 y(\()p Fg(http://www.amazon.co.uk)p
-Fj(\).)275 1880 y(Another)25 b(b)s(o)s(ok)g(y)m(ou)h(ma)m(y)g(\014nd)e
-(is)h Ff(Shogi:)38 b(Japan's)25 b(Game)h(of)g(Strategy)35
-b Fj(b)m(y)25 b(T)-8 b(rev)m(or)26 b(Leggett.)42 b(This)150
-1990 y(b)s(o)s(ok)37 b(is)g(v)m(ery)h(elemen)m(tary)h(and)e(is)g
-(somewhat)h(outdated,)j(ha)m(ving)c(b)s(een)g(published)d(\014rst)j(in)
-g(1966.)150 2099 y(Ho)m(w)m(ev)m(er,)c(it)d(do)s(es)g(feature)h(a)f
-(pap)s(er)g(shogi)g(b)s(oard)f(and)h(punc)m(h-out)g(pieces,)g(so)h(if)e
-(y)m(ou)i(w)m(an)m(t)g(a)g(really)150 2209 y(c)m(heap)g(shogi)f(set)h
-(y)m(ou)g(migh)m(t)f(pic)m(k)g(this)f(b)s(o)s(ok)h(up.)39
-b(It)31 b(is)e(still)f(in)h(prin)m(t.)275 2338 y(Tw)m(o)i(b)s(o)s(oks)f
-(that)h(are)h(no)f(longer)f(in)g(prin)m(t)f(but)h(are)i(de\014nitely)d
-(w)m(orth)i(getting)g(if)f(y)m(ou)i(\014nd)d(them)150
-2447 y(are)35 b Ff(Guide)e(to)i(Shogi)e(Op)s(enings)j
-Fj(and)e Ff(Better)h(Mo)m(v)m(es)h(for)e(Better)i(Shogi)p
-Fj(,)f(b)s(oth)e(b)m(y)h(Aono)h(T)-8 b(eriuc)m(hi.)150
-2557 y(They)38 b(are)h(published)c(in)i(a)i(bilingual)c(edition)j
-(\(English/Japanese\))f(and)i(are)g(the)f(only)g(b)s(o)s(oks)g(on)150
-2667 y(shogi)e(in)g(English)e(written)i(b)m(y)g(a)i(Japanese)f
-(professional)e(shogi)h(pla)m(y)m(er.)60 b(John)36 b(F)-8
-b(airbairn)35 b(did)g(the)150 2776 y(translation)29 b(from)h(Japanese)h
-(to)g(English.)275 2905 y(Shogi)e(sets)i(are)g(a)m(v)-5
-b(ailable)29 b(from:)390 3138 y(George)j(F.)f(Ho)s(dges)390
-3242 y(P)-8 b(.O.)31 b(Bo)m(x)g(77)390 3346 y(Bromley)-8
-b(,)31 b(Ken)m(t)390 3450 y(United)f(Kingdom)e(BR1)k(2WT)275
-3688 y(George)k(also)g(sells)d(equipmen)m(t)i(for)g(all)f(the)h
-(historical)f(shogi)h(v)-5 b(arian)m(ts)35 b(\(see)h(Section)f(2.4)i
-([Shogi)150 3798 y(v)-5 b(arian)m(ts],)34 b(page)f(23\))h(\(except)g
-(for)e(Ky)m(oku)h(tai)g(shogi\))f(and)g(also)h(sells)e(bac)m(k)i
-(issues)f(of)g(the)h(magazine)150 3908 y(\\Shogi")39
-b(whic)m(h)f(he)i(published)35 b(for)k(70)h(issues)e(in)g(the)i(late)g
-(70's)g(to)g(late)g(80's.)68 b(This)38 b(magazine)i(is)150
-4017 y(STR)m(ONGL)-8 b(Y)32 b(recommended;)g(it)f(con)m(tains)h(more)g
-(information)e(ab)s(out)h(shogi)g(in)g(English)e(than)j(y)m(ou)150
-4127 y(will)c(ev)m(er)j(\014nd)e(an)m(ywhere)h(else.)275
-4256 y(Here)g(are)h(some)g(useful)e(URLs:)150 4495 y(Pieter)h
-(Stouten's)h(shogi)f(page:)41 b Fg(http://www.shogi.net)630
-4604 y Fj(This)29 b(is)h(the)h(main)e(shogi-related)i(site)f(on)h(the)g
-(in)m(ternet,)g(with)e(links)g(to)i(almost)g(all)f(the)630
-4714 y(other)h(sites.)150 4863 y(Roger)g(Hare's)g(shogi)f(page:)42
-b Fg(http://www.ed.ac.uk/~r)o(jhar)o(e/sh)o(ogi)630 4972
-y Fj(This)29 b(has)h(lots)g(of)g(information,)f(including)e(full)h
-(rules)h(to)i(most)g(of)g(the)f(shogi)g(v)-5 b(arian)m(ts.)150
-5121 y(P)m(atric)m(k)31 b(Da)m(vin's)g(Shogi)e(Nexus:)41
-b Fg(http://www.vega.or.jp/~)o(patr)o(ick/)o(sho)o(gi/)630
-5230 y Fj(There's)32 b(lots)h(of)f(co)s(ol)h(stu\013)f(on)h(this)e
-(site;)j(m)m(y)f(fa)m(v)m(orite)h(is)d(the)i(extensiv)m(e)g(collection)
-g(of)630 5340 y(Tsume-shogi)22 b(\(mating\))h(problems,)f(b)s(oth)g
-(for)h(b)s(eginners)d(and)i(more)h(adv)-5 b(anced)23
-b(pla)m(y)m(ers.)p eop
-%%Page: 42 44
-42 43 bop 150 -116 a Fj(42)2734 b(GNU)31 b(Shogi)f(man)m(ual)150
-299 y(Stev)m(e)h(Ev)-5 b(ans')31 b(shogi)e(page:)42 b
-Fg(http://www.netspace.net.)o(au/~)o(tro)o(ut/i)o(ndex)o(.ht)o(ml)630
-408 y Fj(Stev)m(e)32 b(has)e(written)g(a)h(program)g(that)g(pla)m(ys)f
-(almost)h(all)f(of)h(the)g(shogi)f(v)-5 b(arian)m(ts,)31
-b(unfor-)630 518 y(tunately)f(it)g(only)g(runs)e(on)j(Windo)m(ws)e
-(:-\()150 677 y(Hans)h(Bo)s(dlaender's)g(c)m(hess)h(v)-5
-b(arian)m(t)30 b(pages:)41 b Fg(http://www.cs.ruu.nl/~han)o(sb/d)o(.ch)
-o(essv)o(ar)630 787 y Fj(This)31 b(page)i(has)g(an)f(almost)h
-(unimaginable)d(v)-5 b(ariet)m(y)33 b(of)g(rules)e(for)h(di\013eren)m
-(t)g(c)m(hess)h(v)-5 b(ari-)630 897 y(an)m(ts,)31 b(including)c(man)m
-(y)k(shogi)e(v)-5 b(arian)m(ts)31 b(\(historical)e(and)g
-(non-historical\).)p eop
-%%Page: 43 45
-43 44 bop 150 -116 a Fj(Chapter)30 b(6:)41 b(Ac)m(kno)m(wledgemen)m(ts)
-2295 b(43)150 299 y Fh(6)80 b(Ac)l(kno)l(wledgemen)l(ts)275
-533 y Fj(I)30 b(w)m(ould)f(lik)m(e)g(to)j(thank)e(the)g(follo)m(wing)f
-(p)s(eople:)225 752 y Fi(\017)60 b Fj(Matthias)35 b(Mutz,)h(who)e
-(originally)e(dev)m(elop)s(ed)i(GNU)h(shogi)f(as)h(a)g(spin-o\013)e(of)
-i(GNU)g(c)m(hess)g(and)330 862 y(who)30 b(v)m(ery)h(kindly)c(let)k(me)f
-(tak)m(e)i(o)m(v)m(er)g(the)e(main)m(tenance)h(of)g(this)e(v)m(ery)i
-(in)m(teresting)f(pro)5 b(ject.)225 996 y Fi(\017)60
-b Fj(Ric)m(hard)22 b(Stallman)f(and)h(the)h(F)-8 b(ree)24
-b(Soft)m(w)m(are)f(F)-8 b(oundation,)25 b(for)d(creating)h(an)g
-(organization)f(where)330 1106 y(an)m(y)m(one)38 b(can)f(con)m(tribute)
-f(soft)m(w)m(are)i(for)e(the)h(common)g(go)s(o)s(d)f(of)h(all,)g(for)f
-(making)g(GNU/Lin)m(ux)330 1215 y(p)s(ossible,)22 b(and)h(esp)s
-(ecially)e(for)i(writing)f(emacs)i(and)e(gcc,)k(without)d(whic)m(h)e(m)
-m(y)j(w)m(orking)e(life)g(w)m(ould)330 1325 y(b)s(e)30
-b(in)m(tolerable.)225 1460 y Fi(\017)60 b Fj(Georges)30
-b(Ho)s(dges,)f(for)f(starting)g(the)g(Shogi)g(Asso)s(ciation)g(in)e
-(England,)i(without)f(whic)m(h)g(I)h(w)m(ould)330 1569
-y(probably)i(nev)m(er)h(ha)m(v)m(e)i(heard)e(of)g(shogi,)h(for)f
-(supplying)d(shogi)j(equipmen)m(t,)g(for)g(publishing)c(the)330
-1679 y(excellen)m(t)33 b(magazine)h(\\Shogi")f(\(no)m(w)g(sadly)f
-(defunct\),)h(for)g(p)s(ersonally)e(answ)m(ering)h(all)f(m)m(y)i(silly)
-330 1788 y(questions)c(b)m(y)i(mail,)e(and)h(for)g(b)s(eing)f(the)h(am)
-m(bassador)h(of)g(shogi)e(to)j(the)e(W)-8 b(est.)225
-1923 y Fi(\017)60 b Fj(Pieter)30 b(Stouten,)g(for)g(ha)m(ving)g(the)g
-(most)h(comprehensiv)m(e)e(shogi)h(site)g(on)g(the)g(W)-8
-b(orld)30 b(Wide)f(W)-8 b(eb)330 2032 y(\()p Fg(http://www.shogi.net)p
-Fj(\),)27 b(and)j(for)h(main)m(taining)e(the)i(shogi-l)f(mailing)f
-(list.)41 b(Go)31 b(to)h(Pieter's)330 2142 y(w)m(eb)f(site)f(for)g
-(more)h(information)e(on)i(subscribing)c(to)k(the)g(list.)40
-b(Also)31 b(thanks)f(to)h(ev)m(ery)m(one)h(who)330 2252
-y(con)m(tributes)e(and)g(has)g(con)m(tributed)f(to)j(that)f(list.)225
-2386 y Fi(\017)60 b Fj(Matt)24 b(Casters,)h(for)e(testing)g(GNU)h
-(shogi.)38 b(Matt)24 b(and)e(I)h(will)e(b)s(e)h(w)m(orking)g(together)j
-(on)e(impro)m(ving)330 2496 y(the)31 b(solution)e(engine)g(in)g(future)
-h(v)m(ersions)g(of)g(this)f(program.)p eop
-%%Page: 44 46
-44 45 bop 150 -116 a Fj(44)2734 b(GNU)31 b(Shogi)f(man)m(ual)p
-eop
-%%Page: 45 47
-45 46 bop 150 -116 a Fj(Chapter)30 b(7:)41 b(Bugs)2848
-b(45)150 299 y Fh(7)80 b(Bugs)275 533 y Fj(The)39 b(motto)i(of)f(GNU)h
-(shogi)e(is)g(\\100\045)j(bug-free)d(or)h(y)m(ou)h(don't)f(pa)m(y!")70
-b(:-\))41 b(In)e(the)h(extremely)150 643 y(unlik)m(ely)31
-b(case)k(\(*ahem*\))g(that)f(y)m(ou)g(do)g(\014nd)e(a)i(bug,)g(please)f
-(send)g(me)h(\(Mik)m(e)g(V)-8 b(anier\))34 b(an)g(email)e(at)150
-752 y Fg(mvanier@cs.caltech.edu)p Fj(.)46 b(Also,)35
-b(feel)f(free)h(to)g(send)e(me)h(commen)m(ts,)j(complain)m(ts,)d
-(out-and-out)150 862 y(ra)m(v)m(es,)45 b(suggestions,)g(plane)40
-b(tic)m(k)m(ets)j(to)f(Ha)m(w)m(aii,)i(and/or)d(large)g(suitcases)h
-(\014lled)d(with)h(unmark)m(ed,)150 971 y(un)m(traceable)31
-b(h)m(undred-dollar)c(bills.)p eop
-%%Page: 46 48
-46 47 bop 150 -116 a Fj(46)2734 b(GNU)31 b(Shogi)f(man)m(ual)p
-eop
-%%Page: 47 49
-47 48 bop 150 -116 a Fj(Chapter)30 b(8:)41 b(Index)2821
-b(47)150 299 y Fh(8)80 b(Index)150 623 y Fk(A)150 755
-y Fc(Ac)n(kno)n(wledgemen)n(ts)10 b Fb(.)h(.)i(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-g(.)36 b Fc(43)150 1021 y Fk(B)150 1154 y Fc(Bo)r(oks)7
-b Fb(.)14 b(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)g(.)h(.)f(.)g(.)33 b Fc(41)150 1420 y Fk(C)150 1552
-y Fc(Ch)n(u)25 b(Shogi)8 b Fb(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fc(23)150 1818 y
-Fk(D)150 1951 y Fc(Dai)26 b(Shogi)18 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)44 b Fc(23)150
-2050 y(Dai-dai)26 b(Shogi)9 b Fb(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)34 b Fc(23)150 2150 y(Dra)n(ws)23
-b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)47 b Fc(17)150 2250 y(Drops)9 b Fb(.)j(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35
-b Fc(16)150 2516 y Fk(G)150 2648 y Fc(gn)n(ushogi)17
-b Fb(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)43 b Fc(27)150 2748 y(GPL)12 b Fb(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38
-b Fc(5)150 3014 y Fk(H)150 3146 y Fc(Handicaps)8 b Fb(.)k(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)33
-b Fc(18)150 3412 y Fk(I)150 3545 y Fc(In)n(tro)r(duction)9
-b Fb(.)j(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
-b Fc(3)150 3811 y Fk(K)150 3943 y Fc(Ky)n(oku)24 b(T)-6
-b(ai)27 b(Shogi)9 b Fb(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35
-b Fc(23)150 4209 y Fk(L)150 4342 y Fc(License)25 b Fb(.)12
-b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
-g(.)h(.)50 b Fc(5)150 4608 y Fk(M)150 4740 y Fc(Mailing)27
-b(lists)12 b Fb(.)i(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)37 b Fc(41)150 4840 y(Mak)l(a-dai-dai)26 b(Shogi)21
-b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fc(23)2025
-623 y Fk(O)2025 771 y Fc(Op)r(ening)25 b(setup)10 b Fb(.)i(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fc(15)2025 1082
-y Fk(P)2025 1230 y Fc(Piece)26 b(mo)n(v)n(es)16 b Fb(.)c(.)g(.)g(.)h(.)
-f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fc(14)2025
-1337 y(Piece)26 b(promotion)17 b Fb(.)c(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)43 b Fc(15)2025 1648 y Fk(R)2025 1796 y Fc(References)24
-b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-49 b Fc(41)2025 1903 y(Rules)17 b Fb(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42
-b Fc(13)2025 2214 y Fk(S)2025 2362 y Fc(Sample)25 b(game)14
-b Fb(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40
-b Fc(19)2025 2469 y(Shogi)26 b(v)l(arian)n(ts)17 b Fb(.)c(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fc(23)2025 2576
-y(Shogi)26 b(vs.)34 b(Chess)8 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)g(.)h(.)34 b Fc(24)2025 2886 y Fk(T)2025 3035
-y Fc(T)-6 b(ai)26 b(Shogi)d Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fc(23)2025 3142
-y(T)-6 b(enjiku)25 b(Shogi)f Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)49 b Fc(23)2025 3249 y(T)-6 b(ori)26
-b(Shogi)8 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-g(.)h(.)f(.)g(.)34 b Fc(23)2025 3559 y Fk(V)2025 3708
-y Fc(V)-6 b(arian)n(ts)23 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fc(23)2025 4018
-y Fk(W)2025 4167 y Fc(W)-6 b(a)25 b(Shogi)e Fb(.)12 b(.)g(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)48 b
-Fc(23)2025 4274 y(W)-6 b(eb)25 b(sites)d Fb(.)12 b(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fc(41)2025
-4381 y(Winning)25 b(the)h(game)17 b Fb(.)12 b(.)g(.)g(.)h(.)f(.)g(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)42 b Fc(17)2025 4691 y Fk(X)2025 4840 y Fc(xshogi)22
-b Fb(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)g(.)h(.)47 b Fc(33)p eop
-%%Page: 48 50
-48 49 bop 150 -116 a Fj(48)2734 b(GNU)31 b(Shogi)f(man)m(ual)p
-eop
-%%Page: -1 51
--1 50 bop 3725 -116 a Fj(i)150 299 y Fh(T)-13 b(able)54
-b(of)g(Con)l(ten)l(ts)150 641 y Fk(GNU)45 b(Shogi)g(\(Japanese)i(c)l
-(hess\))12 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h
-(.)f(.)g(.)h(.)f(.)h(.)56 b Fk(1)150 911 y(1)135 b(In)l(tro)t(duction)
-15 b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h
-(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)60
-b Fk(3)150 1181 y(GNU)45 b(GENERAL)g(PUBLIC)g(LICENSE)31
-b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)75 b Fk(5)449
-1318 y Fj(Pream)m(ble)16 b Fd(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)45 b Fj(5)449 1427 y(TERMS)29
-b(AND)j(CONDITIONS)d(F)m(OR)h(COPYING,)h(DISTRIBUTION)631
-1537 y(AND)g(MODIFICA)-8 b(TION)24 b Fd(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fj(6)449 1646
-y(Ho)m(w)31 b(to)g(Apply)e(These)h(T)-8 b(erms)30 b(to)h(Y)-8
-b(our)31 b(New)f(Programs)15 b Fd(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)44 b Fj(11)150 1889 y Fk(2)135 b(Ab)t(out)44
-b(the)h(game)h(of)f(shogi)30 b Fa(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)
-f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)74 b Fk(13)449 2026
-y Fj(2.1)92 b(The)30 b(rules)f(of)h(shogi)21 b Fd(.)15
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)51 b Fj(13)748 2135 y(2.1.1)93 b(The)29 b(mo)m(v)m(es)j(of)f
-(the)f(pieces)18 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Fj(14)748
-2245 y(2.1.2)93 b(The)29 b(op)s(ening)g(setup)15 b Fd(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fj(15)748 2355 y(2.1.3)93
-b(Promotion)30 b(of)g(pieces)14 b Fd(.)g(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)43 b Fj(15)748 2464 y(2.1.4)93 b(Drops)9 b Fd(.)15
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)38 b Fj(16)748 2574 y(2.1.5)93 b(Winning)28
-b(the)i(game)18 b Fd(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48
-b Fj(17)748 2683 y(2.1.6)93 b(Dra)m(ws)24 b Fd(.)15 b(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54
-b Fj(17)748 2793 y(2.1.7)93 b(Handicaps)28 b Fd(.)15
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-58 b Fj(18)748 2902 y(2.1.8)93 b(Notes)31 b(for)f(c)m(hess)h(pla)m(y)m
-(ers)21 b Fd(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fj(19)449
-3012 y(2.2)92 b(Sample)29 b(game)g Fd(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)57
-b Fj(19)449 3122 y(2.3)92 b(Mating)31 b(problems)18 b
-Fd(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)47 b Fj(22)449 3231 y(2.4)92 b(Shogi)29
-b(v)-5 b(arian)m(ts)10 b Fd(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)39
-b Fj(23)449 3341 y(2.5)92 b(Di\013erences)31 b(b)s(et)m(w)m(een)g
-(shogi)e(and)h(c)m(hess)10 b Fd(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39
-b Fj(24)150 3583 y Fk(3)135 b(gn)l(ushogi)33 b Fa(.)20
-b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
-(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)78
-b Fk(27)150 3853 y(4)135 b(xshogi)10 b Fa(.)20 b(.)g(.)f(.)g(.)h(.)f(.)
-h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
-(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)55 b Fk(33)150
-4123 y(5)135 b(References)46 b(and)f(links)29 b Fa(.)20
-b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
-(.)f(.)h(.)f(.)74 b Fk(41)150 4393 y(6)135 b(Ac)l(kno)l(wledgemen)l(ts)
-12 b Fa(.)21 b(.)f(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g
-(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)57 b Fk(43)150 4663
-y(7)135 b(Bugs)19 b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h
-(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)
-g(.)h(.)f(.)h(.)f(.)h(.)f(.)64 b Fk(45)150 4932 y(8)135
-b(Index)30 b Fa(.)19 b(.)g(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f
-(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)
-h(.)f(.)h(.)f(.)g(.)75 b Fk(47)p eop
-%%Page: -2 52
--2 51 bop 150 -116 a Fj(ii)2772 b(GNU)31 b(Shogi)f(man)m(ual)p
-eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Introduction</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Introduction">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Introduction">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC1"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_2.html#SEC2"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_2.html#SEC2"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<A NAME="Introduction"></A>
-<H1> 1. Introduction </H1>
-<!--docid::SEC1::-->
-<P>
-
-GNU shogi is a program that plays shogi, the Japanese version of chess,
-against a human (or computer) opponent. This file describes how to use
-GNU shogi and also gives background information about the game of shogi.
-</P><P>
-
-This file describes GNU shogi version 1.3.2. It was written by me, Mike
-Vanier, the current maintainer of GNU shogi. My email address is
-<A HREF="mailto:mvanier@cs.caltech.edu">mvanier@cs.caltech.edu</A>.
-</P><P>
-
-GNU shogi is actually two programs:
-</P><P>
-
-<DL COMPACT>
-
-<DT><SAMP>`gnushogi'</SAMP>
-<DD>is the text-based program which also contains the game-playing engine.
-<P>
-
-<DT><SAMP>`xshogi'</SAMP>
-<DD>is the X-windows graphical interface to gnushogi.
-<P>
-
-</DL>
-<P>
-
-Since xshogi invokes gnushogi, most players will just type "xshogi"
-and start playing.
-</P><P>
-
-Disclaimer: I use the personal pronouns "him", "his" etc. to refer
-to a shogi player regardless of gender. That's easier than writing
-"his or her" all over the place. I don't mean to infer that women
-don't play shogi; in fact shogi is very popular in Japan among women as
-well as men.
-</P><P>
-
-<A NAME="License"></A>
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Drops</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Drops">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Drops">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC10"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_9.html#SEC9"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_11.html#SEC11"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H3> 2.1.4 Drops </H3>
-<!--docid::SEC10::-->
-<P>
-
-When a player captures a piece, that piece is not removed from play.
-Instead, it becomes the property of the capturer and can re-enter play
-by being placed on (almost) any vacant square during the player's move.
-This is known as a "drop" and counts as a full move (in other words,
-you can either move a piece on the board or drop a piece onto the board
-during your move, but not both). All pieces drop in the unpromoted
-state. Pieces may be legally dropped in their promotion zone, but they
-do not promote on that turn.
-</P><P>
-
-There are several restrictions on drops:
-</P><P>
-
-<OL>
-
-<LI>A pawn may not be dropped onto a file if there is already an
-unpromoted pawn belonging to the same player on that file. It is legal
-to drop a pawn on a file which contains a <EM>promoted</EM> pawn belonging
-to the same player, however.
-<P>
-
-<LI>A pawn may not be dropped to give immediate checkmate on the
-move. A pawn is, however, permitted to be moved on the board to give
-immediate checkmate. This is a curious rule, and if anyone knows the
-reason for it I would appreciate it if they would contact me and explain
-it to me :-)
-<P>
-
-<LI>A pawn or piece may not be dropped onto a square from which they
-would have no legal move. This means that pawns and lances may not be
-dropped onto the last rank, and the knight may not be dropped onto the
-last or second-to-last rank.
-<P>
-
-</OL>
-<P>
-
-It is entirely permissible (and often advisable) to drop a piece or pawn
-between one's King and an attacking ranging piece. For this reason,
-the final checkmating move is nearly always an attack on the King from
-an adjacent square (except for an attack by a Knight).
-</P><P>
-
-Captured pieces are said to be pieces "in hand".
-</P><P>
-
-The drop is the primary distinguishing feature of Japanese chess, shared
-with no other popular chess-type game. It gives shogi a very aggressive
-quality, and dramatically increases the number of possible moves once a
-few pieces have been captured. Another interesting feature of shogi is
-that exchanges complicate play rather than simplifying it (as in
-international chess), because of the drop rule.
-</P><P>
-
-<A NAME="Winning the game"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_9.html#SEC9"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_11.html#SEC11"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Winning the game</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Winning the game">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Winning the game">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC11"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_10.html#SEC10"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_12.html#SEC12"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H3> 2.1.5 Winning the game </H3>
-<!--docid::SEC11::-->
-<P>
-
-A game of shogi is won by capturing the opponent's king. In general,
-this is done by checkmating the king: attacking the king in such a way
-that the king cannot be defended no matter what the defending player
-moves. Note, though, that there is no rule that requires a player to
-defend a king which is being attacked. However, if he does not defend
-his king, the opponent is entirely free to capture it on the next move,
-thus winning the game. As in international chess, in practice most
-games end by resignation when one player realizes that he cannot escape
-checkmate.
-</P><P>
-
-<A NAME="Draws"></A>
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Draws</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Draws">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Draws">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC12"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_11.html#SEC11"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_13.html#SEC13"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H3> 2.1.6 Draws </H3>
-<!--docid::SEC12::-->
-<P>
-
-There are very few draws in shogi; only about 1-2% of professional games
-end in a draw. One reason for this is that material can never be
-depleted as in chess, because captured pieces are constantly re-entering
-play as a consequence of the drop rule. In fact, most of the ways a
-game can be drawn in chess are not allowed in shogi:
-</P><P>
-
-<UL>
-
-<LI>Draws cannot be offered.
-<P>
-
-<LI>There is no fifty-move rule.
-<P>
-
-<LI>A stalemate counts as a win for the stalemater. Stated otherwise:
-if you can't move, you lose.
-<P>
-
-<LI>Perpetual check is illegal (see below).
-<P>
-
-</UL>
-<P>
-
-There are only two legal ways in which a draw can occur:
-</P><P>
-
-<OL>
-
-<LI>A position (including the pieces in hand) occurs 4 times with the same
-player to move (called "Sennichite"). However, if this is caused by
-consecutive checks (direct attacks on the King, threatening to capture
-it on the next move) by one side, the player giving these checks loses
-the game. In other words, perpetual check results in a loss for the
-attacker who recreates the same position the 4th time.
-<P>
-
-<LI>Both players have moved their King into the the promotion zone (or they
-cannot be prevented from doing so) and the Kings cannot be checkmated.
-A King who has entered the promotion zone is known as an "entering
-King"; due to the forward orientation of most shogi pieces, it is very
-hard to mate such a King. In that case the players may decide to count
-their pieces as follows: the King does not count, the Rook and Bishop
-count as 5 points, and all other pieces as one point. Promotion is
-disregarded. If both players have at least 24 points the game is a draw
-(called "Jishogi"). If a player has less, he loses the game.
-<P>
-
-Of course, a player can refuse to count pieces when he still has mating
-chances or chances to gain material which would affect the outcome of
-the counting. There is no strict rule about what to do if this is not
-the case, but nonetheless a player refuses to count up (e.g. because he
-does not have enough points for a draw). It has been generally accepted
-that in such a case the game ends and the pieces are counted after one
-player has managed to get all his pieces protected in the promotion
-zone.
-</P><P>
-
-</OL>
-<P>
-
-<A NAME="Handicaps"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_11.html#SEC11"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_13.html#SEC13"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Handicaps</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Handicaps">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Handicaps">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC13"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_12.html#SEC12"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_14.html#SEC14"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H3> 2.1.7 Handicaps </H3>
-<!--docid::SEC13::-->
-<P>
-
-Unlike international chess, shogi has a well-established handicap system
-which is used when players of different strengths play against each
-other. Handicaps range from small to huge, which makes it possible for
-weak players to play against even very strong players and have an even
-chance of winning.
-</P><P>
-
-Shogi players are ranked as follows: the weakest rank is around 15
-"kyu", which represents a beginner. 14 kyu is higher than 15 kyu, 13
-kyu is higher still, and so on until you get to 1 kyu. The next highest
-rank is 1 "dan", followed by 2 dan, 3 dan and so forth. The highest
-amateur rank is 6 dan; professionals go up to 9 dan. However,
-professional ranks are not the same as amateur ranks; a professional 1
-dan is <EM>much</EM> stronger than an amateur 1 dan. This system is
-similar to that used by go players (and also other Japanese sports such
-as karate).
-</P><P>
-
-A handicap consists of the stronger player playing White and removing
-one or more pieces from his side of the board at the start of the game.
-These pieces are permanently removed from play; they are not in hand.
-</P><P>
-
-The following is a list of the accepted handicaps, from weakest to
-strongest. The degree of the handicap, represented by the position in
-the list, represents the difference in rank between the two players for
-which the handicap is appropriate. These rules are taken from the books
-"Shogi for Beginners" by John Fairbairn and "The Art of Shogi" by
-Tony Hoskings (see section <A HREF="gnushogi_21.html#SEC21">5. References and links</A>) and, I believe, represent
-current Japanese practice.
-</P><P>
-
-<OL>
-
-<LI>
-The stronger player removes his left lance (on 1a).
-<P>
-
-<LI>
-The players play a two-game match; in the first game the stronger player
-removes his left lance (on 1a), while in the second game he removes his
-bishop.
-<P>
-
-<LI>
-The stronger player removes his bishop.
-<P>
-
-<LI>
-The stronger player removes his rook.
-<P>
-
-<LI>
-The stronger player removes his rook and left lance.
-<P>
-
-<LI>
-The players play a two-game match; in the first game the stronger player
-removes his rook and left lance (on 1a), while in the second game he
-removes his rook and bishop.
-<P>
-
-<LI>
-The stronger player removes his rook and bishop. This is usually called
-a "two-piece" handicap.
-<P>
-
-<LI>
-The stronger player removes his rook, bishop, and both lances. This is
-called a "four-piece" handicap.
-<P>
-
-<LI>
-The stronger player removes his rook, bishop, both lances, and both
-knights. This is called a "six-piece" handicap.
-<P>
-
-<LI>
-The stronger player removes his rook, bishop, both lances, both knights,
-and both silvers. This is called an "eight-piece" handicap.
-<P>
-
-</OL>
-<P>
-
-Another advantage of playing handicap games is that the handicaps alter
-the optimal strategy for both players. For instance, handicaps all have
-their own opening lines which may bear little or no resemblance to those
-used in non-handicap shogi. This means that when learning handicap
-shogi, you are essentially learning completely new games which use the
-same equipment!
-</P><P>
-
-The reader may wonder how on earth a player giving an eight-piece
-handicap, say, could possibly hope to win. Don't forget, though, that
-in shogi the opponent's pieces can be captured and then become part of
-one's own army. Thus, if the opponent plays badly enough, the number of
-pieces will soon even out.
-</P><P>
-
-<A NAME="Notes for chess players"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_12.html#SEC12"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_14.html#SEC14"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Notes for chess players</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Notes for chess players">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Notes for chess players">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC14"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_13.html#SEC13"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H3> 2.1.8 Notes for chess players </H3>
-<!--docid::SEC14::-->
-<P>
-
-Here are a few miscellaneous things that may confuse chess players.
-Some of these have been mentioned elsewhere, but they bear repeating.
-</P><P>
-
-<OL>
-<LI>There is no queen.
-<P>
-
-<LI>Pawns capture the same way they move. There is no initial
-two-space pawn move and no <EM>en-passant</EM> move.
-<P>
-
-<LI>There is no special castling move. There <EM>are</EM> a large
-number of possible defensive formations referred to as "castles"
-(see section <A HREF="gnushogi_15.html#SEC15">2.2 Sample game</A>) but there is no need for special moves to create
-them.
-<P>
-
-<LI>A given piece can only promote to <EM>one</EM> other kind of piece.
-<P>
-
-</OL>
-<P>
-
-<A NAME="Sample game"></A>
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Sample game</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Sample game">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Sample game">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC15"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_14.html#SEC14"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_16.html#SEC16"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H2> 2.2 Sample game </H2>
-<!--docid::SEC15::-->
-<P>
-
-This game was annotated by Pieter Stouten (see section <A HREF="gnushogi_21.html#SEC21">5. References and links</A>). I have made some minor corrections. Note that captures are
-denoted by the "x" symbol e.g. Rx3f and drops are denoted by the "*"
-symbol e.g. R*3f. Check is indicated by a "+" after the move,
-e.g. R3f+. I recommend you use gnushogi/xshogi to play along with this
-game. In xshogi simply hit the "Force Moves" button after starting
-up, while in gnushogi enter the word "force" at the prompt. This will
-allow you to enter moves for both sides.
-</P><P>
-
-Note also that the move numbering system used here is the chess-type
-system where one move means one move by each player. The Japanese count
-one move made by each player as two moves.
-</P><P>
-
----------------------------------------------------------------------------
-</P><P>
-
-Below you will find (the English translation of) an annotated game which
-was published in the Dutch Shogi magazine "81" and in the Dutch
-beginners booklet. It has proven to be a very useful game to explain
-some basic principles of Shogi. Also, it is a rather straightforward
-game compared to professional games where in most cases very diffuse
-middle game fights take place.
-</P><P>
-
- Pieter Stouten, 14th May 1990.
-</P><P>
-
----------------------------------------------------------------------------
-</P><P>
-
-Black: Michael Trent (1-dan). White: David Murphy (2-dan).
-</P><P>
-
- 1. P2f P3d 2. P2e B3c <BR>
-[ This move is necessary, as otherwise white can exchange pawns: 3. P2d
-Px2d 4. Rx2d. He would thus get a pawn in hand and open up his rook
-file. ]
-</P><P>
-
- 3. P7f P4d <BR>
-[ White closes the bishop diagonal again. He plans to play ranging rook
-(the rook goes to 5b, 4b, 3 or 2b; a defensive strategy) and in that
-case he'd better avoid an exchange of bishops. One of the reasons is
-that he will have problems developing his pieces without leaving holes
-for bishop drops. ]
-</P><P>
-
- 4. S4h R3b 5. P3f S4b 6. K6h K6b <BR>
-[ In general the rook plays an important role in the attacks. It is
-wise to move the king away from the area where the initial fights will
-be and both players act according to the Shogi proverb "keep the rook
-and king apart". ]
-</P><P>
-
- 7. K7h K7b 8. P5f P5d 9. G4i-5h G4a-5b <BR>
-[ Both players use their second gold general to build their castle. ]
-</P><P>
-
- 10. S6h <BR>
-[ In itself this move is not bad. However, it will become clear that
-black plans a quick attack and in that case it is wiser to omit this
-move. ]
-</P><P>
-
- 10... S5c 11. P1f P1d <BR>
-[ The advance of the edge pawns must be timed very well. The remark at
-black's tenth move applies here too: this move is good if black wants to
-play a slow game, because it eliminates a future B1e. ]
-</P><P>
-
- 12. P4f K8b 13. N3g S7b <BR>
-[ Black develops his knight in order to start an attack over the second,
-third and fourth files. White strengthens his king's position and
-awaits the attack. He aims at a counterattack as soon as black has
-broken through into the white camp. Probably white's breakthrough will
-take place later, but he has good compensation in the form of a stronger
-castle. This theme occurs very often in static rook versus ranging rook
-games. ]
-</P><P>
-
- 14. P4e R4b <BR>
-[ Black starts his attack and white puts up a very passive defence. His
-rook has a hard task now to penetrate the black position. Moreover, he
-blocks his own bishop. It seems much better to start a counterattack
-with 14... P3e, later to be followed by B2b, B5a or Bx4d in order to use
-his rook more actively. ]
-</P><P>
-
- 15. Px4d Sx4d 16. P*4e S5c <BR>
-[ 16... Sx4e is more active. A silver general is normally more valuable
-than a knight, but white gets two pawns in hand and black none, while
-the knight might come in handy for white too. ]
-</P><P>
-
- 17. Bx3c+ Nx3c 18. P2d Px2d <BR>
-[ Black threatens to break through and white has to consider taking the
-pawn on 2d or starting a counterattack with Nx4e. If he chooses the
-latter, black can play Px2c+ followed by +P3c. The disadvantage is the
-black "tokin" (=promoted pawn) that white will get in his camp; the
-advantage is that it will cost black two more moves to promote his rook.
-Because white did not trust that the result after engaging in a
-"semeai" (=mutual attack) with 18...Nx4e would give a positive result,
-he captured the pawn on 2d. Making the right decision in moments like
-this often makes the difference between a win and a loss: miss one
-attacking chance and you will be forced to defend the whole game until
-the unavoidable defeat; on the other hand, an unsound attack can destroy
-all "aji" (=potential, meaning possibilities, threats) without getting
-anything in return. ]
-</P><P>
-
- 19. Rx2d Nx4e 20. Nx4e Rx4e 21. R2a+ P*4g <BR>
-[ Now it becomes clear why black's 10. S6h was not good. Had this move
-been omitted, then white would not have had the time to play 13... S7b
-and after R2a+ the gold on 6a would hang. Thus black would have kept
-"sente" (=initiative). Instead of 21... P*4g, B*6d is a very good
-move, because after 22. P*2h black does not have a pawn in hand anymore
-and he is being threatened with the annoying 22... N*4f 23. G5g N3h+
-24. S4g +N4h also. Black can also counter 21... B*6d with 22. N*3g.
-White would then reply with 22... R4b 23. B*3c P*4g 24. Bx4b+ Sx4b. The
-white rook has played its role and instead of spending moves on saving
-it white starts to scatter black's defences by successive pawn drops on
-the fourth file: 25. Gx4g P*4f 26. G5g N*6e 27. G5h P4g+ 28. Gx4g P*4f.
-This analysis was provided by Kato Hifumi, 9-dan professional (the
-highest regular grade). Destroying the coherence of the enemy pieces
-(their shape) by dropping pawns is one of the most important Shogi
-techniques. With the actual move 21... P*4g white missed a good
-chance. ]
-</P><P>
-
- 22. Sx4g P*4f 23. B*3g Px4g+ 24. +Rx6a +Px3g <BR>
-[ 23. B*3g seems pointless, but a closer look reveals that it is
-actually quite mean. On move 24 white cannot capture black's "Ryu"
-(=dragon =promoted rook) with his silver: 24... Sx6a 25. N*7d K7b
-26. G*8b mate. By attacking the front of the white castle and
-threatening to mate him there, black has the chance to break down the
-white defences from the side. ]
-</P><P>
-
- 25. +Rx5b S*6b <BR>
-[ Here 25... B*4d would be much better, because it is defensive and
-attacking at the same time. After e.g. 26. G*4c Bx9i+ 27. Gx5c black
-threatens 28. +Rx7b Kx7b 29. S*6a K8b 30. S*7a Kx7a 31. G*7b mate.
-White is one move quicker, however. He has the following beautiful
-"tsume" (mating sequence where every move is check): 27... N*8f 28. Px8f
-S*8g 29. Kx8g B*9h 30. K7h Bx8i+ 31. K8g +B8i-8h 32. K9f L*9e mate.
-This illustrates the sharpness of Shogi: one move can make the
-difference between winning and losing. ]
-</P><P>
-
- 26. P*4f Rx4f <BR>
-[ This move eliminates white's last chances. 26... R4b 27. +Rx4b Sx4b
-28. R*4a seems annoying, but after 28... B*3c 29. S7g B*3b white wins
-the rook and with his "tokin" on 3g there still is some hope. ]
-</P><P>
-
- 27. N*6e +P4g <BR>
-[ White cannot defend anymore, so he starts a desperate attack. Black
-does not lose the right track, however. ]
-</P><P>
-
- 28. Nx5c+ +Px5h 29. +Nx6b +Px6h 30. Gx6h N*8f 31. Px8f B*6i 32. Gx6i
- R4h+ 33. N*6h +Rx6h 34. Gx6h S*8g 35. Kx8g N*9e 36. K7h Resigns <BR>
-[ White resigns here, because after 36... B*8g 27. K7g his attack has
-petered out. ]
-</P><P>
-
-<A NAME="Mating problems"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_14.html#SEC14"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_16.html#SEC16"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Mating problems</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Mating problems">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Mating problems">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC16"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_17.html#SEC17"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H2> 2.3 Mating problems </H2>
-<!--docid::SEC16::-->
-<P>
-
-One good way to improve at shogi is to solve mating problems. There are
-several types of these problems, but the most common is called a
-"tsume-shogi" problem, or "tsume" problem for short. In a tsume
-problem, all pieces that are not on the board are assumed to be in the
-opponent's hand (except for your King, which is usually not shown).
-Every move you make must be check until the final checkmate. Your
-opponent may play any piece on the board or drop any of his pieces in
-hand in order to prevent the mate. In a properly constructed tsume
-problem, all of your pieces on the board and in hand must be essential
-to the solution. One consequence of this is that all of your pieces in
-hand must be played during the solution. There should only be one
-correct solution for the given number of moves. Tsume problems use
-Japanese-style move numbering; thus, a problem where you move (and give
-check), your opponent moves, and you move to give checkmate is called a
-three-mover. Here is a really trivial three-mover:
-</P><P>
-
- 3 2 1 <BR>
-----------------+ <BR>
-| | | | a <BR>
-----------------+ <BR>
-| | | wK | b <BR>
-----------------+ <BR>
-| | | | c <BR>
-----------------+ <BR>
-| bN | | | d <BR>
-----------------+ <BR>
-| | | | e <BR>
-----------------+ <BR>
-| | bN | | f <BR>
-----------------+ <BR>
-</P><P>
-
-Black in hand: S, G
-</P><P>
-
-Here, Black plays G*2b, White plays K1c, and Black plays G*1d mate.
-More typical tsume problems range from 5 moves to arbitrarily high
-numbers of moves, and they can be quite brain-busting. Tsume problems
-may seem artificial, but in the closing stages of the game where both
-players have a lot of pieces in hand, it is often necessary to give
-check at every move, or else your opponent will start a counterattack
-and will mate you before you mate him. A tsume problem is a worst-case
-scenario for the attacker: you have to mate your opponent even though he
-has every piece not on the board in hand, which means you have to
-develop sharp attacking skills. Many more tsume problems can be found
-on the internet; I particularly recommend Patrick Davin's "Shogi
-Nexus" (see section <A HREF="gnushogi_21.html#SEC21">5. References and links</A>).
-</P><P>
-
-<A NAME="Shogi variants"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_17.html#SEC17"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Shogi variants</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Shogi variants">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Shogi variants">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC17"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_16.html#SEC16"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_18.html#SEC18"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H2> 2.4 Shogi variants </H2>
-<!--docid::SEC17::-->
-<P>
-
-Several historical variants of shogi exist. Most of these were invented
-before modern shogi (in some cases hundreds of years before), are much
-larger than modern shogi and are not played with drops. Thus, in many
-ways they are really more like giant chess games than like modern shogi.
-The only one of these games to have survived in Japan is Chu (middle)
-shogi, which is still played a little bit. Thanks to the efforts of
-George Hodges and John Fairbairn of the Shogi Association (two British
-shogi enthusiasts), these games were resurrected and rules and sets for
-them can still be purchased from George Hodges (see section <A HREF="gnushogi_21.html#SEC21">5. References and links</A>). I hope to eventually extend GNU shogi so that it can play at
-least some of these games. There are also several non-historical
-variants of shogi; I don't know much about them but you can find
-information about them on the internet (see section <A HREF="gnushogi_21.html#SEC21">5. References and links</A>).
-</P><P>
-
-The historical variants include:
-</P><P>
-
-<OL>
-
-<LI>
-Tori (bird) shogi, played on a 7x7 board with 32 pieces in all; this is
-the only variant that is known to have been played with drops.
-<P>
-
-<LI>
-Wa shogi, played on an 11x11 board with 54 pieces. This game can be
-played with or without drops but the historical evidence favors the view
-that it was played without drops. However, most people who have tried
-it claim it is a much better game with drops, being even more intricate
-than standard shogi.
-<P>
-
-<LI>
-Chu (middle) shogi, played on a 12x12 board with 92 pieces. This was
-(and is) by far the most popular of the variants, and has 21 different
-kinds of pieces in the starting line-up alone (along with several others
-that appear upon promotion). Unlike modern shogi, there are a
-tremendous number of ranging pieces and the game is definitely not
-played with drops. There is also an amazing piece called the Lion which
-has a double king move and can capture two pieces at once! Chu shogi
-has a small but fanatical following, some of whom consider it better
-than modern shogi.
-<P>
-
-<LI>
-Dai (great) shogi, played on a 15x15 board with 130 pieces. Other than
-the larger board, this game is very similar to Chu shogi.
-<P>
-
-<LI>
-Tenjiku (exotic) shogi, played on a 16x16 board with 176 pieces. This
-game is possibly the most complex tactical game in existence. There are
-many astoundingly powerful pieces, including one (the Fire Demon) that
-can capture up to eight opposing pieces in a single move! Despite the
-size of the game, checkmates can occur very suddenly (and often very
-early on) if one player makes a wrong move. Tenjiku also has a small
-but fanatical following, one of whom (Colin Adams) has written a book on
-the game which is available for download at
-<A HREF="http://www.colina.demon.co.uk/tenjiku.html">http://www.colina.demon.co.uk/tenjiku.html</A>.
-<P>
-
-<LI>
-Dai-dai (great-great) shogi, played on a 17x17 board with 192 pieces.
-The opening setup alone has 64 different kinds of pieces! This game and
-the larger ones that follow sound pretty outlandish, but they have
-actually been played; a game of Dai-dai can supposedly be played in
-about 12 hours.
-<P>
-
-<LI>
-Maka-dai-dai (great-great-great) shogi, played on a 19x19 board with 192
-pieces. For those for whom Dai-dai shogi is just too small :-)
-<P>
-
-<LI>
-Tai (grand) shogi, played on a 25x25 board with 354 pieces! Until
-recently, this was thought to be the biggest chess game ever devised,
-but now there is...
-<P>
-
-<LI>
-Kyoku tai (extremely grand?) shogi, played on a 36x36 board with 402
-pieces. The rules for this have just been unearthed in an old Japanese
-book. Hopefully someone will soon organize a postal Kyoku tai shogi
-championship; maybe their distant ancestors could finish it :-)
-<P>
-
-It is thought that the really huge games (Dai-dai and up) were never
-really played to any significant extent (gee, wonder why?) and were
-devised merely so that the creators could have the fun of inventing
-enormous games, amazing their friends and confounding their enemies.
-However, the games up to Tenjiku shogi at least appear to be quite
-playable, assuming one has the time.
-</P><P>
-
-</OL>
-<P>
-
-<A NAME="Differences between shogi and chess"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_16.html#SEC16"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_18.html#SEC18"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Differences between shogi and chess</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Differences between shogi and chess">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Differences between shogi and chess">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC18"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_17.html#SEC17"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H2> 2.5 Differences between shogi and chess </H2>
-<!--docid::SEC18::-->
-<P>
-
-Some differences between shogi and international chess have been
-mentioned elsewhere in this document; I summarize them here for people
-who are interested in game comparisons. I won't try to deal with the
-thorny question of which game is "better" although my bias may have
-already come through :-) In fact, the drop rule makes the two games so
-different in character that arguing over which game is better is like
-comparing apples to oranges (you'd be better off comparing chess to Chu
-shogi (see section <A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A>). However, I believe that if you are a
-chess fan you'll really like shogi as well, and shogi is also popular
-with many people who don't particularly like chess.
-</P><P>
-
-Here are the significant differences between chess and shogi:
-</P><P>
-
-<OL>
-
-<LI>
-In shogi, captured pieces become the property of the capturer and can
-re-enter play by being dropped onto almost any vacant square. In chess,
-captured pieces are out of the game. Thus, in shogi, piece exchanges
-complicate the play significantly while in chess they simplify it.
-<P>
-
-<LI>
-The shogi board is 9x9; the chess board is 8x8.
-<P>
-
-<LI>
-Shogi has five pieces with no counterpart in chess: the gold and silver
-generals, the lance, the promoted rook and the promoted bishop. Chess
-has one piece with no counterpart in shogi: the queen. The knight's
-move in shogi is much more restrictive than in chess. Pieces in shogi
-generally have a much smaller range of movement than in chess (unless
-they are in hand).
-<P>
-
-<LI>
-In shogi, all pieces except the gold general and the king can promote,
-but only to one kind of piece. Promotion is easier in shogi because the
-promotion zone is closer to the starting position of the pieces
-(especially pawns). In chess, only the pawn can promote, but it can
-promote to any other piece except the king.
-<P>
-
-<LI>
-In shogi, pawns capture the same way they move. There is no initial
-two-space pawn move and hence no <EM>en-passant</EM> captures. In chess,
-pawns capture diagonally which means that opposing pawns can block each
-other.
-<P>
-
-<LI>
-In shogi, you only have one rook and one bishop. Note that the bishop
-is not restricted to only one "color" square (squares in shogi aren't
-colored, but never mind) because promoted bishops can also move one
-square orthogonally.
-<P>
-
-<LI>
-There is no special castling move in shogi. The term "castle" is
-used in shogi to denote a defensive formation consisting of (usually)
-three generals which protect the king. There are many such castles
-(about 40 or so have names). See section <A HREF="gnushogi_15.html#SEC15">2.2 Sample game</A>.
-<P>
-
-<LI>
-Draws are much rarer in shogi than in chess. Perpetual check is not
-allowed. Stalemate is a virtual impossibility, and is a loss for the
-stalematee.
-<P>
-
-<LI>
-Since pieces are never out of play in shogi, chess-type endgames
-involving only a few pieces do not occur.
-<P>
-
-<LI>
-Shogi games are generally longer than chess games (about 60-70 moves is
-typical).
-<P>
-
-<LI>
-Shogi has a well-developed handicap system which is in general use;
-chess does not.
-<P>
-
-</OL>
-<P>
-
-The effects of all these differences on play include (in my opinion):
-</P><P>
-
-<OL>
-
-<LI>
-Piece/pawn structures in chess are more rigid than in shogi. Pawns
-block each other and pawns, once advanced, cannot ever retreat. In
-shogi, you can repair the hole caused by a pawn advance by exchanging
-the pawn and dropping it back where you want it. Thus shogi is more
-fluid than chess and less "structural".
-<P>
-
-<LI>
-Counterattack is MUCH more common in shogi than in chess. Games
-typically end in mutual mating attacks, where each player is trying to
-checkmate the other player before being checkmated himself. This makes
-tempo incredibly important and also makes sacrificial play quite common.
-<P>
-
-<LI>
-Attacks involving only ranging pieces are more a feature of chess than
-of shogi. A shogi attack typically uses a ranging piece or pieces to
-support an attack by short-range pieces (especially generals). It is
-very rare to mate a king with a non-adjacent ranging piece in shogi
-since the player whose king is threatened can almost always interpose by
-dropping a piece.
-<P>
-
-</OL>
-<P>
-
-<A NAME="gnushogi"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_17.html#SEC17"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: gnushogi</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: gnushogi">
-<META NAME="keywords" CONTENT="GNU Shogi manual: gnushogi">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC19"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_18.html#SEC18"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_20.html#SEC20"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_20.html#SEC20"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1> 3. gnushogi </H1>
-<!--docid::SEC19::-->
-<P>
-
-This section describes how to run the "gnushogi" program.
-</P><P>
-
-SYNOPSIS
-
-</P><P>
-
-gnushogi [ [[-]a] [-b bookfile] [-B binbookfile] [-C] [-h langfile]
-[-L langfile] [-r length] [-R] [-s pathname] [-l pathname] [-S binbooksize]
-[-t] [-c size] [-T size] [-v] [-x] [-X] arg1 arg2 ]
-</P><P>
-
-DESCRIPTION
-</P><P>
-
-GNU shogi (gnushogi) plays a game of japanese chess (shogi) against the
-user or it plays against itself.
-</P><P>
-
-At startup gnushogi reads the binbook file if it is present. It then
-looks for a book file. If it is present it adds its contents to the
-binbook data. If the binbook file is writable a new combined binbook
-file is written.
-</P><P>
-
-Gnushogi is a modified version of the gnuchess program. It has a simple
-alphanumeric board display, or it can be used with the xshogi program
-under X windows. The program gets its opening moves from the file
-gnushogi.bbk which is located in a directory specified in the Makefile.
-To invoke the program type:
-</P><P>
-
-<DL COMPACT>
-
-<DT><SAMP>`gnushogi -C'</SAMP>
-<DD>simple curses based version
-<P>
-
-<DT><SAMP>`gnushogi -X (or just gnushogi)'</SAMP>
-<DD>xshogi compatible version
-<P>
-
-<DT><SAMP>`gnushogi -R'</SAMP>
-<DD>raw test display version
-</DL>
-<P>
-
-TIME CONTROLS
-</P><P>
-
-If one argument is given, it is the search time per move in
-[minutes:]seconds. So gnushogi 30 will generate one move every 30
-seconds, while gnushogi 5:00 will generate one move every 5 minutes.
-</P><P>
-
-If two or more arguments are given, they will be used to set tournament
-time controls with the first argument of each pair being the number of
-moves and the second being the total clock time in minutes[:seconds].
-Thus, entering gnushogi 60 5 will set the clocks for 5 minutes (300
-seconds) for the first 60 moves, and gnushogi 30 3:30 will allow 3
-minutes and 30 seconds for 30 moves.
-</P><P>
-
-gnushogi 30 5 1 :30 will allow 5 minutes for the first 30 moves and 30
-seconds for each move after that. Up to 4 pairs of controls may be
-specified.
-</P><P>
-
-If no argument is given the program will prompt the user for level of
-play.
-</P><P>
-
-For use with xshogi see the documentation on that program.
-See section <A HREF="gnushogi_20.html#SEC20">4. xshogi</A>.
-</P><P>
-
-BOOK
-</P><P>
-
-The book gnushogi.tbk consists of a sequence of openings. An opening
-begins with a line starting with a # (the rest of the line is a comment).
-Following this is a series of moves in algebraic notation alternating
-between black and white separated by whitespace. A move may have a ?
-after it indicating this move should never be made in this position. Moves
-are stored as position:move so transpositions between openings can take
-place.
-</P><P>
-
-HASHFILE
-</P><P>
-
-The hashfile if created should be on the order of 4 megabytes; you can
-create such a hashfile by typing "gnushogi -c 22" (see below). This
-file contains positions and moves learned from previous games. If a
-hashfile is used the computer makes use of the experience it gained in
-past games. Tests run so far show that it plays no worse with the
-hashfile than without, but it is not clear yet whether it provides a
-real advantage.
-</P><P>
-
-LEGAL MOVES
-</P><P>
-
-Note: Piece letters are determined by the language file. What is
-specified here is the default (English).
-</P><P>
-
-Once gnushogi is invoked, the program will display the board and prompt
-the user for a move. To enter a move, use the notation 7g7f where the
-first letter-number pair indicates the origin square and the second
-letter-number pair indicates the destination square. An alternative is
-to use the notation P7f where the first letter indicates the piece type
-(P,L,N,S,G,B,R,K). To promote append a + the type of the new piece to
-the move, as in 2d2c+ or P2c+. Note that you must use capital letters
-for the pieces by default.
-</P><P>
-
-COMMAND-LINE OPTIONS
-</P><P>
-
-<DL COMPACT>
-
-<DT><SAMP>`-a'</SAMP>
-<DD>Do not search on opponent's time.
-<P>
-
-<DT><SAMP>`a'</SAMP>
-<DD>Do search on opponent's time.
-<P>
-
-<DT><SAMP>`-b <VAR>bookfile</VAR>'</SAMP>
-<DD>Use bookfile for opening book.
-<P>
-
-<DT><SAMP>`-B <VAR>binbookfile</VAR>'</SAMP>
-<DD>Use binbookfile for binary opening book.
-<P>
-
-<DT><SAMP>`-c <VAR>size</VAR>'</SAMP>
-<DD>Create a new HASHFILE. File size is 2^size entries of approximately 65+?
-bytes.
-<P>
-
-<DT><SAMP>`-C'</SAMP>
-<DD>Use curses-based display mode.
-<P>
-
-<DT><SAMP>`-h'</SAMP>
-<DD>Do not use hashfile.
-<P>
-
-<DT><SAMP>`h'</SAMP>
-<DD>Do use hashfile.
-<P>
-
-<DT><SAMP>`-l <VAR>pathname</VAR>'</SAMP>
-<DD>Pathname of the loadfile used with get or xget.
-<P>
-
-<DT><SAMP>`-L <VAR>lang</VAR>'</SAMP>
-<DD>Use language lang from the file gnushogi.lang. If -L is not specified
-it uses the first language in the file.
-<P>
-
-<DT><SAMP>`-P <VAR>plylevels</VAR>'</SAMP>
-<DD>Number of plys to include in the binbookfile. For generating a
-binbookfile.
-<P>
-
-<DT><SAMP>`-r <VAR>length</VAR>'</SAMP>
-<DD>Rehash <EM>length</EM> times in searching entries for position in
-transposition table.
-<P>
-
-<DT><SAMP>`-R'</SAMP>
-<DD>Use raw text display mode. This can be used for dumb terminals or for
-systems that don't have curses.
-<P>
-
-<DT><SAMP>`-s <VAR>pathname</VAR>'</SAMP>
-<DD>Pathname of the save file to use with the save command.
-<P>
-
-<DT><SAMP>`-S <VAR>size</VAR>'</SAMP>
-<DD>Size of binbookfile for memory based books. For creating a binbookfile.
-<P>
-
-<DT><SAMP>`-t'</SAMP>
-<DD>Show statistics for HASHFILE.
-<P>
-
-<DT><SAMP>`-T <VAR>size</VAR>'</SAMP>
-<DD>Set the transposition table size to 2^size entries.
-<P>
-
-<DT><SAMP>`-v'</SAMP>
-<DD>Show version and patchlevel.
-<P>
-
-<DT><SAMP>`-x <VAR>value</VAR>'</SAMP>
-<DD>Use value as the evaluation window xwndw.
-<P>
-
-<DT><SAMP>`-X'</SAMP>
-<DD>Use xshogi display mode (the default).
-<P>
-
-</DL>
-<P>
-
-COMMANDS
-</P><P>
-
-In addition to legal moves, the following commands can be entered at the
-gnushogi prompt. Note: command names are determined by the language
-file and may vary with the implementation. The default language is
-English.
-</P><P>
-
-<DL COMPACT>
-
-<DT><SAMP>`alg'</SAMP>
-<DD>allow algebraic input (not implemented).
-<P>
-
-<DT><SAMP>`Awindow'</SAMP>
-<DD>change Alpha window (default score + 90).
-<P>
-
-<DT><SAMP>`Bwindow'</SAMP>
-<DD>change Beta window (default score - 90).
-<P>
-
-<DT><SAMP>`beep'</SAMP>
-<DD>toggles beeping after each move (default: on).
-<P>
-
-<DT><SAMP>`bd'</SAMP>
-<DD>updates the current board position on the display.
-<P>
-
-<DT><SAMP>`book'</SAMP>
-<DD>turns off use of the opening library.
-<P>
-
-<DT><SAMP>`both'</SAMP>
-<DD>causes the computer to play both sides of a shogi game.
-<P>
-
-<DT><SAMP>`black'</SAMP>
-<DD>causes the computer to play as White, if the computer was to move
-first.
-<P>
-
-<DT><SAMP>`bsave'</SAMP>
-<DD>saves a game to disk as a book textfile. The program will prompt the
-user for a file name.
-<P>
-
-<DT><SAMP>`gamein'</SAMP>
-<DD>toggles game mode time control. Assumes the time specified for time
-control is the time for a complete game. Input with the level command
-should be the game time and the expected number of moves in a game. go
-command must be given.
-<P>
-
-<DT><SAMP>`coords'</SAMP>
-<DD>show coordinates on the display (visual only).
-<P>
-
-<DT><SAMP>`contempt'</SAMP>
-<DD>allows the value of <EM>contempt</EM> to be modified.
-<P>
-
-<DT><SAMP>`debug'</SAMP>
-<DD>asks for a piece as color piece, as wb or bn, and shows its calculated
-value on each square.
-<P>
-
-<DT><SAMP>`debuglevel'</SAMP>
-<DD>sets level of debugging output if compiled with debug options.
-<P>
-
-<DT><SAMP>`depth'</SAMP>
-<DD>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. If depth
-is set to (say) 4 ply, the program will 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). If you set a maximum time per
-move and also use the depth command, the search will stop at the
-specified time or the specified depth, whichever comes first.
-<P>
-
-<DT><SAMP>`easy'</SAMP>
-<DD>toggles easy mode (thinking on opponents time) on and off. The default
-is easy mode ON. If easy mode is disabled, the keyboard is polled for
-input every so often and when input is seen the search is terminated. It
-may also be terminated with a sigint.
-<P>
-
-<DT><SAMP>`edit'</SAMP>
-<DD>allows the user to set up a board position.
-<UL>
-
-<LI>#
-clear the board.
-<P>
-
-<LI>c
-toggle piece color.
-<P>
-
-<LI>.
-command will exit setup mode.
-<P>
-
-<LI>p3b
-place a pawn on 3b
-<P>
-
-<LI>p3b+
-place a promoted pawn on 3b
-<P>
-
-<LI>p*
-place a pawn in hand (among the captured pieces)
-<P>
-
-</UL>
-<P>
-
-Pieces are entered by typing a letter (p,l,n,s,g,b,r,k) for
-the piece followed by the coordinate. Here, letter case is ignored.
-</P><P>
-
-The usual warning about the language file applies.
-</P><P>
-
-<DT><SAMP>`exit'</SAMP>
-<DD>exits gnushogi.
-<P>
-
-<DT><SAMP>`first'</SAMP>
-<DD>tells the computer to move first. Computer begins searching for a move.
-(same as "go").
-<P>
-
-<DT><SAMP>`force'</SAMP>
-<DD>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 "black" or
-"white" commands.
-<P>
-
-<DT><SAMP>`get'</SAMP>
-<DD>retrieves a game from disk. The program will prompt the user for a file
-name.
-<P>
-
-<DT><SAMP>`go'</SAMP>
-<DD>tells the computer to move first. Computer begins searching for a move.
-(same as "first").
-<P>
-
-<DT><SAMP>`hash'</SAMP>
-<DD>use/don't use hashfile.
-<P>
-
-<DT><SAMP>`hashdepth'</SAMP>
-<DD>allows the user to change the minimum depth for using the hashfile and
-the number of moves from the beginning of the game to use it.
-<P>
-
-<DT><SAMP>`help'</SAMP>
-<DD>displays a short description of the commands and the current status of
-options.
-<P>
-
-<DT><SAMP>`hint'</SAMP>
-<DD>causes the program to supply the user with its predicted move.
-<P>
-
-<DT><SAMP>`level'</SAMP>
-<DD>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.
-<P>
-
-<DT><SAMP>`list'</SAMP>
-<DD>writes the game moves and some statistics on search depth, nodes, and
-time to the file "shogi.lst".
-<P>
-
-<DT><SAMP>`material'</SAMP>
-<DD>toggle material flag - draws on no pawns and both sides < rook.
-<P>
-
-<DT><SAMP>`new'</SAMP>
-<DD>starts a new game.
-<P>
-
-<DT><SAMP>`p'</SAMP>
-<DD>evaluates the board and shows the point score for each piece. The total
-score for a position is the sum of these individual piece scores.
-<P>
-
-<DT><SAMP>`post'</SAMP>
-<DD>causes the program to display the principal variation and the score
-during the search. A score of 100 is equivalent to a 1 pawn advantage
-for the computer.
-<P>
-
-<DT><SAMP>`quit'</SAMP>
-<DD>exits the game.
-<P>
-
-<DT><SAMP>`random'</SAMP>
-<DD>causes the program to randomize its move selection slightly.
-<P>
-
-<DT><SAMP>`rcptr'</SAMP>
-<DD>set recapture mode.
-<P>
-
-<DT><SAMP>`remove'</SAMP>
-<DD>backout the last level for both sides. Equal to 2 undo's.
-<P>
-
-<DT><SAMP>`reverse'</SAMP>
-<DD>causes the board display to be reversed. That is, the Black's pieces will
-now appear at the top of the board.
-<P>
-
-<DT><SAMP>`rv'</SAMP>
-<DD>reverse board display.
-<P>
-
-<DT><SAMP>`save'</SAMP>
-<DD>saves a game to disk. The program will prompt the user for a file name.
-<P>
-
-<DT><SAMP>`switch'</SAMP>
-<DD>causes the program to switch places with the opponent and begin
-searching.
-<P>
-
-<DT><SAMP>`test'</SAMP>
-<DD>performs some speed tests for MoveList and CaptureList generation, and
-ScorePosition position scoring for the current board.
-<P>
-
-<DT><SAMP>`time'</SAMP>
-<DD>set computer's time remaining, intended for synchronizing clocks among
-multiple players.
-<P>
-
-<DT><SAMP>`tsume'</SAMP>
-<DD>toggle tsume mode. In tsume mode, not all possible moves will be
-generated. If a king is in check, only moves that get the king out of
-check are generated. If the king is not in check, only moves that give
-check to the opponent's king are generated.
-<P>
-
-<DT><SAMP>`undo'</SAMP>
-<DD>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).
-<P>
-
-<DT><SAMP>`white'</SAMP>
-<DD>causes the computer to play as Black; if the computer is to move
-first the go command must be given.
-<P>
-
-<DT><SAMP>`xget'</SAMP>
-<DD>read an xshogi position file.
-<P>
-
-<DT><SAMP>`xsave'</SAMP>
-<DD>save as an xshogi position file.
-<P>
-
-<DT><SAMP>`xwndw'</SAMP>
-<DD>change X window. The window around alpha/beta used to determine whether
-the position should be scored or just estimated. Note: this has
-<EM>nothing</EM> to do with xshogi or X windows; the terms are completely
-separate.
-<P>
-
-</DL>
-<P>
-
-<A NAME="xshogi"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_18.html#SEC18"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_20.html#SEC20"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_20.html#SEC20"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: License</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: License">
-<META NAME="keywords" CONTENT="GNU Shogi manual: License">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC2"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_1.html#SEC1"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_3.html#SEC3"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_1.html#SEC1"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1> GNU GENERAL PUBLIC LICENSE </H1>
-<!--docid::SEC2::-->
-<center>
- Version 2, June 1991
-</center>
-<P>
-
-<TABLE><tr><td> </td><td class=display><pre style="font-family: serif">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.
-</pre></td></tr></table></P><P>
-
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: xshogi</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: xshogi">
-<META NAME="keywords" CONTENT="GNU Shogi manual: xshogi">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC20"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_21.html#SEC21"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_21.html#SEC21"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1> 4. xshogi </H1>
-<!--docid::SEC20::-->
-<P>
-
-This section describes how to run the "xshogi" program.
-</P><P>
-
-SYNOPSIS
-</P><P>
-
-xshogi [ options ]
-</P><P>
-
-DESCRIPTION
-</P><P>
-
-xshogi provides an X11/Xt/Athena Widgets user interface for gnushogi.
-With xshogi you can play gnushogi, set up arbitrary positions, force
-variations, or watch xshogi manage a game between two shogi programs.
-Furthermore, it can be used as an interface between two players on
-different displays.
-</P><P>
-
-xshogi can also be used as a shogi board to play out games. It will
-read through a game file or allow a player to play through a variation
-manually (force mode). This is useful for keeping track of email postal
-games or browsing games off the net.
-</P><P>
-
-After starting xshogi, you can make moves by pressing mouse button 1
-while the cursor is over a square with your piece on it and dragging the
-mouse to another square. If the move is illegal, gnushogi will not
-allow it. xshogi will then retract the move.
-</P><P>
-
-COMMAND-LINE OPTIONS
-</P><P>
-
-The following command line options also correspond to X resources that
-you can set in your .Xdefaults file.
-</P><P>
-
-<DL COMPACT>
-
-<DT><SAMP>`[standard Xt options]'</SAMP>
-<DD>xshogi accepts standard Xt options like -display, -geometry, and
--iconic.
-<P>
-
-<DT><SAMP>`-tc or -timeControl minutes[:seconds]'</SAMP>
-<DD>Amount of time for a set of moves determined by movesPerSession. If
-this number of moves is played within the time control period, xshogi
-resets the time clocks. Default: 5 minutes.
-<P>
-
-<DT><SAMP>`-mps or -movesPerSession moves'</SAMP>
-<DD>Number of moves in a time control period. Default: 40 moves.
-<P>
-
-<DT><SAMP>`-st or -searchTime minutes[:seconds]'</SAMP>
-<DD>Tell gnushogi to spend at most the given amount of time searching for
-each of its moves. Without this option, gnushogi chooses its search
-time based on the number of moves and amount of time remaining until the
-next time control. Setting this option also sets -clockMode to False.
-<P>
-
-<DT><SAMP>`-sd or -searchDepth number'</SAMP>
-<DD>Tell gnushogi to look ahead at most the given number of moves when
-searching for a move to make. Without this option, gnushogi chooses
-its search depth based on the number of moves and amount of time
-remaining until the next time control. Setting this option also sets
--clockMode to False.
-<P>
-
-<DT><SAMP>`-clock or -clockMode (True | False)'</SAMP>
-<DD>Determines whether or not to use the clock. If clockMode is False, the
-clock does not run, but the side that is to play next is still
-highlighted.
-<P>
-
-<DT><SAMP>`-td or -timeDelay seconds'</SAMP>
-<DD>Time delay between moves during "Load Game". This doesn't have to be
-a round number. Try -td 0.4. Default: 1 second.
-<P>
-
-<DT><SAMP>`-nsp or -noShogiProgram (True | False)'</SAMP>
-<DD>If this option is True, xshogi acts as a passive shogi board; it does
-not try to start a shogi program, not even to check whether moves made
-in Force mode are legal. It also sets -clockMode to False. Default:
-False.
-<P>
-
-<DT><SAMP>`-fsp or -firstShogiProgram program'</SAMP>
-<DD>Name of first shogi program. In matches between two machines, this
-program plays white. Default: "gnushogi".
-<P>
-
-<DT><SAMP>`-ssp or -secondShogiProgram program'</SAMP>
-<DD>Name of second shogi program, if needed. In matches between two
-machines, this program plays black; otherwise it is not started.
-Default: "gnushogi".
-<P>
-
-<DT><SAMP>`-fh or -firstHost host'</SAMP>
-<DD>Name of host the first shogi program plays on. Default: "localhost".
-<P>
-
-<DT><SAMP>`-sh or -secondHost host'</SAMP>
-<DD>Name of host the second shogi program plays on. Default: "localhost".
-<P>
-
-<DT><SAMP>`-rsh or -remoteShell shell_name'</SAMP>
-<DD>Some systems do not use rsh as the remote shell. This option allows a
-user to name the remote shell command. This should be done in the
-resource file.
-<P>
-
-<DT><SAMP>`-mm or -matchMode (False | Init | Position | Opening)'</SAMP>
-<DD>Automatically run a game between firstShogiProgram and
-secondShogiProgram. If matchMode is set to Init, xshogi will start the
-game with the initial shogi position. If matchMode is set to Position,
-xshogi will start the game with the position specified by the
-loadPositionFile resource. If matchMode is set to Opening, xshogi will
-play out the opening moves specified by the -loadGameFile resource. If
-the -saveGameFile resource is set, a move record for the match will be
-saved in the specified file. Default: "False".
-<P>
-
-<DT><SAMP>`-lgf or -loadGameFile file'</SAMP>
-<DD>Name of file to read a game record from. Game files are found in the
-directory named by the SHOGIDIR environment variable. If this variable
-is not set, the current directory is used unless the file name starts
-with a /.
-<P>
-
-<DT><SAMP>`-lpf or -loadPositionFile file'</SAMP>
-<DD>Name of file to read a game position from. Position files are found in
-the directory named by the SHOGIDIR environment variable. If this
-variable is not set, the current directory is used unless the file name
-starts with a /.
-<P>
-
-<DT><SAMP>`-sgf or -saveGameFile file'</SAMP>
-<DD>Name of file to save a game record to. Game files are saved in the
-directory named by the SHOGIDIR environment variable. If this variable
-is not set, the current directory is used unless the file name starts
-with a /.
-<P>
-
-<DT><SAMP>`-spf or -savePositionFile file'</SAMP>
-<DD>Name of file to save a game position to. Position files are saved in
-the directory named by the SHOGIDIR environment variable. If this
-variable is not set, the current directory is used unless the file name
-starts with a /.
-<P>
-
-<DT><SAMP>`-coords or -showCoords (True | False)'</SAMP>
-<DD>If this option is True, xshogi displays algebraic coordinates along the
-board's left and bottom edges. The default is False. The coordFont
-resource specifies what font to use.
-<P>
-
-<DT><SAMP>`-mono or -monoMode (True | False)'</SAMP>
-<DD>Determines whether xshogi displays its pieces and squares with two
-colors or four. You shouldn't have to specify monochrome. xshogi will
-determine if this is necessary.
-<P>
-
-<DT><SAMP>`-pc or -pieceColor color'</SAMP>
-<DD>Color specification for pieces suitable for XParseColor().
-Default: #FFFFD7.
-<P>
-
-<DT><SAMP>`-sc or -squareColor color'</SAMP>
-<DD>Same for squares. Default: #EBDFB0.
-<P>
-
-<DT><SAMP>`-wps or -westernPieceSet (True | False)'</SAMP>
-<DD>Choose the Western style piece set.
-<P>
-
-<DT><SAMP>`-npb or -normalPawnBitmap file'</SAMP>
-<DD><DT><SAMP>`-nnb or -normalKnightBitmap file'</SAMP>
-<DD><DT><SAMP>`-nbb or -normalBishopBitmap file'</SAMP>
-<DD><DT><SAMP>`-nrb or -normalRookBitmap file'</SAMP>
-<DD><DT><SAMP>`-nkb or -normalKingBitmap file'</SAMP>
-<DD>Names of the bitmap files for the bitmap piece icons.
-<P>
-
-<DT><SAMP>`-rpb or -reversePawnBitmap file'</SAMP>
-<DD><DT><SAMP>`-rnb or -reverseKnightBitmap file'</SAMP>
-<DD><DT><SAMP>`-rbb or -reverseBishopBitmap file'</SAMP>
-<DD><DT><SAMP>`-rrb or -reverseRookBitmap file'</SAMP>
-<DD><DT><SAMP>`-rkb or -reverseKingBitmap file'</SAMP>
-<DD>Names of the bitmap files for the outline piece icons.
-<P>
-
-<DT><SAMP>`-debug or -debugMode (True | False)'</SAMP>
-<DD>Turns on debugging printout.
-<P>
-
-</DL>
-<P>
-
-OTHER X RESOURCES
-</P><P>
-
-<DL COMPACT>
-
-<DT><SAMP>`initString'</SAMP>
-<DD>The actual string that is sent to initialize the shogi program can be
-set from .Xdefaults. It can't be set from the command line because of
-syntax problems. The default value is "new\nbeep\nrandom\neasy\n".
-The "new" and "beep" commands are required. You can remove the
-"random" command if you like; including it causes gnushogi to
-randomize its move selection slightly so that it doesn't play the same
-moves in every game. Even without "random", gnushogi randomizes its
-choice of moves from its opening book. You can also remove "easy" if
-you like; including it toggles easy mode off, causing gnushogi to think
-on your time. That is, if "easy" is included in the initString, GNU
-Shogi thinks on your time; if not, it does not. (Yes, this does seem
-backwards, doesn't it.) You can also try adding other commands to the
-initString; see the gnushogi documentation (see section <A HREF="gnushogi_19.html#SEC19">3. gnushogi</A>) for
-details.
-<P>
-
-<DT><SAMP>`blackString and whiteString'</SAMP>
-<DD>These resources control what is sent when the Machine Black and Machine
-White buttons are selected. This is mostly for compatibility with
-obsolete versions of gnushogi.
-<P>
-
-Alternate bitmaps for piece icons can be specified either by choosing
-one of the built-in sets or with the file name resources described
-above. There are three built-in sets of piece bitmaps available, large
-(the default), medium, or small. It is easiest to select the set you
-prefer in the .Xdefaults file:
-</P><P>
-
- XShogi*boardSize: Medium
-</P><P>
-
-The font used for button labels and comments can be changed in the
-.Xdefaults file. You may want to choose a smaller font if you are using
-the small pieces:
-</P><P>
-
- XShogi*font: helvetica_oblique12
-</P><P>
-
-The font used for coordinates (when the showCoords option is True) can
-be set similarly:
-</P><P>
-
- XShogi*coordFont: helvetica_10
-</P><P>
-
-If you are using a grayscale monitor, try setting the colors to:
-</P><P>
-
- XShogi*pieceColor: gray100 <BR>
- XShogi*squareColor: gray60 <BR>
-</P><P>
-
-</DL>
-<P>
-
-COMMAND BUTTONS AND KEYS
-</P><P>
-
-<DL COMPACT>
-
-<DT><SAMP>`Quit'</SAMP>
-<DD>Quits xshogi. Q or q is a keyboard equivalent.
-<P>
-
-<DT><SAMP>`Reset'</SAMP>
-<DD>Resets xshogi to the beginning of a shogi game. It also deselects any
-game or position files.
-<P>
-
-<DT><SAMP>`Flip View'</SAMP>
-<DD>inverts the view of the shogi board.
-<P>
-
-<DT><SAMP>`Hint'</SAMP>
-<DD>displays a move hint from gnushogi.
-<P>
-
-<DT><SAMP>`Load Game'</SAMP>
-<DD>plays a game from a record file. If no file is specified a popup dialog
-asks for a filename. Game files are found in the directory named by the
-SHOGIDIR environment variable. If this variable is not declared then
-the current directory is used unless the file name starts with a /. G
-or g is a keyboard equivalent. The game file parser will accept almost
-any file that contains moves in algebraic notation. If the first line
-begins with `#', it is assumed to be a title and is displayed. Text
-enclosed in parentheses or square brackets is assumed to be commentary
-and is displayed in a pop-up window. Any other text in the file is
-ignored.
-<P>
-
-<DT><SAMP>`Load Position'</SAMP>
-<DD>sets up a position from a position file. If no file is specified a
-popup dialog asks for a filename. Position files are found in the
-directory named by the SHOGIDIR environment variable. If this variable
-is not declared then the current directory is used unless the file name
-starts with a /. Position files must be in the format that the Save
-Position command writes.
-<P>
-
-<DT><SAMP>`Save Game'</SAMP>
-<DD>saves a game to a record file. If no file is specified a popup dialog
-asks for a filename. If the filename exists, the user is asked whether
-the current game record is be appended to this file or if the file
-should be replaced. Game files are saved in the directory named by the
-SHOGIDIR environment variable. If this variable is not declared then
-the current directory is used unless the file name starts with a /.
-Game files are human-readable, and can also be read back by the Load
-Game command. Furthermore, they are accepted as gnushogi text bookfiles.
-<P>
-
-<DT><SAMP>`Save Position'</SAMP>
-<DD>saves a position to a position file. If no file is specified a popup
-dialog asks for a filename. Position files are saved in the directory
-named by the SHOGIDIR environment variable. If this variable is not
-declared then the current directory is used unless the file name starts
-with a /. Position files are human-readable, and can also be read back
-by the Load Position command.
-<P>
-
-<DT><SAMP>`Machine White'</SAMP>
-<DD>forces gnushogi to play white.
-<P>
-
-<DT><SAMP>`Machine Black'</SAMP>
-<DD>forces gnushogi to play black.
-<P>
-
-<DT><SAMP>`Force Moves'</SAMP>
-<DD>forces a series of moves. That is, gnushogi stops playing and xshogi
-allows you to make moves for both white and black.
-<P>
-
-<DT><SAMP>`Two Machines'</SAMP>
-<DD>plays a game between two computer programs.
-<P>
-
-<DT><SAMP>`Forward'</SAMP>
-<DD>moves forward through a series of remembered moves. F or f is a
-keyboard equivalent.
-<P>
-
-<DT><SAMP>`Backward'</SAMP>
-<DD>moves backward through a series of remembered moves. As a side effect,
-puts xshogi into Force Moves mode. B or b is a keyboard equivalent.
-<P>
-
-<DT><SAMP>`Pause'</SAMP>
-<DD>pauses the clocks or (in Load Game mode) pauses the game being loaded.
-Press Pause again to continue. P or p is a keyboard equivalent.
-<P>
-
-<DT><SAMP>`Edit Position'</SAMP>
-<DD>lets you set up an arbitrary board position. Use mouse button 1 to drag
-pieces to new squares, or to delete a piece by dragging it off the board
-or dragging an empty square on top of it. To drop a new piece on a
-square, press mouse button 2 or 3 over the square. This brings up a
-menu of black pieces (button 2) or white pieces (button 3). Additional
-menu choices let you empty the square or clear the board. You can set
-the side to play next by clicking on the Black or White indicator at the
-top of the screen.
-<P>
-
-<DT><SAMP>`Challenge'</SAMP>
-<DD>allows you to make a two display game between two human players. Enter
-the display you want to connect to. If you are allowed to connect, a
-new board is displayed at the remote display. Challenge mode can only
-be stopped by pressing "quit".
-<P>
-
-<DT><SAMP>`Select Level'</SAMP>
-<DD>allows you to reset the clocks for both players. Enter the number of
-moves and the number of minutes in which the moves should be done.
-<P>
-
-<DT><SAMP>`Move NOW'</SAMP>
-<DD>force computer to stop thinking and to make the current best move.
-<P>
-
-<DT><SAMP>`Iconify I, i, C or c'</SAMP>
-<DD>iconifies xshogi.
-<P>
-
-</DL>
-<P>
-
-LIMITATIONS
-</P><P>
-
-If you press the Pause button during GNU Shogi's turn,
-xshogi will stop the clocks, but gnushogi will still make a
-move.
-</P><P>
-
-After a mate or draw when playing against gnushogi, if you
-back up with the Backward button, the clocks are reset
-(because gnushogi has exited and must be restarted).
-</P><P>
-
-The game parser recognizes only algebraic notation.
-</P><P>
-
-AUTHORS
-</P><P>
-
-Original authors of XBoard: Chris Sears and Dan Sears.
-</P><P>
-
-Enhancements for XBoard (Version 2.0): Tim Mann.
-</P><P>
-
-Conversion to XShogi (Version 1.1): Matthias Mutz.
-</P><P>
-
-Current maintainer: Mike Vanier.
-</P><P>
-
-COPYRIGHT INFORMATION
-</P><P>
-
-XShogi borrows its piece bitmaps from CRANES Shogi.
-</P><P>
-
-Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
-Enhancements Copyright 1992 Free Software Foundation, Inc. Enhancements
-Copyright 1993 Matthias Mutz. Further enhancements copyright 1999 by
-Michael Vanier and the Free Software Foundation, Inc.
-</P><P>
-
-The following terms apply to Digital Equipment Corporation's copyright
-interest in XBoard:
-</P><P>
-
-All Rights Reserved
-</P><P>
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-</P><P>
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-</P><P>
-
-The following terms apply to the enhanced version of XShogi distributed
-by the Free Software Foundation:
-</P><P>
-
-This file is part of XSHOGI.
-</P><P>
-
-XSHOGI 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
-XSHOGI General Public License for full details.
-</P><P>
-
-Everyone is granted permission to copy, modify and redistribute XSHOGI,
-but only under the conditions described in the XSHOGI General Public
-License. A copy of this license is supposed to have been given to you
-along with XSHOGI 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.
-</P><P>
-
-<A NAME="References and links"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_21.html#SEC21"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_21.html#SEC21"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: References and links</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: References and links">
-<META NAME="keywords" CONTENT="GNU Shogi manual: References and links">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC21"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_20.html#SEC20"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_22.html#SEC22"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_20.html#SEC20"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_22.html#SEC22"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1> 5. References and links </H1>
-<!--docid::SEC21::-->
-<P>
-
-There are very few English-language books for people learning shogi.
-The two I recommend are:
-</P><P>
-
-<OL>
-
-<LI>
-<CITE>Shogi for Beginners, 2nd. Edition</CITE>, by John Fairbairn. This is a
-superb beginner's book in every way, covering all phases of the game.
-It was out of print for a long time, but has now been reprinted and is
-available either from Kiseido (<A HREF="http://www.labnet.or.jp/~kiseido">http://www.labnet.or.jp/~kiseido</A>)
-or from George Hodges (see below).
-<P>
-
-<LI>
-<CITE>The Art of Shogi</CITE>, by Tony Hoskings. This is one step up from the
-Fairbairn book. It covers a lot of ground, and is especially noteworthy
-for its detailed treatment of opening lines. You can order this book
-from Amazon.com's UK branch (<A HREF="http://www.amazon.co.uk">http://www.amazon.co.uk</A>).
-<P>
-
-</OL>
-<P>
-
-Another book you may find is <CITE>Shogi: Japan's Game of Strategy</CITE> by
-Trevor Leggett. This book is very elementary and is somewhat outdated,
-having been published first in 1966. However, it does feature a paper
-shogi board and punch-out pieces, so if you want a really cheap shogi
-set you might pick this book up. It is still in print.
-</P><P>
-
-Two books that are no longer in print but are definitely worth getting
-if you find them are <CITE>Guide to Shogi Openings</CITE> and <CITE>Better
-Moves for Better Shogi</CITE>, both by Aono Teriuchi. They are published in a
-bilingual edition (English/Japanese) and are the only books on shogi in
-English written by a Japanese professional shogi player. John Fairbairn
-did the translation from Japanese to English.
-</P><P>
-
-Shogi sets are available from:
-</P><P>
-
-<BLOCKQUOTE>
-George F. Hodges <BR>
-P.O. Box 77 <BR>
-Bromley, Kent <BR>
-United Kingdom BR1 2WT
-</BLOCKQUOTE>
-<P>
-
-George also sells equipment for all the historical shogi variants
-(see section <A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A>) (except for Kyoku tai shogi) and also sells
-back issues of the magazine "Shogi" which he published for 70 issues
-in the late 70's to late 80's. This magazine is STRONGLY recommended;
-it contains more information about shogi in English than you will ever
-find anywhere else.
-</P><P>
-
-Here are some useful URLs:
-</P><P>
-
-<DL COMPACT>
-
-<DT>Pieter Stouten's shogi page: <A HREF="http://www.shogi.net">http://www.shogi.net</A>
-<DD>This is the main shogi-related site on the internet, with links to
-almost all the other sites.
-<P>
-
-<DT>Roger Hare's shogi page: <A HREF="http://www.ed.ac.uk/~rjhare/shogi">http://www.ed.ac.uk/~rjhare/shogi</A>
-<DD>This has lots of information, including full rules to most of the shogi
-variants.
-<P>
-
-<DT>Patrick Davin's Shogi Nexus: <A HREF="http://www.vega.or.jp/~patrick/shogi/">http://www.vega.or.jp/~patrick/shogi/</A>
-<DD>There's lots of cool stuff on this site; my favorite is the extensive
-collection of Tsume-shogi (mating) problems, both for beginners and
-more advanced players.
-<P>
-
-<DT>Steve Evans' shogi page: <A HREF="http://www.netspace.net.au/~trout/index.html">http://www.netspace.net.au/~trout/index.html</A>
-<DD>Steve has written a program that plays almost all of the shogi variants,
-unfortunately it only runs on Windows :-(
-<P>
-
-<DT>Hans Bodlaender's chess variant pages: <A HREF="http://www.cs.ruu.nl/~hansb/d.chessvar">http://www.cs.ruu.nl/~hansb/d.chessvar</A>
-<DD>This page has an almost unimaginable variety of rules for different
-chess variants, including many shogi variants (historical and non-historical).
-<P>
-
-</DL>
-<P>
-
-<A NAME="Acknowledgements"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_20.html#SEC20"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_22.html#SEC22"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_20.html#SEC20"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_22.html#SEC22"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Acknowledgements</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Acknowledgements">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Acknowledgements">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC22"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_21.html#SEC21"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_23.html#SEC23"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_21.html#SEC21"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_23.html#SEC23"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1> 6. Acknowledgements </H1>
-<!--docid::SEC22::-->
-<P>
-
-I would like to thank the following people:
-</P><P>
-
-<UL>
-
-<LI>
-Matthias Mutz, who originally developed GNU shogi as a spin-off of GNU
-chess and who very kindly let me take over the maintenance of this very
-interesting project.
-<P>
-
-<LI>
-Richard Stallman and the Free Software Foundation, for creating an
-organization where anyone can contribute software for the common good of
-all, for making GNU/Linux possible, and especially for writing emacs and
-gcc, without which my working life would be intolerable.
-<P>
-
-<LI>
-Georges Hodges, for starting the Shogi Association in England, without
-which I would probably never have heard of shogi, for supplying shogi
-equipment, for publishing the excellent magazine "Shogi" (now sadly
-defunct), for personally answering all my silly questions by mail, and
-for being the ambassador of shogi to the West.
-<P>
-
-<LI>
-Pieter Stouten, for having the most comprehensive shogi site on the
-World Wide Web (<A HREF="http://www.shogi.net">http://www.shogi.net</A>), and for
-maintaining the shogi-l mailing list. Go to Pieter's web site for more
-information on subscribing to the list. Also thanks to everyone who
-contributes and has contributed to that list.
-<P>
-
-<LI>
-Matt Casters, for testing GNU shogi. Matt and I will be working
-together on improving the solution engine in future versions of this
-program.
-<P>
-
-</UL>
-<P>
-
-<A NAME="Bugs"></A>
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Bugs</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Bugs">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Bugs">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC23"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_22.html#SEC22"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_22.html#SEC22"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1> 7. Bugs </H1>
-<!--docid::SEC23::-->
-<P>
-
-The motto of GNU shogi is "100% bug-free or you don't pay!" :-) In the
-extremely unlikely case (*ahem*) that you do find a bug, please send me
-(Mike Vanier) an email at <A HREF="mailto:mvanier@cs.caltech.edu">mvanier@cs.caltech.edu</A>. Also, feel
-free to send me comments, complaints, out-and-out raves, suggestions,
-plane tickets to Hawaii, and/or large suitcases filled with unmarked,
-untraceable hundred-dollar bills.
-</P><P>
-
-<A NAME="Index"></A>
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Index</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Index">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Index">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC24"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_23.html#SEC23"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_23.html#SEC23"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1> 8. Index </H1>
-<!--docid::SEC24::-->
-<P>
-
-<table><tr><th valign=top>Jump to: </th><td><A HREF="gnushogi_24.html#cp_A" style="text-decoration:none"><b>A</b></A>
-
-<A HREF="gnushogi_24.html#cp_B" style="text-decoration:none"><b>B</b></A>
-
-<A HREF="gnushogi_24.html#cp_C" style="text-decoration:none"><b>C</b></A>
-
-<A HREF="gnushogi_24.html#cp_D" style="text-decoration:none"><b>D</b></A>
-
-<A HREF="gnushogi_24.html#cp_G" style="text-decoration:none"><b>G</b></A>
-
-<A HREF="gnushogi_24.html#cp_H" style="text-decoration:none"><b>H</b></A>
-
-<A HREF="gnushogi_24.html#cp_I" style="text-decoration:none"><b>I</b></A>
-
-<A HREF="gnushogi_24.html#cp_K" style="text-decoration:none"><b>K</b></A>
-
-<A HREF="gnushogi_24.html#cp_L" style="text-decoration:none"><b>L</b></A>
-
-<A HREF="gnushogi_24.html#cp_M" style="text-decoration:none"><b>M</b></A>
-
-<A HREF="gnushogi_24.html#cp_O" style="text-decoration:none"><b>O</b></A>
-
-<A HREF="gnushogi_24.html#cp_P" style="text-decoration:none"><b>P</b></A>
-
-<A HREF="gnushogi_24.html#cp_R" style="text-decoration:none"><b>R</b></A>
-
-<A HREF="gnushogi_24.html#cp_S" style="text-decoration:none"><b>S</b></A>
-
-<A HREF="gnushogi_24.html#cp_T" style="text-decoration:none"><b>T</b></A>
-
-<A HREF="gnushogi_24.html#cp_V" style="text-decoration:none"><b>V</b></A>
-
-<A HREF="gnushogi_24.html#cp_W" style="text-decoration:none"><b>W</b></A>
-
-<A HREF="gnushogi_24.html#cp_X" style="text-decoration:none"><b>X</b></A>
-
-</td></tr></table><br><P></P>
-<TABLE border=0>
-<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_A"></A>A</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_22.html#SEC22">Acknowledgements</A></TD><TD valign=top><A HREF="gnushogi_22.html#SEC22">6. Acknowledgements</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_B"></A>B</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_21.html#SEC21">Books</A></TD><TD valign=top><A HREF="gnushogi_21.html#SEC21">5. References and links</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_C"></A>C</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Chu Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_D"></A>D</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Dai Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Dai-dai Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_12.html#SEC12">Draws</A></TD><TD valign=top><A HREF="gnushogi_12.html#SEC12">2.1.6 Draws</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_10.html#SEC10">Drops</A></TD><TD valign=top><A HREF="gnushogi_10.html#SEC10">2.1.4 Drops</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_G"></A>G</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_19.html#SEC19">gnushogi</A></TD><TD valign=top><A HREF="gnushogi_19.html#SEC19">3. gnushogi</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_2.html#SEC2">GPL</A></TD><TD valign=top><A HREF="gnushogi_2.html#SEC2">GNU GENERAL PUBLIC LICENSE</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_H"></A>H</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_13.html#SEC13">Handicaps</A></TD><TD valign=top><A HREF="gnushogi_13.html#SEC13">2.1.7 Handicaps</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_I"></A>I</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_1.html#SEC1">Introduction</A></TD><TD valign=top><A HREF="gnushogi_1.html#SEC1">1. Introduction</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_K"></A>K</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Kyoku Tai Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_L"></A>L</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_2.html#SEC2">License</A></TD><TD valign=top><A HREF="gnushogi_2.html#SEC2">GNU GENERAL PUBLIC LICENSE</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_M"></A>M</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_21.html#SEC21">Mailing lists</A></TD><TD valign=top><A HREF="gnushogi_21.html#SEC21">5. References and links</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Maka-dai-dai Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_O"></A>O</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_8.html#SEC8">Opening setup</A></TD><TD valign=top><A HREF="gnushogi_8.html#SEC8">2.1.2 The opening setup</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_P"></A>P</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_7.html#SEC7">Piece moves</A></TD><TD valign=top><A HREF="gnushogi_7.html#SEC7">2.1.1 The moves of the pieces</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_9.html#SEC9">Piece promotion</A></TD><TD valign=top><A HREF="gnushogi_9.html#SEC9">2.1.3 Promotion of pieces</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_R"></A>R</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_21.html#SEC21">References</A></TD><TD valign=top><A HREF="gnushogi_21.html#SEC21">5. References and links</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_6.html#SEC6">Rules</A></TD><TD valign=top><A HREF="gnushogi_6.html#SEC6">2.1 The rules of shogi</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_S"></A>S</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_15.html#SEC15">Sample game</A></TD><TD valign=top><A HREF="gnushogi_15.html#SEC15">2.2 Sample game</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Shogi variants</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_18.html#SEC18">Shogi vs. Chess</A></TD><TD valign=top><A HREF="gnushogi_18.html#SEC18">2.5 Differences between shogi and chess</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_T"></A>T</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Tai Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Tenjiku Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Tori Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_V"></A>V</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Variants</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_W"></A>W</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">Wa Shogi</A></TD><TD valign=top><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_21.html#SEC21">Web sites</A></TD><TD valign=top><A HREF="gnushogi_21.html#SEC21">5. References and links</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_11.html#SEC11">Winning the game</A></TD><TD valign=top><A HREF="gnushogi_11.html#SEC11">2.1.5 Winning the game</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_X"></A>X</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="gnushogi_20.html#SEC20">xshogi</A></TD><TD valign=top><A HREF="gnushogi_20.html#SEC20">4. xshogi</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="gnushogi_24.html#cp_A" style="text-decoration:none"><b>A</b></A>
-
-<A HREF="gnushogi_24.html#cp_B" style="text-decoration:none"><b>B</b></A>
-
-<A HREF="gnushogi_24.html#cp_C" style="text-decoration:none"><b>C</b></A>
-
-<A HREF="gnushogi_24.html#cp_D" style="text-decoration:none"><b>D</b></A>
-
-<A HREF="gnushogi_24.html#cp_G" style="text-decoration:none"><b>G</b></A>
-
-<A HREF="gnushogi_24.html#cp_H" style="text-decoration:none"><b>H</b></A>
-
-<A HREF="gnushogi_24.html#cp_I" style="text-decoration:none"><b>I</b></A>
-
-<A HREF="gnushogi_24.html#cp_K" style="text-decoration:none"><b>K</b></A>
-
-<A HREF="gnushogi_24.html#cp_L" style="text-decoration:none"><b>L</b></A>
-
-<A HREF="gnushogi_24.html#cp_M" style="text-decoration:none"><b>M</b></A>
-
-<A HREF="gnushogi_24.html#cp_O" style="text-decoration:none"><b>O</b></A>
-
-<A HREF="gnushogi_24.html#cp_P" style="text-decoration:none"><b>P</b></A>
-
-<A HREF="gnushogi_24.html#cp_R" style="text-decoration:none"><b>R</b></A>
-
-<A HREF="gnushogi_24.html#cp_S" style="text-decoration:none"><b>S</b></A>
-
-<A HREF="gnushogi_24.html#cp_T" style="text-decoration:none"><b>T</b></A>
-
-<A HREF="gnushogi_24.html#cp_V" style="text-decoration:none"><b>V</b></A>
-
-<A HREF="gnushogi_24.html#cp_W" style="text-decoration:none"><b>W</b></A>
-
-<A HREF="gnushogi_24.html#cp_X" style="text-decoration:none"><b>X</b></A>
-
-</td></tr></table><br></P><P>
-
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_23.html#SEC23"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_23.html#SEC23"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Preamble</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Preamble">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Preamble">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC3"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_2.html#SEC2"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_4.html#SEC4"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H2> Preamble </H2>
-<!--docid::SEC3::-->
-<P>
-
- 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.
-</P><P>
-
- 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.
-</P><P>
-
- 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.
-</P><P>
-
- 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.
-</P><P>
-
- 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.
-</P><P>
-
- 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.
-</P><P>
-
- 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.
-</P><P>
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-</P><P>
-
-<center>
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-</center>
-</P><P>
-
-<OL>
-<LI>
-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".
-<P>
-
-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.
-</P><P>
-
-<LI>
-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.
-<P>
-
-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.
-</P><P>
-
-<LI>
-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:
-<P>
-
-<OL>
-<LI>
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-<P>
-
-<LI>
-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.
-<P>
-
-<LI>
-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.)
-</OL>
-<P>
-
-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.
-</P><P>
-
-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.
-</P><P>
-
-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.
-</P><P>
-
-<LI>
-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:
-<P>
-
-<OL>
-<LI>
-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,
-<P>
-
-<LI>
-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,
-<P>
-
-<LI>
-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.)
-</OL>
-<P>
-
-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.
-</P><P>
-
-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.
-</P><P>
-
-<LI>
-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.
-<P>
-
-<LI>
-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.
-<P>
-
-<LI>
-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.
-<P>
-
-<LI>
-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.
-<P>
-
-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.
-</P><P>
-
-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.
-</P><P>
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-</P><P>
-
-<LI>
-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.
-<P>
-
-<LI>
-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.
-<P>
-
-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.
-</P><P>
-
-<LI>
-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.
-<P>
-
-<center>
- NO WARRANTY
-</center>
-</P><P>
-
-<LI>
-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.
-<P>
-
-<LI>
-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.
-</OL>
-<P>
-
-<center>
- END OF TERMS AND CONDITIONS
-</center>
-</P><P>
-
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_2.html#SEC2"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_4.html#SEC4"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: How to Apply These Terms to Your New Programs</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: How to Apply These Terms to Your New Programs">
-<META NAME="keywords" CONTENT="GNU Shogi manual: How to Apply These Terms to Your New Programs">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC4"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_3.html#SEC3"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H2> How to Apply These Terms to Your New Programs </H2>
-<!--docid::SEC4::-->
-<P>
-
- 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.
-</P><P>
-
- 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.
-</P><P>
-
-<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><VAR>one line to give the program's name and a brief idea of what it does.</VAR>
-Copyright (C) 19<VAR>yy</VAR> <VAR>name of author</VAR>
-
-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.
-</FONT></pre></td></tr></table></P><P>
-
-Also add information on how to contact you by electronic and paper mail.
-</P><P>
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-</P><P>
-
-<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>Gnomovision version 69, Copyright (C) 19<VAR>yy</VAR> <VAR>name of author</VAR>
-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.
-</FONT></pre></td></tr></table></P><P>
-
-The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> 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'</SAMP> and
-<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
-suits your program.
-</P><P>
-
-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:
-</P><P>
-
-<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>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</VAR>, 1 April 1989
-Ty Coon, President of Vice
-</FONT></pre></td></tr></table></P><P>
-
-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.
-</P><P>
-
-<A NAME="About shogi"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_3.html#SEC3"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: About shogi</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: About shogi">
-<META NAME="keywords" CONTENT="GNU Shogi manual: About shogi">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC5"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_4.html#SEC4"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_2.html#SEC2"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1> 2. About the game of shogi </H1>
-<!--docid::SEC5::-->
-
-<P>
-
-<BLOCKQUOTE>
-"Japanese chess cedes nothing in depth or beauty to the European
-game... it is at least as interesting."
-<P>
-
---- Alexander Alekhine <BR>
-(quoted in David Pritchard, <CITE>The Encyclopedia of Chess Variants</CITE>)
-</P><P>
-
-"... shogi [is] by far the most complex form of chess that has ever
-achieved widespread popularity."
-</P><P>
-
---- R. Wayne Schmittberger, <CITE>New Rules for Classic Games</CITE>
-</BLOCKQUOTE>
-<P>
-
-Shogi is the version of chess played in Japan. It is strikingly
-different from standard chess (which I shall refer to henceforth as
-"international chess") and also to all other regional variants,
-because captured pieces can re-enter play on the side of the capturer.
-This has several interesting effects on the play of the game:
-</P><P>
-
-<OL>
-<LI>
-Shogi is much more complex than international chess, at least in
-terms of the average number of possible moves per turn (estimated at
-about 35 for chess and at about 80 for shogi).
-<P>
-
-<LI>
-There are almost no draws (about 1-2% of all games in professional play).
-<P>
-
-<LI>
-Exchanges complicate the play rather than simplifying it.
-<P>
-
-<LI>
-There are no "endgames" in the standard chess sense; all pieces remain
-in play throughout the game. Games typically end in a race to
-checkmate the other player before being checkmated oneself.
-<P>
-
-<LI>
-Ownership of a piece is not indicated by the color of the piece;
-instead, pieces are wedge-shaped and point towards the opponent. The
-name of the piece is inscribed in Kanji characters on the front of the
-piece.
-<P>
-
-<LI>
-Most importantly: it's more fun than other forms of chess :-)
-<P>
-
-</OL>
-<P>
-
-Shogi is extremely popular in Japan; it has been estimated that 20
-million Japanese can play shogi, of which perhaps 1 million are active
-players. It is even more popular there than the game of go, Japan's
-other favorite board game. There are a number of professional players
-who make a considerable amount of money playing in shogi tournaments,
-and the game receives extensive newpaper and television coverage.
-Despite this, the game has yet to become popular outside of Japan. Part
-of this is because the Kanji characters on the pieces scare away some
-people, but mostly it's due, I think, to lack of exposure to the game
-and to the difficulty of finding opponents. I hope that GNU shogi will
-help introduce shogi to a wider audience.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_6.html#SEC6">2.1 The rules of shogi</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_15.html#SEC15">2.2 Sample game</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_16.html#SEC16">2.3 Mating problems</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_18.html#SEC18">2.5 Differences between shogi and chess</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="The rules of shogi"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_4.html#SEC4"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_2.html#SEC2"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_19.html#SEC19"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: The rules of shogi</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: The rules of shogi">
-<META NAME="keywords" CONTENT="GNU Shogi manual: The rules of shogi">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC6"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_7.html#SEC7"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H2> 2.1 The rules of shogi </H2>
-<!--docid::SEC6::-->
-<P>
-
-Shogi is a two-person abstract strategy board game with full information
-(i.e. all pieces and moves are visible to both players at all times).
-It is in the chess family, being descended from the same ancestral game
-as international chess: the Indian game of Chaturanga. The two players
-are referred to as "Black" and "White", with Black moving first
-(unlike in international chess, where White moves first), and with
-movement alternating between the two players. Note that "Black" and
-"White" are just names; the pieces are not colored. Instead, they are
-flat, wedge-shaped pieces which point towards the opponent. The
-identity of a given piece is indicated by two Japanese Kanji characters
-on each piece. In fact, only the top character is needed to identify
-the piece and thus only the top character is used in shogi diagrams. I
-will use alphabetical equivalents in the diagrams here; to see what the
-Kanji characters look like, start up xshogi (see section <A HREF="gnushogi_20.html#SEC20">4. xshogi</A>) and compare
-the starting setup there with the starting setup in this file
-(see section <A HREF="gnushogi_8.html#SEC8">2.1.2 The opening setup</A>).
-</P><P>
-
-The object of the game is to capture the opponent's King. The board is
-a grid of 9x9 uncolored squares, and pieces are placed on the squares.
-Each player begins with 20 pieces, described in the next section.
-Capture is by displacement, as in international chess.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_7.html#SEC7">2.1.1 The moves of the pieces</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_8.html#SEC8">2.1.2 The opening setup</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_9.html#SEC9">2.1.3 Promotion of pieces</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_10.html#SEC10">2.1.4 Drops</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_11.html#SEC11">2.1.5 Winning the game</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_12.html#SEC12">2.1.6 Draws</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_13.html#SEC13">2.1.7 Handicaps</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gnushogi_14.html#SEC14">2.1.8 Notes for chess players</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="The moves of the pieces"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_7.html#SEC7"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: The moves of the pieces</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: The moves of the pieces">
-<META NAME="keywords" CONTENT="GNU Shogi manual: The moves of the pieces">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC7"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_8.html#SEC8"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H3> 2.1.1 The moves of the pieces </H3>
-<!--docid::SEC7::-->
-<P>
-
-Each player at the beginning of a shogi game has a total of 20 pieces of
-eight different types. The moves of the shogi pieces can be divided
-into three classes: "stepping" pieces, that only move one square at a
-time; "ranging" pieces that move any number of unobstructed squares in
-a line, and "jumping" pieces that can jump over obstructing pieces to
-reach their destination squares. Most pieces can also promote to
-different (usually stronger) pieces under certain circumstances (see the
-next section). All pieces capture the same way that they move (even
-pawns). The piece moves and promotions are as follows; each piece name
-is followed by the standard piece abbreviation:
-</P><P>
-
-<OL>
-
-<LI>
-The king (K). The king can move one square in any horizontal, vertical,
-or diagonal direction, just like the king in international chess. The
-king does not promote.
-<P>
-
-<LI>
-The rook (R). The rook can move any number of squares in a horizontal
-or vertical direction. The rook is the same as the rook in
-international chess (except that it can promote). A rook promotes to a
-"dragon king" or "dragon" for short (often just referred to as a
-"promoted rook"), which can move as a rook or can move one square in
-any diagonal direction.
-<P>
-
-<LI>
-The bishop (B). The bishop can move any number of squares in a diagonal
-direction. The bishop is the same as the bishop in international chess
-(except that it can promote). A bishop promotes to a "dragon horse"
-or "horse" for short (often just referred to as a "promoted
-bishop"), which can move as a bishop or can move one square in any
-horizontal or vertical direction. Note: the horse should not be
-confused with a knight (see below), as they are two completely different
-pieces.
-<P>
-
-<LI>
-The gold general (G). A gold general can move one square in any
-horizontal or vertical direction, or one square in a forward diagonal
-direction. Gold generals do not promote.
-<P>
-
-<LI>
-The silver general (S). A silver general can move one square in any
-diagonal direction, or one square straight forward. A silver general
-promotes to a gold general.
-<P>
-
-<LI>
-The knight (N). A knight can move one square straight forward followed
-by one square to either forward diagonal, jumping over intervening
-pieces if any. In other words, a knight moves like its international
-chess counterpart, but forward only. A knight promotes to a gold
-general. The knight is the only jumping piece, as in chess.
-<P>
-
-<LI>
-The lance (L). A lance can move any number of squares straight forward.
-A lance promotes to a gold general.
-<P>
-
-<LI>
-The pawn (P). A pawn can move one square straight forward. The pawn
-captures the same way that it moves, in contrast to international chess.
-There is also no initial two-space move for pawns and no
-<EM>en-passant</EM> capture. A pawn promotes to a gold general; a
-promoted pawn is usually known as a "Tokin".
-<P>
-
-</OL>
-<P>
-
-<A NAME="The opening setup"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_8.html#SEC8"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: The opening setup</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: The opening setup">
-<META NAME="keywords" CONTENT="GNU Shogi manual: The opening setup">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC8"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_7.html#SEC7"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_9.html#SEC9"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H3> 2.1.2 The opening setup </H3>
-<!--docid::SEC8::-->
-<P>
-
-The opening setup for shogi is as follows:
-</P><P>
-
- 9 8 7 6 5 4 3 2 1
-+---------------------------------------------+ <BR>
-| wL | wN | wS | wG | wK | wG | wS | wN | wL | a <BR>
-+---------------------------------------------+ <BR>
-| | wR | | | | | | wB | | b <BR>
-+---------------------------------------------+ <BR>
-| wP | wP | wP | wP | wP | wP | wP | wP | wP | c <BR>
-+---------------------------------------------+ <BR>
-| | | | | | | | | | d <BR>
-+---------------------------------------------+ <BR>
-| | | | | | | | | | e <BR>
-+---------------------------------------------+ <BR>
-| | | | | | | | | | f <BR>
-+---------------------------------------------+ <BR>
-| bP | bP | bP | bP | bP | bP | bP | bP | bP | g <BR>
-+---------------------------------------------+ <BR>
-| | bB | | | | | | bR | | h <BR>
-+---------------------------------------------+ <BR>
-| bL | bN | bS | bG | bK | bG | bS | bN | bL | i <BR>
-+---------------------------------------------+
-</P><P>
-
-Here, "b" stands for "black" and "w" stands for "white", so
-that, for instance, "bL" means "black lance". The numbers above the
-files and the letters to the right of the ranks represent the most
-common notation system used for shogi by westerners (the Japanese also
-use Arabic numerals for the files but use Japanese numerals for the
-ranks).
-</P><P>
-
-<A NAME="Promotion of pieces"></A>
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Promotion of pieces</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Promotion of pieces">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Promotion of pieces">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC9"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_8.html#SEC8"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_10.html#SEC10"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H3> 2.1.3 Promotion of pieces </H3>
-<!--docid::SEC9::-->
-<P>
-
-In sharp contrast to international chess, where only pawns can promote
-to higher-ranked pieces, most of the pieces in shogi can promote. The
-promoted ranks are discussed in the section on piece moves (see section <A HREF="gnushogi_7.html#SEC7">2.1.1 The moves of the pieces</A>) but are repeated here for reference:
-</P><P>
-
-<DL COMPACT>
-
-<DT>Pawn
-<DD>promotes to gold general (called a `tokin' in this case only).
-<P>
-
-<DT>Lance
-<DD>promotes to gold general.
-<P>
-
-<DT>Knight
-<DD>promotes to gold general.
-<P>
-
-<DT>Silver general
-<DD>promotes to gold general.
-<P>
-
-<DT>Gold general
-<DD>does not promote.
-<P>
-
-<DT>Bishop
-<DD>promotes to "dragon horse" or just "horse" for short. The horse can
-move as a bishop or can move one square in any orthogonal direction.
-<P>
-
-<DT>Rook
-<DD>promotes to "dragon king" or just "dragon" for short. The dragon
-can move as a rook or can move one square in any diagonal direction.
-<P>
-
-<DT>King
-<DD>does not promote.
-<P>
-
-</DL>
-<P>
-
-The three ranks furthest away from each player constitute his/her
-"promotion zone". A player may, but is not required to, promote a
-piece after making a move in which the piece begins and/or ends in the
-promotion zone. Thus you can promote a piece when moving the piece into
-the promotion zone, out of the promotion zone, or entirely within the
-promotion zone. Promotion is mandatory in these cases:
-</P><P>
-
-<OL>
-
-<LI>You must promote a pawn or a lance after moving it to the last rank.
-<P>
-
-<LI>You must promote a knight after moving it to either of the last
-two ranks.
-<P>
-
-</OL>
-<P>
-
-These forced promotions ensure that a piece cannot be moved to a square
-from which it would have no further move.
-</P><P>
-
-Pieces "dropped" onto the board (see section <A HREF="gnushogi_10.html#SEC10">2.1.4 Drops</A>) always drop in the
-unpromoted state, even if they drop into the promotion zone.
-</P><P>
-
-<A NAME="Drops"></A>
-<HR SIZE=1>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_8.html#SEC8"> < </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_10.html#SEC10"> > </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_5.html#SEC5"> << </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_6.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_15.html#SEC15"> >> </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: About this document</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: About this document">
-<META NAME="keywords" CONTENT="GNU Shogi manual: About this document">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC_About"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1>About this document</H1>
-This document was generated by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-<P></P>
-The buttons in the navigation panels have the following meaning:
-<P></P>
-<table border = "1">
-<TR>
-<TH> Button </TH>
-<TH> Name </TH>
-<TH> Go to </TH>
-<TH> From 1.2.3 go to</TH>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ < ] </TD>
-<TD ALIGN="CENTER">
-Back
-</TD>
-<TD>
-previous section in reading order
-</TD>
-<TD>
-1.2.2
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ > ] </TD>
-<TD ALIGN="CENTER">
-Forward
-</TD>
-<TD>
-next section in reading order
-</TD>
-<TD>
-1.2.4
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ << ] </TD>
-<TD ALIGN="CENTER">
-FastBack
-</TD>
-<TD>
-previous or up-and-previous section
-</TD>
-<TD>
-1.1
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ Up ] </TD>
-<TD ALIGN="CENTER">
-Up
-</TD>
-<TD>
-up section
-</TD>
-<TD>
-1.2
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ >> ] </TD>
-<TD ALIGN="CENTER">
-FastForward
-</TD>
-<TD>
-next or up-and-next section
-</TD>
-<TD>
-1.3
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [Top] </TD>
-<TD ALIGN="CENTER">
-Top
-</TD>
-<TD>
-cover (top) of document
-</TD>
-<TD>
-
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [Contents] </TD>
-<TD ALIGN="CENTER">
-Contents
-</TD>
-<TD>
-table of contents
-</TD>
-<TD>
-
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [Index] </TD>
-<TD ALIGN="CENTER">
-Index
-</TD>
-<TD>
-concept index
-</TD>
-<TD>
-
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ ? ] </TD>
-<TD ALIGN="CENTER">
-About
-</TD>
-<TD>
-this page
-</TD>
-<TD>
-
-</TD>
-</TR>
-</TABLE>
-<P></P>
-where the <STRONG> Example </STRONG> assumes that the current position
-is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
-the following structure:
-<UL>
-<LI> 1. Section One </LI>
-<UL>
-<LI>1.1 Subsection One-One</LI>
-<UL>
-<LI> ... </LI>
-</UL>
-<LI>1.2 Subsection One-Two</LI>
-<UL>
-<LI>1.2.1 Subsubsection One-Two-One
-</LI><LI>1.2.2 Subsubsection One-Two-Two
-</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG>
-<== Current Position </STRONG>
-</LI><LI>1.2.4 Subsubsection One-Two-Four
-</LI></UL>
-<LI>1.3 Subsection One-Three</LI>
-<UL>
-<LI> ... </LI>
-</UL>
-<LI>1.4 Subsection One-Four</LI>
-</UL>
-</UL>
-
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Short Table of Contents</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Short Table of Contents">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Short Table of Contents">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC_OVERVIEW"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1>Short Table of Contents</H1>
-<BLOCKQUOTE>
-<A NAME="TOC1" HREF="gnushogi_1.html#SEC1">1. Introduction</A>
-<BR>
-<A NAME="TOC2" HREF="gnushogi_2.html#SEC2">GNU GENERAL PUBLIC LICENSE</A>
-<BR>
-<A NAME="TOC5" HREF="gnushogi_5.html#SEC5">2. About the game of shogi</A>
-<BR>
-<A NAME="TOC19" HREF="gnushogi_19.html#SEC19">3. gnushogi</A>
-<BR>
-<A NAME="TOC20" HREF="gnushogi_20.html#SEC20">4. xshogi</A>
-<BR>
-<A NAME="TOC21" HREF="gnushogi_21.html#SEC21">5. References and links</A>
-<BR>
-<A NAME="TOC22" HREF="gnushogi_22.html#SEC22">6. Acknowledgements</A>
-<BR>
-<A NAME="TOC23" HREF="gnushogi_23.html#SEC23">7. Bugs</A>
-<BR>
-<A NAME="TOC24" HREF="gnushogi_24.html#SEC24">8. Index</A>
-<BR>
-
-</BLOCKQUOTE>
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on July, 7 2004 by texi2html 1.64 -->
-<!--
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
- Karl Berry <karl@freefriends.org>
- Olaf Bachmann <obachman@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
-
--->
-<HEAD>
-<TITLE>GNU Shogi manual: Table of Contents</TITLE>
-
-<META NAME="description" CONTENT="GNU Shogi manual: Table of Contents">
-<META NAME="keywords" CONTENT="GNU Shogi manual: Table of Contents">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC_Contents"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_toc.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_24.html#SEC24">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gnushogi_abt.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<HR SIZE=1>
-<H1>Table of Contents</H1>
-<UL>
-<A NAME="TOC1" HREF="gnushogi_1.html#SEC1">1. Introduction</A>
-<BR>
-<A NAME="TOC2" HREF="gnushogi_2.html#SEC2">GNU GENERAL PUBLIC LICENSE</A>
-<BR>
-<UL>
-<A NAME="TOC3" HREF="gnushogi_3.html#SEC3">Preamble</A>
-<BR>
-<A NAME="TOC4" HREF="gnushogi_4.html#SEC4">How to Apply These Terms to Your New Programs</A>
-<BR>
-</UL>
-<A NAME="TOC5" HREF="gnushogi_5.html#SEC5">2. About the game of shogi</A>
-<BR>
-<UL>
-<A NAME="TOC6" HREF="gnushogi_6.html#SEC6">2.1 The rules of shogi</A>
-<BR>
-<UL>
-<A NAME="TOC7" HREF="gnushogi_7.html#SEC7">2.1.1 The moves of the pieces</A>
-<BR>
-<A NAME="TOC8" HREF="gnushogi_8.html#SEC8">2.1.2 The opening setup</A>
-<BR>
-<A NAME="TOC9" HREF="gnushogi_9.html#SEC9">2.1.3 Promotion of pieces</A>
-<BR>
-<A NAME="TOC10" HREF="gnushogi_10.html#SEC10">2.1.4 Drops</A>
-<BR>
-<A NAME="TOC11" HREF="gnushogi_11.html#SEC11">2.1.5 Winning the game</A>
-<BR>
-<A NAME="TOC12" HREF="gnushogi_12.html#SEC12">2.1.6 Draws</A>
-<BR>
-<A NAME="TOC13" HREF="gnushogi_13.html#SEC13">2.1.7 Handicaps</A>
-<BR>
-<A NAME="TOC14" HREF="gnushogi_14.html#SEC14">2.1.8 Notes for chess players</A>
-<BR>
-</UL>
-<A NAME="TOC15" HREF="gnushogi_15.html#SEC15">2.2 Sample game</A>
-<BR>
-<A NAME="TOC16" HREF="gnushogi_16.html#SEC16">2.3 Mating problems</A>
-<BR>
-<A NAME="TOC17" HREF="gnushogi_17.html#SEC17">2.4 Shogi variants</A>
-<BR>
-<A NAME="TOC18" HREF="gnushogi_18.html#SEC18">2.5 Differences between shogi and chess</A>
-<BR>
-</UL>
-<A NAME="TOC19" HREF="gnushogi_19.html#SEC19">3. gnushogi</A>
-<BR>
-<A NAME="TOC20" HREF="gnushogi_20.html#SEC20">4. xshogi</A>
-<BR>
-<A NAME="TOC21" HREF="gnushogi_21.html#SEC21">5. References and links</A>
-<BR>
-<A NAME="TOC22" HREF="gnushogi_22.html#SEC22">6. Acknowledgements</A>
-<BR>
-<A NAME="TOC23" HREF="gnushogi_23.html#SEC23">7. Bugs</A>
-<BR>
-<A NAME="TOC24" HREF="gnushogi_24.html#SEC24">8. Index</A>
-<BR>
-</UL>
-<HR SIZE=1>
-<BR>
-<FONT SIZE="-1">
-This document was generated
-by <I>Michael C. Vanier</I> on <I>July, 7 2004</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
% texinfo.tex -- TeX macros to handle Texinfo files.
-%
+%
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{1999-05-25.6}%
+\def\texinfoversion{2013-02-01.11}
%
-% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
-% Free Software Foundation, Inc.
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
%
-% This texinfo.tex file is free software; you can redistribute it and/or
+% This texinfo.tex file is free software: you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
-% published by the Free Software Foundation; either version 2, or (at
-% your option) any later version.
+% published by the Free Software Foundation, either version 3 of the
+% License, or (at your option) any later version.
%
% This texinfo.tex file is distributed in the hope that it will be
% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
% General Public License for more details.
%
% You should have received a copy of the GNU General Public License
-% along with this texinfo.tex file; see the file COPYING. If not, write
-% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-% Boston, MA 02111-1307, USA.
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
%
-% In other words, you are welcome to use, share and improve this program.
-% You are forbidden to forbid anyone else to use, share and improve
-% what you give them. Help stamp out software-hoarding!
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. This Exception is an additional permission under section 7
+% of the GNU General Public License, version 3 ("GPLv3").
%
% Please try the latest version of texinfo.tex before submitting bug
% reports; you can get the latest version from:
-% ftp://ftp.gnu.org/pub/gnu/texinfo.tex
-% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
-% ftp://tug.org/tex/texinfo.tex
-% ftp://ctan.org/macros/texinfo/texinfo.tex
-% (and all CTAN mirrors, finger ctan@ctan.org for a list).
-% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-% The texinfo.tex in any given Texinfo distribution could well be out
+% http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+% http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page)
+% The texinfo.tex in any given distribution could well be out
% of date, so if that's what you're using, please check.
-% There is a small home page for Texinfo at http://texinfo.org/.
%
% Send bug reports to bug-texinfo@gnu.org. Please include including a
% complete document in each bug report with which we can reproduce the
% texindex foo.??
% tex foo.texi
% tex foo.texi
-% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
-% The extra runs of TeX get the cross-reference information correct.
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
% Sometimes one run after texindex suffices, and sometimes you need more
% than two; texi2dvi does it as many times as necessary.
%
-% It is possible to adapt texinfo.tex for other languages. You can get
-% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
\message{Loading texinfo [version \texinfoversion]:}
\everyjob{\message{[Texinfo version \texinfoversion]}%
\catcode`+=\active \catcode`\_=\active}
-% Save some parts of plain tex whose names we will redefine.
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
\let\ptexb=\b
\let\ptexbullet=\bullet
\let\ptexc=\c
\let\ptexend=\end
\let\ptexequiv=\equiv
\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexraggedright=\raggedright
\let\ptexrbrace=\}
+\let\ptexslash=\/
\let\ptexstar=\*
\let\ptext=\t
-
-% We never want plain's outer \+ definition in Texinfo.
-% For @tex, we can use \tabalign.
-\let\+ = \relax
-
-% Get ready for pdf.
-\newif\ifpdf
-\ifx\pdfoutput\undefined\else
- \input pdfcolor
- \pdfoutput=1
- \pdftrue
-\fi
-
-\message{Basics,}
-\chardef\other=12
+\let\ptextop=\top
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
% If this character appears in an error message or help string, it
% starts a new line in the output.
\newlinechar = `^^J
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
% Set up fixed words for English if not already set.
\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putworderror\undefined \gdef\putworderror{error}\fi
\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
\ifx\putwordin\undefined \gdef\putwordin{in}\fi
-\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
-\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
-\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
+
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% sometimes characters are active, so we need control sequences.
+\chardef\ampChar = `\&
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dashChar = `\-
+\chardef\dotChar = `\.
+\chardef\exclamChar= `\!
+\chardef\hashChar = `\#
+\chardef\lquoteChar= `\`
+\chardef\questChar = `\?
+\chardef\rquoteChar= `\'
+\chardef\semiChar = `\;
+\chardef\slashChar = `\/
+\chardef\underChar = `\_
% Ignore a token.
%
\def\gobble#1{}
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
-\hyphenation{white-space}
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
% Margin to add to right of even pages, to left of odd pages.
-\newdimen \bindingoffset
-\newdimen \normaloffset
+\newdimen\bindingoffset
+\newdimen\normaloffset
\newdimen\pagewidth \newdimen\pageheight
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
% Sometimes it is convenient to have everything in the transcript file
% and nothing on the terminal. We don't just call \tracingall here,
-% since that produces some useless output on the terminal.
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
%
\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\ifx\eTeXversion\undefined
-\def\loggingall{\tracingcommands2 \tracingstats2
- \tracingpages1 \tracingoutput1 \tracinglostchars1
- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
-}%
-\else
-\def\loggingall{\tracingcommands3 \tracingstats2
- \tracingpages1 \tracingoutput1 \tracinglostchars1
- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
- \tracingscantokens1 \tracingassigns1 \tracingifs1
- \tracinggroups1 \tracingnesting2
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
}%
-\fi
-% For @cropmarks command.
+% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
+% aren't perfect, it's not the end of the world, being an error message,
+% after all.
+%
+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
+\def\doerrormsg#1{\errmessage{#1}}
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
% Do @cropmarks to get crop marks.
%
\newif\ifcropmarks
\newdimen\cornerthick \cornerthick=.3pt
\newdimen\topandbottommargin \topandbottommargin=.75in
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page. The solution is
+% described on page 260 of The TeXbook. It involves outputting two
+% marks for the sectioning macros, one before the section break, and
+% one after. I won't pretend I can describe this better than DEK...
+\def\domark{%
+ \toks0=\expandafter{\lastchapterdefs}%
+ \toks2=\expandafter{\lastsectiondefs}%
+ \toks4=\expandafter{\prevchapterdefs}%
+ \toks6=\expandafter{\prevsectiondefs}%
+ \toks8=\expandafter{\lastcolordefs}%
+ \mark{%
+ \the\toks0 \the\toks2
+ \noexpand\or \the\toks4 \the\toks6
+ \noexpand\else \the\toks8
+ }%
+}
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+ \ifcase0\topmark\fi
+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\topmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\lastchapterdefs{}
+\def\lastsectiondefs{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\lastcolordefs{}
+
% Main output routine.
\chardef\PAGE = 255
\output = {\onepageout{\pagecontents\PAGE}}
%
% Do this outside of the \shipout so @code etc. will be expanded in
% the headline as they should be, not taken literally (outputting ''code).
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
\setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
\setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
%
{%
% take effect in \write's, yet the group defined by the \vbox ends
% before the \shipout runs.
%
- \escapechar = `\\ % use backslash in output files.
\indexdummies % don't expand commands in the output.
\normalturnoffactive % \ in index entries must not stay \, e.g., if
- % the page break happens to be in the middle of an example.
+ % the page break happens to be in the middle of an example.
+ % We don't want .vr (or whatever) entries like this:
+ % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+ % "\acronym" won't work when it's read back in;
+ % it needs to be
+ % {\code {{\tt \backslashcurfont }acronym}
\shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
\ifcropmarks \vbox to \outervsize\bgroup
\hsize = \outerhsize
\vskip-\topandbottommargin
\pagebody{#1}%
\ifdim\ht\footlinebox > 0pt
% Only leave this space if the footline is nonempty.
- % (We lessened \vsize for it in \oddfootingxxx.)
+ % (We lessened \vsize for it in \oddfootingyyy.)
% The \baselineskip=24pt in plain's \makefootline has no effect.
- \vskip 2\baselineskip
+ \vskip 24pt
\unvbox\footlinebox
\fi
%
- \ifpdf\pdfmkdest{\the\pageno}\fi
- %
\ifcropmarks
\egroup % end of \vbox\bgroup
\hfil\egroup % end of (centering) \line\bgroup
\egroup % \vbox from first cropmarks clause
\fi
}% end of \shipout\vbox
- }% end of group with \turnoffactive
+ }% end of group with \indexdummies
\advancepageno
\ifnum\outputpenalty>-20000 \else\dosupereject\fi
}
% marginal hacks, juha@viisa.uucp (Juha Takala)
\ifvoid\margin\else % marginal info is present
\rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
+\dimen@=\dp#1\relax \unvbox#1\relax
\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
}
% the input line (except we remove a trailing comment). #1 should be a
% macro which expects an ordinary undelimited TeX argument.
%
-\def\parsearg#1{%
- \let\next = #1%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\argtorun{#2}%
\begingroup
\obeylines
- \futurelet\temp\parseargx
-}
-
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse. Otherwise, we're done.
-\def\parseargx{%
- % \obeyedspace is defined far below, after the definition of \sepspaces.
- \ifx\obeyedspace\temp
- \expandafter\parseargdiscardspace
- \else
- \expandafter\parseargline
- \fi
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
}
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
{\obeylines %
\gdef\parseargline#1^^M{%
\endgroup % End of the group started in \parsearg.
- %
- % First remove any @c comment, then any @comment.
- % Result of each macro is put in \toks0.
- \argremovec #1\c\relax %
- \expandafter\argremovecomment \the\toks0 \comment\relax %
- %
- % Call the caller's macro, saved as \next in \parsearg.
- \expandafter\next\expandafter{\the\toks0}%
+ \argremovecomment #1\comment\ArgTerm%
}%
}
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us. The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
% @end itemize @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'. Here we remove all active spaces from #1, and assign the
-% result to \toks0.
-%
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands. (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.) But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
- \begingroup
- \ignoreactivespaces
- \edef\temp{#1}%
- \global\toks0 = \expandafter{\temp}%
- \endgroup
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
}
-% Change the active space to expand to nothing.
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
%
-\begingroup
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick. --kasal, 16nov03
+
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
\obeyspaces
- \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ \gdef\unsepspaces{\let =\space}
+}
\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment; press RETURN to continue}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
-% @begin foo is the same as @foo, for now.
-\newhelp\EMsimple{Press RETURN to continue.}
-\outer\def\begin{\parsearg\beginxxx}
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
-% @end foo executes the definition of \Efoo.
-%
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
- \removeactivespaces{#1}%
- \edef\endthing{\the\toks0}%
- %
- \expandafter\ifx\csname E\endthing\endcsname\relax
- \expandafter\ifx\csname \endthing\endcsname\relax
- % There's no \foo, i.e., no ``environment'' foo.
- \errhelp = \EMsimple
- \errmessage{Undefined command `@end \endthing'}%
- \else
- \unmatchedenderror\endthing
- \fi
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
\else
- % Everything's ok; the right environment has been started.
- \csname E\endthing\endcsname
+ \badenverr
\fi
}
-% There is an environment #1, but it hasn't been started. Give an error.
-%
-\def\unmatchedenderror#1{%
+% Environment mismatch, #1 expected:
+\def\badenverr{%
\errhelp = \EMsimple
- \errmessage{This `@end #1' doesn't have a matching `@#1'}%
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
}
-
-% Define the control sequence \E#1 to give an unmatched @end error.
-%
-\def\defineunmatchedend#1{%
- \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
+\def\inenvironment#1{%
+ \ifx#1\empty
+ outside of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
}
-
-% Single-spacing is done by various environments (specifically, in
-% \nonfillstart and \quotations).
-\newskip\singlespaceskip \singlespaceskip = 12.5pt
-\def\singlespace{%
- % Why was this kern here? It messes up equalizing space above and below
- % environments. --karl, 6may93
- %{\advance \baselineskip by -\singlespaceskip
- %\kern \baselineskip}%
- \setleading \singlespaceskip
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal.
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
}
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt\char64}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-\def\mylbrace {{\tt\char123}}
-\def\myrbrace {{\tt\char125}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-\begingroup
- % Definitions to produce actual \{ & \} command in an index.
- \catcode`\{ = 12 \catcode`\} = 12
- \catcode`\[ = 1 \catcode`\] = 2
- \catcode`\@ = 0 \catcode`\\ = 12
- @gdef@lbracecmd[\{]%
- @gdef@rbracecmd[\}]%
-@endgroup
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
-\let\, = \c
-\let\dotaccent = \.
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \t
-\let\ubaraccent = \b
-\let\udotaccent = \d
+\newhelp\EMsimple{Press RETURN to continue.}
-% Other special characters: @questiondown @exclamdown
-% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
- \def\temp{#1}%
- \ifx\temp\imacro \ptexi
- \else\ifx\temp\jmacro \j
- \else \errmessage{@dotless can be used only with i or j}%
- \fi\fi
-}
% Be sure we're in horizontal mode when doing a tie, since we make space
% equivalent to this in @example-like environments. Otherwise, a space
\def\:{\spacefactor=1000 }
% @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
% @! is an end-of-sentence bang.
-\def\!{!\spacefactor=3000 }
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
% @? is an end-of-sentence query.
-\def\?{?\spacefactor=3000 }
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+ \def\temp{#1}%
+ \ifx\temp\onword \plainfrenchspacing
+ \else\ifx\temp\offword \plainnonfrenchspacing
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
+ \fi\fi
+}
% @w prevents a word break. Without the \leavevmode, @w at the
% beginning of a paragraph, when TeX is still in vertical mode, would
% therefore, no glue is inserted, and the space between the headline and
% the text is small, which looks bad.
%
-\def\group{\begingroup
- \ifnum\catcode13=\active \else
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
\errhelp = \groupinvalidhelp
\errmessage{@group invalid in context where filling is enabled}%
\fi
+ \startsavinginserts
%
- % The \vtop we start below produces a box with normal height and large
- % depth; thus, TeX puts \baselineskip glue before it, and (when the
- % next line of text is done) \lineskip glue after it. (See p.82 of
- % the TeXbook.) Thus, space below is not quite equal to space
- % above. But it's pretty close.
- \def\Egroup{%
- \egroup % End the \vtop.
- \endgroup % End the \group.
- }%
- %
- \vtop\bgroup
- % We have to put a strut on the last line in case the @group is in
- % the midst of an example, rather than completely enclosing it.
- % Otherwise, the interline space between the last line of the group
- % and the first line afterwards is too small. But we can't put the
- % strut in \Egroup, since there it would be on a line by itself.
- % Hence this just inserts a strut at the beginning of each line.
- \everypar = {\strut}%
- %
- % Since we have a strut on every line, we don't need any of TeX's
- % normal interline spacing.
- \offinterlineskip
- %
- % OK, but now we have to do something about blank
- % lines in the input in @example-like environments, which normally
- % just turn into \lisppar, which will insert no space now that we've
- % turned off the interline space. Simplest is to make them be an
- % empty paragraph.
- \ifx\par\lisppar
- \edef\par{\leavevmode \par}%
- %
- % Reset ^^M's definition to new definition of \par.
- \obeylines
- \fi
- %
+ \setbox\groupbox = \vtop\bgroup
% Do @comment since we are called inside an environment such as
% @example, where each end-of-line in the input causes an
% end-of-line in the output. We don't want the end-of-line after
\comment
}
%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\pageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+%
% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
% message, so this ends up printing `@group can only ...'.
%
\newdimen\mil \mil=0.001in
-\def\need{\parsearg\needx}
-
-% Old definition--didn't work.
-%\def\needx #1{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
-%\prevdepth=-1000pt
-%}}
-
-\def\needx#1{%
- % Go into vertical mode, so we don't make a big box in the middle of a
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
% paragraph.
\par
%
- % Don't add any leading before our big empty box, but allow a page
- % break, since the best break might be right here.
- \allowbreak
- \nointerlineskip
- \vtop to #1\mil{\vfil}%
- %
- % TeX does not even consider page breaks if a penalty added to the
- % main vertical list is 10000 or more. But in order to see if the
- % empty box we just added fits on the page, we must make it consider
- % page breaks. On the other hand, we don't want to actually break the
- % page after the empty box. So we use a penalty of 9999.
- %
- % There is an extremely small chance that TeX will actually break the
- % page at this \penalty, if there are no other feasible breakpoints in
- % sight. (If the user is using lots of big @group commands, which
- % almost-but-not-quite fill up a page, TeX will have a hard time doing
- % good page breaking, for example.) However, I could not construct an
- % example where a page broke at this \penalty; if it happens in a real
- % document, then we can reconsider our strategy.
- \penalty9999
- %
- % Back up by the size of the box, whether we did a page break or not.
- \kern -#1\mil
- %
- % Do not allow a page break right after this kern.
- \nobreak
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
}
-% @br forces paragraph break
+% @br forces paragraph break (and is undocumented).
\let\br = \par
-% @dots{} output an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in a typewriter
-% font as three actual period characters.
-%
-\def\dots{%
- \leavevmode
- \hbox to 1.5em{%
- \hskip 0pt plus 0.25fil minus 0.25fil
- .\hss.\hss.%
- \hskip 0pt plus 0.5fil minus 0.5fil
- }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
- \leavevmode
- \hbox to 2em{%
- \hskip 0pt plus 0.25fil minus 0.25fil
- .\hss.\hss.\hss.%
- \hskip 0pt plus 0.5fil minus 0.5fil
- }%
- \spacefactor=3000
-}
-
-
-% @page forces the start of a new page
+% @page forces the start of a new page.
%
\def\page{\par\vfill\supereject}
\newskip\exdentamount
% This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
% This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
-% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
-
-\def\inmargin#1{%
-\strut\vadjust{\nobreak\kern-\strutdepth
- \vtop to \strutdepth{\baselineskip\strutdepth\vss
- \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'. Not documented, written for gawk manual.
+%
\newskip\inmarginspacing \inmarginspacing=1cm
\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change). This command
+% is not documented, not supported, and doesn't work.
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
-%\hbox{{\rm#1}}\hfil\break}}
-
-% @include file insert text of that file as input.
-% Allow normal characters that we make active in the argument (a file name).
-\def\include{\begingroup
- \catcode`\\=12
- \catcode`~=12
- \catcode`^=12
- \catcode`_=12
- \catcode`|=12
- \catcode`<=12
- \catcode`>=12
- \catcode`+=12
- \parsearg\includezzz}
-% Restore active chars for included file.
-\def\includezzz#1{\endgroup\begingroup
- % Read the included file in a group so nested @include's work.
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
\def\thisfile{#1}%
- \input\thisfile
-\endgroup}
+ {%
+ \makevalueexpandable % we want to expand any @value in FILE.
+ \turnoffactive % and allow special characters in the expansion
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @include of #1^^J}%
+ \edef\temp{\noexpand\input #1 }%
+ %
+ % This trickery is to read FILE outside of a group, in case it makes
+ % definitions, etc.
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+}
-\def\thisfile{}
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
-% @center line outputs that line, centered
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+%
+\def\thisfile{}
-\def\center{\parsearg\centerzzz}
-\def\centerzzz #1{{\advance\hsize by -\leftskip
-\advance\hsize by -\rightskip
-\centerline{#1}}}
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\centersub\centerH
+ \else
+ \let\centersub\centerV
+ \fi
+ \centersub{\hfil \ignorespaces#1\unskip \hfil}%
+ \let\centersub\relax % don't let the definition persist, just in case
+}
+\def\centerH#1{{%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+}}
+%
+\newcount\centerpenalty
+\def\centerV#1{%
+ % The idea here is the same as in \startdefun, \cartouche, etc.: if
+ % @center is the first thing after a section heading, we need to wipe
+ % out the negative parskip inserted by \sectionheading, but still
+ % prevent a page break here.
+ \centerpenalty = \lastpenalty
+ \ifnum\centerpenalty>10000 \vskip\parskip \fi
+ \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
+ \line{\kern\leftskip #1\kern\rightskip}%
+}
% @sp n outputs n lines of vertical space
-
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\vskip #1\baselineskip}
+%
+\parseargdef\sp{\vskip #1\baselineskip}
% @comment ...line which is ignored...
% @c is the same as @comment
% @ignore ... @end ignore is another way to write a comment
-
+%
\def\comment{\begingroup \catcode`\^^M=\other%
\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
\commentxxx}
{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
+%
\let\c=\comment
% @paragraphindent NCHARS
% We'll use ems for NCHARS, close enough.
-% We cannot implement @paragraphindent asis, though.
-%
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
\def\asisword{asis} % no translation, these are keywords
\def\noneword{none}
%
-\def\paragraphindent{\parsearg\doparagraphindent}
-\def\doparagraphindent#1{%
+\parseargdef\paragraphindent{%
\def\temp{#1}%
\ifx\temp\asisword
\else
% We'll use ems for NCHARS like @paragraphindent.
% It seems @exampleindent asis isn't necessary, but
% I preserve it to make it similar to @paragraphindent.
-\def\exampleindent{\parsearg\doexampleindent}
-\def\doexampleindent#1{%
+\parseargdef\exampleindent{%
\def\temp{#1}%
\ifx\temp\asisword
\else
\fi
}
-% @asis just yields its argument. Used with @table, for example.
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
%
-\def\asis#1{#1}
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
-% @math means output in math mode.
-% We don't use $'s directly in the definition of \math because control
-% sequences like \math are expanded when the toc file is written. Then,
-% we read the toc file back, the $'s will be normal characters (as they
-% should be, according to the definition of Texinfo). So we must use a
-% control sequence to switch into and out of math mode.
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
%
-% This isn't quite enough for @math to work properly in indices, but it
-% seems unlikely it will ever be needed there.
+% We also make \indent itself not actually do anything until the next
+% paragraph.
%
-\let\implicitmath = $
-\def\math#1{\implicitmath #1\implicitmath}
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent{%
+ \restorefirstparagraphindent
+ \indent
+ }%
+ \gdef\noindent{%
+ \restorefirstparagraphindent
+ \noindent
+ }%
+ \global\everypar = {%
+ \kern -\parindent
+ \restorefirstparagraphindent
+ }%
+}
+
+\gdef\restorefirstparagraphindent{%
+ \global \let \indent = \ptexindent
+ \global \let \noindent = \ptexnoindent
+ \global \everypar = {}%
+}
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
% @refill is a no-op.
\let\refill=\relax
% So open here the files we need to have open while reading the input.
% This makes it possible to make a .fmt file for texinfo.
\def\setfilename{%
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
\iflinks
- \readauxfile
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
\fi % \openindices needs to do some work in any case.
\openindices
- \fixbackslash % Turn off hack to swallow `\input texinfo'.
- \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+ \let\setfilename=\comment % Ignore extra @setfilename cmds.
%
% If texinfo.cnf is present on the system, read it.
% Useful for site-wide @afourpaper, etc.
- % Just to be on the safe side, close the input stream before the \input.
\openin 1 texinfo.cnf
- \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
- \closein1
- \temp
+ \ifeof 1 \else \input texinfo.cnf \fi
+ \closein 1
%
\comment % Ignore the actual filename.
}
\message{pdf,}
% adobe `portable' document format
-
\newcount\tempnum
\newcount\lnkcount
\newtoks\filename
\newcount\filenamelength
\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
-\ifpdf
-\def\pdfmkdest#1{\pdfdest name{#1@} xyz}
-\def\pdfmkpgn#1{#1@}
-
-% Adding outlines to PDF; macros for calculating structure of outlines
-% come from Petr Olsak
-\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
- \else \csname#1\endcsname \fi}
-\def\advancenumber#1{\tempnum=\expnumber{#1}\relax
- \advance\tempnum by1
- \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-\def\pdfmakeoutlines{{%
- \openin 1 \jobname.toc
- \ifeof 1\else\bgroup
- \closein 1
- \def\code##1{##1}
- \def\file##1{##1}
- \def\TeX##1{TeX}
- \def\tt{}
- \def\char{char}
- \def\samp##1{##1}
- \def\kbd##1{##1}
- \def\key##1{##1}
- \def\rawbackslashxx{\string\\}
- \def\chapentry ##1##2##3{}
- \def\unnumbchapentry ##1##2{}
- \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
- \def\unnumbsecentry ##1##2{}
- \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
- \def\unnumbsubsecentry ##1##2{}
- \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
- \def\unnumbsubsubsecentry ##1##2{}
- \input \jobname.toc
- \def\chapentry ##1##2##3{%
- \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
- \def\unnumbchapentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
- \def\secentry ##1##2##3##4{%
- \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
- \def\unnumbsecentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
- \def\subsecentry ##1##2##3##4##5{%
- \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
- \def\unnumbsubsecentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
- \def\subsubsecentry ##1##2##3##4##5##6{%
- \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
- \def\unnumbsubsubsecentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
- \input \jobname.toc
- \egroup\fi
-}}
-\pdfmakeoutlines
-
-\def\makelinks #1,{%
- \def\params{#1}\def\E{END}%
- \ifx\params\E
- \let\nextmakelinks=\relax
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as being undefined.
+\ifx\pdfoutput\thisisundefined
+\else
+ \ifx\pdfoutput\relax
\else
- \let\nextmakelinks=\makelinks
- \ifnum\lnkcount>0,\fi
- \picknum{#1}%
- \Blue\pdfannotlink attr{/Border [0 0 0]}
- goto name{\pdfmkpgn{\the\pgn}}%
- #1%
- \advance\lnkcount by 1%
- \Black\pdfendlink
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
\fi
- \nextmakelinks
-}
+\fi
-\def\picknum#1{\expandafter\pn#1}
-\def\pn#1{%
- \def\p{#1}%
- \ifx\p\lbrace
- \let\nextpn=\ppn
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places. Thus, we have to
+% double any backslashes. Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e. Not good.
+%
+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+% related messages. The final outcome is that it is up to the TeX user
+% to double the backslashes and otherwise make the string valid, so
+% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to
+% do this reliably, so we use it.
+
+% #1 is a control sequence in which to do the replacements,
+% which we \xdef.
+\def\txiescapepdf#1{%
+ \ifx\pdfescapestring\thisisundefined
+ % No primitive available; should we give a warning or log?
+ % Many times it won't matter.
\else
- \let\nextpn=\ppnn
- \def\first{#1}
+ % The expandable \pdfescapestring primitive escapes parentheses,
+ % backslashes, and other special chars.
+ \xdef#1{\pdfescapestring{#1}}%
\fi
- \nextpn
}
-\def\ppn#1{\pgn=#1\gobble}
-\def\ppnn{\pgn=\first}
-\def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
-\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-\def\skipspaces#1{\def\PP{#1}\def\D{|}%
- \ifx\PP\D\let\nextsp\relax
- \else\let\nextsp\skipspaces
- \ifx\p\space\else\addtokens{\filename}{\PP}%
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found. (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+ %
+ % Color manipulation macros based on pdfcolor.tex,
+ % except using rgb instead of cmyk; the latter is said to render as a
+ % very dark gray on-screen and a very dark halftone in print, instead
+ % of actual black.
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ % k sets the color for filling (usual text, etc.);
+ % K sets the color for stroking (thin rules, e.g., normal _'s).
+ \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\lastcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ %
+ \pdfcatalog{/PageMode /UseOutlines}
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\dopdfimage#1#2#3{%
+ \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\pdfimgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \else \gdef\pdfimgext{JPG}%
+ \fi
+ \else \gdef\pdfimgext{jpeg}%
+ \fi
+ \else \gdef\pdfimgext{jpg}%
+ \fi
+ \else \gdef\pdfimgext{png}%
+ \fi
+ \else \gdef\pdfimgext{PDF}%
+ \fi
+ \else \gdef\pdfimgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ % without \immediate, ancient pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifdim \wd0 >0pt width \pdfimagewidth \fi
+ \ifdim \wd2 >0pt height \pdfimageheight \fi
+ \ifnum\pdftexversion<13
+ #1.\pdfimgext
+ \else
+ {#1.\pdfimgext}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ %
+ \def\pdfmkdest#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \turnoffactive
+ \makevalueexpandable
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }}
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}
+ %
+ % by default, use a color that is dark enough to print on paper as
+ % nearly black, but still distinguishable for online viewing.
+ \def\urlcolor{\rgbDarkRed}
+ \def\linkcolor{\rgbDarkRed}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text, which is what will be displayed in the
+ % outline by the pdf viewer. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node text,
+ % which might be empty if this toc entry had no corresponding node.
+ % #4 is the page number
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worth the trouble, since most documents are normally structured.
+ \edef\pdfoutlinedest{#3}%
+ \ifx\pdfoutlinedest\empty
+ \def\pdfoutlinedest{#4}%
+ \else
+ \txiescapepdf\pdfoutlinedest
+ \fi
+ %
+ % Also escape PDF chars in the display string.
+ \edef\pdfoutlinetext{#1}%
+ \txiescapepdf\pdfoutlinetext
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \readdatafile{toc}%
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % TODO this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Too
+ % much work for too little return. Just use the ASCII equivalents
+ % we use for the index sort strings.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
\advance\filenamelength by 1
\fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
\fi
- \nextsp}
-\def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \setcolor{\linkcolor}#1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ % non-pdf mode
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\setcolor = \gobble
+ \let\pdfsetcolor = \gobble
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
-\def\pdflink#1{%
- \leavevmode\Red
- \begingroup
- \normalturnoffactive\def\@{@}%
- \pdfannotlink
- attr{/Border [0 0 0]}%
- user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
- \endgroup
+
+\message{fonts,}
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname ten#1\endcsname % change the current font
}
-\else
-\let\pdflink = \gobble
-\fi % end \ifpdf
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
-\message{fonts,}
-% Font-change commands.
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Unfortunately, we have to override this for titles and the like, since
+% in those cases "rm" is bold. Sigh.
+\def\rmisbold{\rm\def\curfontstyle{bf}}
% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
+% So we set up a \sf.
\newfam\sffam
-\def\sf{\fam=\sffam \tensf}
+\def\sf{\fam=\sffam \setfontstyle{sf}}
\let\li = \sf % Sometimes we call it \li, not \sf.
-% We don't need math for this one.
-\def\ttsl{\tenttsl}
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
-% Use Computer Modern fonts at \magstephalf (11pt).
-\newcount\mainmagstep
-\mainmagstep=\magstephalf
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-% #3 is the font's design size, #4 is a scale factor
-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\newdimen\textleading
+\def\setleading#1{%
+ \dimen0 = #1\relax
+ \normalbaselineskip = \baselinefactor\dimen0
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% PDF CMaps. See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\thisisundefined \else
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1IT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1TT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named \fontprefix#2.
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
+% Example:
+% #1 = \textrm
+% #2 = \rmshape
+% #3 = 10
+% #4 = \mainmagstep
+% #5 = OT1
+%
+\def\setfont#1#2#3#4#5{%
+ \font#1=\fontprefix#2#3 scaled #4
+ \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+%
+% (end of cmaps)
% Use cm as the default font prefix.
% To specify the font prefix, you must define \fontprefix
% before you read in texinfo.tex.
-\ifx\fontprefix\undefined
+\ifx\fontprefix\thisisundefined
\def\fontprefix{cm}
\fi
% Support font families that don't use the same naming scheme as CM.
\def\rmshape{r}
-\def\rmbshape{bx} %where the normal face is bold
+\def\rmbshape{bx} % where the normal face is bold
\def\bfshape{b}
\def\bxshape{bx}
\def\ttshape{tt}
\def\scshape{csc}
\def\scbshape{csc}
-\ifx\bigger\relax
-\let\mainmagstep=\magstep1
-\setfont\textrm\rmshape{12}{1000}
-\setfont\texttt\ttshape{12}{1000}
-\else
-\setfont\textrm\rmshape{10}{\mainmagstep}
-\setfont\texttt\ttshape{10}{\mainmagstep}
-\fi
-% Instead of cmb10, you many want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10.
-\setfont\textbf\bfshape{10}{\mainmagstep}
-\setfont\textit\itshape{10}{\mainmagstep}
-\setfont\textsl\slshape{10}{\mainmagstep}
-\setfont\textsf\sfshape{10}{\mainmagstep}
-\setfont\textsc\scshape{10}{\mainmagstep}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}
+% Definitions for a main text size of 11pt. (The default in Texinfo.)
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
\font\texti=cmmi10 scaled \mainmagstep
\font\textsy=cmsy10 scaled \mainmagstep
-
-% A few fonts for @defun, etc.
-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
-\setfont\deftt\ttshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-% Fonts for indices and small examples (9pt).
-% We actually use the slanted font rather than the italic,
-% because texinfo normally uses the slanted fonts for that.
-% Do not make many font distinctions in general in the index, since they
-% aren't very useful.
-\setfont\ninett\ttshape{9}{1000}
-\setfont\ninettsl\ttslshape{10}{900}
-\setfont\indrm\rmshape{9}{1000}
-\setfont\indit\itshape{9}{1000}
-\setfont\indsl\slshape{9}{1000}
-\let\indtt=\ninett
-\let\indttsl=\ninettsl
-\let\indsf=\indrm
-\let\indbf=\indrm
-\setfont\indsc\scshape{10}{900}
-\font\indi=cmmi9
-\font\indsy=cmsy9
-
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\setfont\titleit\itbshape{10}{\magstep4}
-\setfont\titlesl\slbshape{10}{\magstep4}
-\setfont\titlett\ttbshape{12}{\magstep3}
-\setfont\titlettsl\ttslshape{10}{\magstep4}
-\setfont\titlesf\sfbshape{17}{\magstep1}
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
\font\titlei=cmmi12 scaled \magstep3
\font\titlesy=cmsy10 scaled \magstep4
-\def\authorrm{\secrm}
+\def\titleecsize{2074}
% Chapter (and unnumbered) fonts (17.28pt).
-\setfont\chaprm\rmbshape{12}{\magstep2}
-\setfont\chapit\itbshape{10}{\magstep3}
-\setfont\chapsl\slbshape{10}{\magstep3}
-\setfont\chaptt\ttbshape{12}{\magstep2}
-\setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{17}{1000}
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
\font\chapi=cmmi12 scaled \magstep2
\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
% Section fonts (14.4pt).
-\setfont\secrm\rmbshape{12}{\magstep1}
-\setfont\secit\itbshape{10}{\magstep2}
-\setfont\secsl\slbshape{10}{\magstep2}
-\setfont\sectt\ttbshape{12}{\magstep1}
-\setfont\secttsl\ttslshape{10}{\magstep2}
-\setfont\secsf\sfbshape{12}{\magstep1}
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
\font\seci=cmmi12 scaled \magstep1
\font\secsy=cmsy10 scaled \magstep2
-
-% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
-% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
-% \setfont\ssecsl\slshape{10}{\magstep1}
-% \setfont\ssectt\ttshape{10}{\magstep1}
-% \setfont\ssecsf\sfshape{10}{\magstep1}
-
-%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
-%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
-%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
-%\setfont\ssectt\ttshape{10}{1315}
-%\setfont\ssecsf\sfshape{10}{1315}
-
-%\let\ssecbf=\ssecrm
+\def\sececsize{1440}
% Subsection fonts (13.15pt).
-\setfont\ssecrm\rmbshape{12}{\magstephalf}
-\setfont\ssecit\itbshape{10}{1315}
-\setfont\ssecsl\slbshape{10}{1315}
-\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{1315}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{\magstep1}
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
\font\sseci=cmmi12 scaled \magstephalf
\font\ssecsy=cmsy10 scaled 1315
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
+\def\ssececsize{1200}
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+\textleading = 13.2pt % line spacing for 11pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 11pt text font size definitions, \definetextfontsizexi
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit. This is for the GNU
+% Press printing of the Emacs 22 manual. Maybe other manuals in the
+% future. Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+\divide\parskip by 2 % reduce space between paragraphs
+\textleading = 12pt % line spacing for 10pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 10pt text font size definitions, \definetextfontsizex
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xiword{11}
+\def\xword{10}
+\def\xwordpt{10pt}
+%
+\parseargdef\fonttextsize{%
+ \def\textsizearg{#1}%
+ %\wlog{doing @fonttextsize \textsizearg}%
+ %
+ % Set \globaldefs so that documents can use this inside @tex, since
+ % makeinfo 4.8 does not support it, but we need it nonetheless.
+ %
+ \begingroup \globaldefs=1
+ \ifx\textsizearg\xword \definetextfontsizex
+ \else \ifx\textsizearg\xiword \definetextfontsizexi
+ \else
+ \errhelp=\EMsimple
+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+ \fi\fi
+ \endgroup
+}
+
% In order for the font changes to affect most math symbols and letters,
% we have to define the \textfont of the standard families. Since
-% texinfo doesn't allow for producing subscripts and superscripts, we
-% don't bother to reset \scriptfont and \scriptscriptfont (which would
-% also require loading a lot more fonts).
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
%
\def\resetmathfonts{%
- \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
- \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
- \textfont\ttfam = \tentt \textfont\sffam = \tensf
+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
}
-
% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE. We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
-% \tenbf}, for example. By redefining \tenbf, we obviate the need to
-% redefine \bf itself.
+% of just \STYLE. We do this because \STYLE needs to also set the
+% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
\def\textfonts{%
\let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
\let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
- \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
- \resetmathfonts}
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+ \let\tenttsl=\textttsl
+ \def\curfontsize{text}%
+ \def\lsize{reduced}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{\textleading}}
\def\titlefonts{%
\let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
\let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
\let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
\let\tenttsl=\titlettsl
- \resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts\rm #1}}
+ \def\curfontsize{title}%
+ \def\lsize{chap}\def\lllsize{subsec}%
+ \resetmathfonts \setleading{27pt}}
+\def\titlefont#1{{\titlefonts\rmisbold #1}}
\def\chapfonts{%
\let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
\let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
- \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+ \let\tenttsl=\chapttsl
+ \def\curfontsize{chap}%
+ \def\lsize{sec}\def\lllsize{text}%
\resetmathfonts \setleading{19pt}}
\def\secfonts{%
\let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
\let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
- \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+ \let\tenttsl=\secttsl
+ \def\curfontsize{sec}%
+ \def\lsize{subsec}\def\lllsize{reduced}%
\resetmathfonts \setleading{16pt}}
\def\subsecfonts{%
\let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
\let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+ \let\tenttsl=\ssecttsl
+ \def\curfontsize{ssec}%
+ \def\lsize{text}\def\lllsize{small}%
\resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-\def\indexfonts{%
- \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
- \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
- \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
- \resetmathfonts \setleading{12pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+ \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+ \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+ \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+ \let\tenttsl=\reducedttsl
+ \def\curfontsize{reduced}%
+ \def\lsize{small}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+ \let\tenttsl=\smallttsl
+ \def\curfontsize{small}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+ \let\tenttsl=\smallerttsl
+ \def\curfontsize{smaller}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{9.5pt}}
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\textfonts
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
-% Define these so they can be easily changed for other fonts.
+% Define these just so they can be easily changed for other fonts.
\def\angleleft{$\langle$}
\def\angleright{$\rangle$}
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+\message{markup,}
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will
+% define and register \INITMACRO to be called on markup style changes.
+% \INITMACRO can check \currentmarkupstyle for the innermost
+% style and the set of \ifmarkupSTYLE switches for all styles
+% currently in effect.
+\newif\ifmarkupvar
+\newif\ifmarkupsamp
+\newif\ifmarkupkey
+%\newif\ifmarkupfile % @file == @samp.
+%\newif\ifmarkupoption % @option == @samp.
+\newif\ifmarkupcode
+\newif\ifmarkupkbd
+%\newif\ifmarkupenv % @env == @code.
+%\newif\ifmarkupcommand % @command == @code.
+\newif\ifmarkuptex % @tex (and part of @math, for now).
+\newif\ifmarkupexample
+\newif\ifmarkupverb
+\newif\ifmarkupverbatim
+
+\let\currentmarkupstyle\empty
+
+\def\setupmarkupstyle#1{%
+ \csname markup#1true\endcsname
+ \def\currentmarkupstyle{#1}%
+ \markupstylesetup
+}
+
+\let\markupstylesetup\empty
+
+\def\defmarkupstylesetup#1{%
+ \expandafter\def\expandafter\markupstylesetup
+ \expandafter{\markupstylesetup #1}%
+ \def#1%
+}
+
+% Markup style setup for left and right quotes.
+\defmarkupstylesetup\markupsetuplq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuplq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
+}
+
+\defmarkupstylesetup\markupsetuprq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuprq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\markupsetuplqdefault{\let`\lq}
+\gdef\markupsetuprqdefault{\let'\rq}
+
+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
+\gdef\markupsetcodequoteright{\let'\codequoteright}
+}
+
+\let\markupsetuplqcode \markupsetcodequoteleft
+\let\markupsetuprqcode \markupsetcodequoteright
+%
+\let\markupsetuplqexample \markupsetcodequoteleft
+\let\markupsetuprqexample \markupsetcodequoteright
+%
+\let\markupsetuplqkbd \markupsetcodequoteleft
+\let\markupsetuprqkbd \markupsetcodequoteright
+%
+\let\markupsetuplqsamp \markupsetcodequoteleft
+\let\markupsetuprqsamp \markupsetcodequoteright
+%
+\let\markupsetuplqverb \markupsetcodequoteleft
+\let\markupsetuprqverb \markupsetcodequoteright
+%
+\let\markupsetuplqverbatim \markupsetcodequoteleft
+\let\markupsetuprqverbatim \markupsetcodequoteright
+
+% Allow an option to not use regular directed right quote/apostrophe
+% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
+% The undirected quote is ugly, so don't make it the default, but it
+% works for pasting with more pdf viewers (at least evince), the
+% lilypond developers report. xpdf does work with the regular 0x27.
+%
+\def\codequoteright{%
+ \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+ '%
+ \else \char'15 \fi
+ \else \char'15 \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+ \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+ % [Knuth] pp. 380,381,391
+ % \relax disables Spanish ligatures ?` and !` of \tt font.
+ \relax`%
+ \else \char'22 \fi
+ \else \char'22 \fi
+}
+
+% Commands to set the quote options.
+%
+\parseargdef\codequoteundirected{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
+ \fi\fi
+}
+%
+\parseargdef\codequotebacktick{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
+ \fi\fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
% Count depth in font-changes, for error checks
\newcount\fontdepth \fontdepth=0
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bxshape{12}{1000}
-\setfont\shortcontsl\slshape{12}{1000}
+% Font commands.
+
+% #1 is the font command (\sl or \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+ \ifusingtt
+ {{\ttsl #2}\let\next=\relax}%
+ {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+ \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
+
+% Output an italic correction unless \next (presumed to be the following
+% character) is such as not to need one.
+\def\smartitaliccorrection{%
+ \ifx\next,%
+ \else\ifx\next-%
+ \else\ifx\next.%
+ \else\ptexslash
+ \fi\fi\fi
+ \aftersmartic
+}
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
+% Unconditional use \ttsl, and no ic. @var is set to this for defuns.
+\def\ttslanted#1{{\ttsl #1}}
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
-\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
-\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
+% @cite is like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
+
+\def\aftersmartic{}
+\def\var#1{%
+ \let\saveaftersmartic = \aftersmartic
+ \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
+ \smartslanted{#1}%
+}
\let\i=\smartitalic
-\let\var=\smartslanted
+\let\slanted=\smartslanted
\let\dfn=\smartslanted
\let\emph=\smartitalic
-\let\cite=\smartslanted
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @b, explicit bold. Also @strong.
\def\b#1{{\bf #1}}
\let\strong=\b
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
% We can't just use \exhyphenpenalty, because that only has effect at
% the end of a paragraph. Restore normal hyphenation at the end of the
% group within which \nohyphenation is presumably called.
\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
\def\restorehyphenation{\hyphenchar\font = `- }
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\plainfrenchspacing{%
+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+ \def\endofsentencespacefactor{1000}% for @. and friends
+ }
+ \def\plainnonfrenchspacing{%
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+ \def\endofsentencespacefactor{3000}% for @. and friends
+ }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+% @t, explicit typewriter.
\def\t#1{%
- {\tt \rawbackslash \frenchspacing #1}%
+ {\tt \rawbackslash \plainfrenchspacing #1}%
\null
}
-\let\ttfont=\t
-\def\samp#1{`\tclose{#1}'\null}
-\setfont\smallrm\rmshape{8}{1000}
-\font\smallsy=cmsy9
-\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
- \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
- \vbox{\hrule\kern-0.4pt
- \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
- \kern-0.4pt\hrule}%
- \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-% The old definition, with no lozenge:
-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-% @file, @option are the same as @samp.
-\let\file=\samp
-\let\option=\samp
+% @samp.
+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
+% @indicateurl is \samp, that is, with quotes.
+\let\indicateurl=\samp
+
+% @code (and similar) prints in typewriter, but with spaces the same
+% size as normal in the surrounding text, without hyphenation, etc.
+% This is a subroutine for that.
\def\tclose#1{%
{%
% Change normal interword space to be same as for the current font.
\nohyphenation
%
\rawbackslash
- \frenchspacing
+ \plainfrenchspacing
#1%
}%
- \null
+ \null % reset spacefactor to 1000
}
-% We *must* turn on hyphenation at `-' and `_' in \code.
+% We *must* turn on hyphenation at `-' and `_' in @code.
% Otherwise, it is too hard to avoid overfull hboxes
% in the Emacs manual, the Library manual, etc.
-
+%
% Unfortunately, TeX uses one parameter (\hyphenchar) to control
% both hyphenation at - and hyphenation within words.
% We must therefore turn them both off (\tclose does that)
% and arrange explicitly to hyphenate at a dash.
% -- rms.
{
- \catcode`\-=\active
- \catcode`\_=\active
+ \catcode`\-=\active \catcode`\_=\active
+ \catcode`\'=\active \catcode`\`=\active
+ \global\let'=\rq \global\let`=\lq % default definitions
%
\global\def\code{\begingroup
- \catcode`\-=\active \let-\codedash
- \catcode`\_=\active \let_\codeunder
+ \setupmarkupstyle{code}%
+ % The following should really be moved into \setupmarkupstyle handlers.
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\normaldash
+ \let_\realunder
+ \fi
\codex
}
- %
- % If we end up with any active - characters when handling the index,
- % just treat them as a normal -.
- \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
}
-\def\realdash{-}
-\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
\def\codex #1{\tclose{#1}\endgroup}
-%\let\exp=\tclose %Was temporary
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-% `example' (@kbd uses ttsl only inside of @example and friends),
-% or `code' (@kbd uses normal tty font always).
-\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
-\def\kbdinputstylexxx#1{%
- \def\arg{#1}%
- \ifx\arg\worddistinct
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
- \else\ifx\arg\wordexample
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
- \else\ifx\arg\wordcode
- \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
- \fi\fi\fi
+\def\normaldash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is bad.
+% @allowcodebreaks provides a document-level way to turn breaking at -
+% and _ on and off.
+%
+\newif\ifallowcodebreaks \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\keywordtrue
+ \allowcodebreakstrue
+ \else\ifx\txiarg\keywordfalse
+ \allowcodebreaksfalse
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
+ \fi\fi
}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-% Default is kbdinputdistinct. (Too much of a hassle to call the macro,
-% the catcodes are wrong for parsearg to work.)
-\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\kbdfont\look}}\fi
-\else{\tclose{\kbdfont\look}}\fi}
-
-% For @url, @env, @command quotes seem unnecessary, so use \code.
-\let\url=\code
-\let\env=\code
+% For @command, @env, @file, @option quotes seem unnecessary,
+% so use \code rather than \samp.
\let\command=\code
+\let\env=\code
+\let\file=\code
+\let\option=\code
% @uref (abbreviation for `urlref') takes an optional (comma-separated)
% second argument specifying the text to display and an optional third
% arg as text to display instead of (rather than in addition to) the url
-% itself. First (mandatory) arg is the url. Perhaps eventually put in
-% a hypertex \special here.
-%
-\def\uref#1{\douref #1,,,\finish}
-\def\douref#1,#2,#3,#4\finish{%
- \pdflink{#1}%
+% itself. First (mandatory) arg is the url.
+% (This \urefnobreak definition isn't used now, leaving it for a while
+% for comparison.)
+\def\urefnobreak#1{\dourefnobreak #1,,,\finish}
+\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup
+ \unsepspaces
+ \pdfurl{#1}%
\setbox0 = \hbox{\ignorespaces #3}%
\ifdim\wd0 > 0pt
\unhbox0 % third arg given, show only that
\code{#1}% only url given, so show it
\fi
\fi
- %
- \ifpdf
- \Black\pdfendlink
+ \endlink
+\endgroup}
+
+% This \urefbreak definition is the active one.
+\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
+\let\uref=\urefbreak
+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \urefcode{#1}% only url given, so show it
+ \fi
\fi
+ \endlink
+\endgroup}
+
+% Allow line breaks around only a few characters (only).
+\def\urefcatcodes{%
+ \catcode\ampChar=\active \catcode\dotChar=\active
+ \catcode\hashChar=\active \catcode\questChar=\active
+ \catcode\slashChar=\active
+}
+{
+ \urefcatcodes
+ %
+ \global\def\urefcode{\begingroup
+ \setupmarkupstyle{code}%
+ \urefcatcodes
+ \let&\urefcodeamp
+ \let.\urefcodedot
+ \let#\urefcodehash
+ \let?\urefcodequest
+ \let/\urefcodeslash
+ \codex
+ }
+ %
+ % By default, they are just regular characters.
+ \global\def&{\normalamp}
+ \global\def.{\normaldot}
+ \global\def#{\normalhash}
+ \global\def?{\normalquest}
+ \global\def/{\normalslash}
+}
+
+% we put a little stretch before and after the breakable chars, to help
+% line breaking of long url's. The unequal skips make look better in
+% cmtt at least, especially for dots.
+\def\urefprestretch{\urefprebreak \hskip0pt plus.13em }
+\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em }
+%
+\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
+\def\urefcodedot{\urefprestretch .\urefpoststretch}
+\def\urefcodehash{\urefprestretch \#\urefpoststretch}
+\def\urefcodequest{\urefprestretch ?\urefpoststretch}
+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
+{
+ \catcode`\/=\active
+ \global\def\urefcodeslashfinish{%
+ \urefprestretch \slashChar
+ % Allow line break only after the final / in a sequence of
+ % slashes, to avoid line break between the slashes in http://.
+ \ifx\next/\else \urefpoststretch \fi
+ }
+}
+
+% One more complication: by default we'll break after the special
+% characters, but some people like to break before the special chars, so
+% allow that. Also allow no breaking at all, for manual control.
+%
+\parseargdef\urefbreakstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\wordnone
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordbefore
+ \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordafter
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
+ \fi\fi\fi
}
+\def\wordafter{after}
+\def\wordbefore{before}
+\def\wordnone{none}
+
+\urefbreakstyle after
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
% rms does not like angle brackets --karl, 17may97.
% So now @email is just like @uref, unless we are pdf.
-%
+%
%\def\email#1{\angleleft{\tt #1}\angleright}
\ifpdf
\def\email#1{\doemail#1,,\finish}
- \def\doemail#1,#2,#3\finish{%
- \pdflink{mailto:#1}%
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
\setbox0 = \hbox{\ignorespaces #2}%
\ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
- \Black\pdfendlink
- }
+ \endlink
+ \endgroup}
\else
\let\email=\uref
\fi
-% Check if we are currently using a typewriter font. Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\txiarg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\txiarg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
+
+\def\xkey{\key}
+\def\kbdsub#1#2#3\par{%
+ \def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+}
+
+% definition of @key that produces a lozenge. Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+% \vbox{\hrule\kern-0.4pt
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+% \kern-0.4pt\hrule}%
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge. If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle. But
+% if it isn't monospace, then use \tt.
+%
+\def\key#1{{\setupmarkupstyle{key}%
+ \nohyphenation
+ \ifmonospace\else\tt\fi
+ #1}\null}
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
%
\def\dmn#1{\thinspace #1}
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
% @l was never documented to mean ``switch to the Lisp font'',
% and it is not used as such in any manual I can find. We need it for
% Polish suppressed-l. --karl, 22sep96.
%\def\l#1{{\li #1}\null}
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}} % roman font
-\def\sc#1{{\smallcaps#1}} % smallcaps font
-\def\ii#1{{\it #1}} % italic font
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\selectfonts\lsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\plainfrenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode`\_ = \active
+ \gdef\mathunderscore{%
+ \catcode`\_=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a math (or tt) \.
+% FYI, plain.tex uses \\ as a temporary control sequence (for no
+% particular reason), but this is not advertised and we don't care.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ % make the texinfo accent commands work in math mode
+ \let\"=\ddot
+ \let\'=\acute
+ \let\==\bar
+ \let\^=\hat
+ \let\`=\grave
+ \let\u=\breve
+ \let\v=\check
+ \let\~=\tilde
+ \let\dotaccent=\dot
+ $\finishmath
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \catcode`' = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ \let' = \ptexquoteright
+ }
+}
+
+% ctrl is no longer a Texinfo command, but leave this definition for fun.
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+% except specified as a normal braced arg, so no newlines to worry about.
+%
+\def\outfmtnametex{tex}
+%
+\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
+\long\def\doinlinefmt#1,#2,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+}
+% For raw, must switch into @tex before parsing the argument, to avoid
+% setting catcodes prematurely. Doing it this way means that, for
+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
+% ignored. But this isn't important because if people want a literal
+% *right* brace they would have to use a command anyway, so they may as
+% well use a command to get a left brace too. We could re-use the
+% delimiter character idea from \verb, but it seems like overkill.
+%
+\long\def\inlineraw{\tex \doinlineraw}
+\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
+\def\doinlinerawtwo#1,#2,\finish{%
+ \def\inlinerawname{#1}%
+ \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
+ \endgroup % close group opened by \tex.
+}
+
+
+\message{glyphs,}
+% and logos.
+
+% @@ prints an @, as does @atchar{}.
+\def\@{\char64 }
+\let\atchar=\@
+
+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
+% Unless we're in typewriter, use \ecfont because the CM text fonts do
+% not have braces, and we don't want to switch into math.
+\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
+\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
+\let\{=\mylbrace \let\lbracechar=\{
+\let\}=\myrbrace \let\rbracechar=\}
+\begingroup
+ % Definitions to produce \{ and \} commands for indices,
+ % and @{ and @} for the aux/toc files.
+ \catcode`\{ = \other \catcode`\} = \other
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\! = 0 \catcode`\\ = \other
+ !gdef!lbracecmd[\{]%
+ !gdef!rbracecmd[\}]%
+ !gdef!lbraceatcmd[@{]%
+ !gdef!rbraceatcmd[@}]%
+!endgroup
-% @acronym downcases the argument and prints in smallcaps.
-\def\acronym#1{{\smallcaps \lowercase{#1}}}
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
-% @pounds{} is a sterling sign.
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \ptexc
+\let\dotaccent = \ptexdot
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \ptext
+\let\ubaraccent = \ptexb
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{%
+ \ifx\textnominalsize\xwordpt
+ % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
+ % Revert to plain's \scriptsize, which is 7pt.
+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
+ \else
+ % For 11pt, we can use our lllsize.
+ \selectfonts\lllsize A%
+ \fi
+ }%
+ \vss
+ }}%
+ \kern-.15em
+ \TeX
+}
+
+% Some math mode symbols.
+\def\bullet{$\ptexbullet$}
+\def\geq{\ifmmode \ge\else $\ge$\fi}
+\def\leq{\ifmmode \le\else $\le$\fi}
+\def\minus{\ifmmode -\else $-$\fi}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em. So do
+% whichever is larger.
+%
+\def\dots{%
+ \leavevmode
+ \setbox0=\hbox{...}% get width of three periods
+ \ifdim\wd0 > 1.5em
+ \dimen0 = \wd0
+ \else
+ \dimen0 = 1.5em
+ \fi
+ \hbox to \dimen0{%
+ \hskip 0pt plus.25fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=\endofsentencespacefactor
+}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
\def\pounds{{\it\$}}
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbol don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% Glyphs from the EC fonts. We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases. We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+ \def\temp{#1}%
+ \ifx\temp\macrocharA\Aogonek
+ \else\ifx\temp\macrochara\aogonek
+ \else\ifx\temp\macrocharE\Eogonek
+ \else\ifx\temp\macrochare\eogonek
+ \else
+ \ecfont \setbox0=\hbox{#1}%
+ \ifdim\ht0=1ex\accent"0C #1%
+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+ \fi
+ \fi\fi\fi\fi
+ }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
+\def\ecfont{%
+ % We can't distinguish serif/sans and italic/slanted, but this
+ % is used for crude hacks anyway (like adding French and German
+ % quotes to documents typeset with CM, where we lose kerning), so
+ % hopefully nobody will notice/care.
+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+ \ifmonospace
+ % typewriter:
+ \font\thisecfont = ectt\ecsize \space at \nominalsize
+ \else
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+ \else
+ % regular:
+ \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+ \fi
+ \fi
+ \thisecfont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\thisisundefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quotedblleft="5C
+\chardef\quotedblright=`\"
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
\message{page headings,}
\newif\ifsetshortcontentsaftertitlepage
\let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
- \endgroup\page\hbox{}\page}
+\parseargdef\shorttitlepage{%
+ \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
-\def\titlepage{\begingroup \parindent=0pt \textfonts
- \let\subtitlerm=\tenrm
- \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
- %
- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
- %
- % Leave some space at the very top of the page.
- \vglue\titlepagetopglue
- %
- % Now you can print the title using @title.
- \def\title{\parsearg\titlezzz}%
- \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
- % print a rule at the page bottom also.
- \finishedtitlepagefalse
- \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
- % No rule at page bottom unless we print one at the top with @title.
- \finishedtitlepagetrue
- %
- % Now you can put text using @subtitle.
- \def\subtitle{\parsearg\subtitlezzz}%
- \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
- %
- % @author should come last, but may come many times.
- \def\author{\parsearg\authorzzz}%
- \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
- {\authorfont \leftline{##1}}}%
- %
- % Most title ``pages'' are actually two pages long, with space
- % at the top of the second. We don't want the ragged left on the second.
- \let\oldpage = \page
- \def\page{%
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
\iffinishedtitlepage\else
- \finishtitlepage
+ \finishtitlepage
\fi
- \oldpage
\let\page = \oldpage
- \hbox{}}%
-% \def\page{\oldpage \hbox{}}
+ \page
+ \null
+ }%
}
\def\Etitlepage{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- % It is important to do the page break before ending the group,
- % because the headline and footline are only empty inside the group.
- % If we use the new definition of \page, we always get a blank page
- % after the title page, which we certainly don't want.
- \oldpage
- \endgroup
- %
- % If they want short, they certainly want long too.
- \ifsetshortcontentsaftertitlepage
- \shortcontents
- \contents
- \global\let\shortcontents = \relax
- \global\let\contents = \relax
- \fi
- %
- \ifsetcontentsaftertitlepage
- \contents
- \global\let\contents = \relax
- \global\let\shortcontents = \relax
- \fi
- %
- \HEADINGSon
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+ %
+ % If they want short, they certainly want long too.
+ \ifsetshortcontentsaftertitlepage
+ \shortcontents
+ \contents
+ \global\let\shortcontents = \relax
+ \global\let\contents = \relax
+ \fi
+ %
+ \ifsetcontentsaftertitlepage
+ \contents
+ \global\let\contents = \relax
+ \global\let\shortcontents = \relax
+ \fi
}
\def\finishtitlepage{%
- \vskip4pt \hrule height 2pt width \hsize
- \vskip\titlepagebottomglue
- \finishedtitlepagetrue
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+% Settings used for typesetting titles: no hyphenation, no indentation,
+% don't worry much about spacing, ragged right. This should be used
+% inside a \vbox, and fonts need to be set appropriately first. Because
+% it is always used for titles, nothing else, we call \rmisbold. \par
+% should be specified before the end of the \vbox, since a vbox is a group.
+%
+\def\raggedtitlesettings{%
+ \rmisbold
+ \hyphenpenalty=10000
+ \parindent=0pt
+ \tolerance=5000
+ \ptexraggedright
+}
+
+% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \vbox{\titlefonts \raggedtitlesettings #1\par}%
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
}
-%%% Set up page headings and footings.
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\secfonts\rmisbold \leftline{#1}}%
+ \fi
+}
+
+
+% Set up page headings and footings.
\let\thispage=\folio
\newtoks\evenfootline % footline on even pages
\newtoks\oddfootline % footline on odd pages
-% Now make Tex use those variables
+% Now make TeX use those variables
\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
\else \the\evenheadline \fi}}
\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
% @evenfooting @thisfile||
% @oddfooting ||@thisfile
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
-
-{\catcode`\@=0 %
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
\global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
%
% Leave some space for the footline. Hopefully ok to assume
% @evenfooting will not be used by itself.
- \global\advance\pageheight by -\baselineskip
- \global\advance\vsize by -\baselineskip
+ \global\advance\pageheight by -12pt
+ \global\advance\vsize by -12pt
}
-\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
%
-}% unbind the catcode of @.
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
+ \headingmarks{odd}{heading}{#1} }
+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+ \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
% @headings double turns headings on for double-sided printing.
% @headings single turns headings on for single-sided printing.
\def\headings #1 {\csname HEADINGS#1\endcsname}
-\def\HEADINGSoff{
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
+\def\headingsoff{% non-global headings elimination
+ \evenheadline={\hfil}\evenfootline={\hfil}%
+ \oddheadline={\hfil}\oddfootline={\hfil}%
+}
+
+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
+\HEADINGSoff % it's the default
+
% When we turn headings on, set the page number to 1.
% For double-sided printing, put current file name in lower left corner,
% chapter name on inside top of right hand pages, document
% title on inside top of left hand pages, and page numbers on outside top
% edge of all pages.
-\def\HEADINGSdouble{
+\def\HEADINGSdouble{%
\global\pageno=1
\global\evenfootline={\hfil}
\global\oddfootline={\hfil}
% For single-sided printing, chapter title goes across top left of page,
% page number on top right.
-\def\HEADINGSsingle{
+\def\HEADINGSsingle{%
\global\pageno=1
\global\evenfootline={\hfil}
\global\oddfootline={\hfil}
}
% Subroutines used in generating headings
-% Produces Day Month Year style of output.
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\thisisundefined
\def\today{%
\number\day\space
\ifcase\month
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
\fi
\space\number\year}
+\fi
% @settitle line... specifies the title of the document, for headings.
% It generates no output of its own.
\def\thistitle{\putwordNoTitle}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
+\def\settitle{\parsearg{\gdef\thistitle}}
\message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
+% Tables -- @table, @ftable, @vtable, @item(x).
% default indentation of table text
\newdimen\tableindent \tableindent=.8in
% used internally for \itemindent minus \itemmargin
\newdimen\itemmax
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
% these defs.
% They also define \itemindex
% to index the item name in whatever manner is desired (perhaps none).
\def\internalBitem{\smallbreak \parsearg\itemzzz}
\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
- \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
- \itemzzz {#1}}
-
\def\itemzzz #1{\begingroup %
\advance\hsize by -\rightskip
\advance\hsize by -\tableindent
- \setbox0=\hbox{\itemfont{#1}}%
+ \setbox0=\hbox{\itemindicate{#1}}%
\itemindex{#1}%
\nobreak % This prevents a break before @itemx.
%
\begingroup
\advance\leftskip by-\tableindent
\advance\hsize by\tableindent
- \advance\rightskip by0pt plus1fil
+ \advance\rightskip by0pt plus1fil\relax
\leavevmode\unhbox0\par
\endgroup
%
% \parskip glue -- logically it's part of the @item we just started.
\nobreak \vskip-\parskip
%
- % Stop a page break at the \parskip glue coming up. Unfortunately
- % we can't prevent a possible page break at the following
- % \baselineskip glue.
- \nobreak
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
\endgroup
\itemxneedsnegativevskipfalse
\else
\fi
}
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-% Contains a kludge to get @end[description] to work.
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
% @table, @ftable, @vtable.
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1 \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1 \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1 \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Necessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
% This is the counter used by @enumerate, which is really @itemize
\newcount \itemno
-\def\itemize{\parsearg\itemizezzz}
+\envdef\itemize{\parsearg\doitemize}
-\def\itemizezzz #1{%
- \begingroup % ended by the @end itemize
- \itemizey {#1}{\Eitemize}
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ %
+ % Try typesetting the item mark that if the document erroneously says
+ % something like @itemize @samp (intending @table), there's an error
+ % right away at the @itemize. It's not the best error message in the
+ % world, but it's better than leaving it to the @item. This means if
+ % the user wants an empty mark, they have to say @w{} not just @w.
+ \def\itemcontents{#1}%
+ \setbox0 = \hbox{\itemcontents}%
+ %
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ %
+ \let\item=\itemizeitem
}
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
-
-% Set sfcode to normal for the chars that usually have another value.
-% These are `.?!:;,'
-\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
- \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ %
+ \vadjust{\penalty 1200}}% not good to break after first line of item.
+ \flushcr
+}
% \splitoff TOKENS\endmark defines \first to be the first token in
% TOKENS, and \rest to be the remainder.
% or number, to specify the first label in the enumerated list. No
% argument is the same as `1'.
%
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1 \endenumeratey}
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
\def\enumeratey #1 #2\endenumeratey{%
- \begingroup % ended by the @end enumerate
- %
% If we were given no argument, pretend we were given `1'.
\def\thearg{#1}%
\ifx\thearg\empty \def\thearg{1}\fi
}%
}
-% Call itemizey, adding a period to the first argument and supplying the
+% Call \doitemize, adding a period to the first argument and supplying the
% common last two arguments. Also subtract one from the initial value in
% \itemno, since @item increments \itemno.
%
\def\startenumeration#1{%
\advance\itemno by -1
- \itemizey{#1.}\Eenumerate\flushcr
+ \doitemize{#1.}\flushcr
}
% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
\def\Ealphaenumerate{\Eenumerate}
\def\Ecapsenumerate{\Eenumerate}
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{In hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
% @multitable macros
% Amy Hendrickson, 8/18/94, 3/6/96
% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
% @item ...
% using the widest term desired in each column.
-%
-% For those who want to use more than one line's worth of words in
-% the preamble, break the line within one argument and it
-% will parse correctly, i.e.,
-%
-% @multitable {Column 1 template} {Column 2 template} {Column 3
-% template}
-% Not:
-% @multitable {Column 1 template} {Column 2 template}
-% {Column 3 template}
% Each new table line starts with @item, each subsequent new column
% starts with @tab. Empty columns may be produced by supplying @tab's
% with nothing between them for as many times as empty columns are needed,
% ie, @tab@tab@tab will produce two empty columns.
-% @item, @tab, @multitable or @end multitable do not need to be on their
-% own lines, but it will not hurt if they are.
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
% Sample multitable:
\def\xcolumnfractions{\columnfractions}
\newif\ifsetpercent
-% #1 is the part of the @columnfraction before the decimal point, which
-% is presumably either 0 or the empty string (but we don't check, we
-% just throw it away). #2 is the decimal part, which we use as the
-% percent of \hsize for this column.
-\def\pickupwholefraction#1.#2 {%
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
\global\advance\colcount by 1
- \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
\setuptable
}
\let\go\pickupwholefraction
\else
\global\advance\colcount by 1
- \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
- % typically that is always in the input, anyway.
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
\expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
\fi
\fi
\go
}
-% This used to have \hskip1sp. But then the space in a template line is
-% not enough. That is bad. So let's go back to just & until we
-% encounter the problem it was intended to solve again.
-% --karl, nathan@acm.org, 20apr99.
-\def\tab{&}
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry. \everycr resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+ \checkenv\multitable
+ \crcr
+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+ \the\everytab % for the first item
+}%
+%
+% A \tab used to include \hskip1sp. But then the space in a template
+% line is not enough. That is bad. So let's go back to just `&' until
+% we again encounter the problem the 1sp was intended to solve.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
% @multitable ... @end multitable definitions:
%
-\def\multitable{\parsearg\dotable}
-\def\dotable#1{\bgroup
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
\vskip\parskip
- \let\item\crcr
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
\tolerance=9500
\hbadness=9500
\setmultitablespacing
\parindent=\multitableparindent
\overfullrule=0pt
\global\colcount=0
- \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
%
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}%
+ \global\colcount=0 % Reset the column counter.
+ % Check for saved footnotes, etc.
+ \checkinserts
+ % Keeps underfull box messages off when table breaks over pages.
+ %\filbreak
+ % Maybe so, but it also creates really weird page breaks when the
+ % table breaks over pages. Wouldn't \vfil be better? Wait until the
+ % problem manifests itself, so it can be fixed for real --karl.
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
% To parse everything between @multitable and @item:
\setuptable#1 \endsetuptable
%
- % \everycr will reset column counter, \colcount, at the end of
- % each line. Every column entry will cause \colcount to advance by one.
- % The table preamble
- % looks at the current \colcount to find the correct column width.
- \everycr{\noalign{%
- %
- % \filbreak%% keeps underfull box messages off when table breaks over pages.
- % Maybe so, but it also creates really weird page breaks when the table
- % breaks over pages. Wouldn't \vfil be better? Wait until the problem
- % manifests itself, so it can be fixed for real --karl.
- \global\colcount=0\relax}}%
- %
% This preamble sets up a generic column definition, which will
% be used as many times as user calls for columns.
% \vtop will set a single line and will also let text wrap and
% continue for many paragraphs if desired.
- \halign\bgroup&\global\advance\colcount by 1\relax
- \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
- %
- % In order to keep entries from bumping into each other
- % we will add a \leftskip of \multitablecolspace to all columns after
- % the first one.
- %
- % If a template has been used, we will add \multitablecolspace
- % to the width of each template entry.
- %
- % If the user has set preamble in terms of percent of \hsize we will
- % use that dimension as the width of the column, and the \leftskip
- % will keep entries from bumping into each other. Table will start at
- % left margin and final column will justify at right margin.
- %
- % Make sure we don't inherit \rightskip from the outer environment.
- \rightskip=0pt
- \ifnum\colcount=1
- % The first column will be indented with the surrounding text.
- \advance\hsize by\leftskip
- \else
- \ifsetpercent \else
- % If user has not set preamble in terms of percent of \hsize
- % we will advance \hsize by \multitablecolspace.
- \advance\hsize by \multitablecolspace
- \fi
- % In either case we will make \leftskip=\multitablecolspace:
- \leftskip=\multitablecolspace
- \fi
- % Ignoring space at the beginning and end avoids an occasional spurious
- % blank line, when TeX decides to break the line at the space before the
- % box from the multistrut, so the strut ends up on a line by itself.
- % For example:
- % @multitable @columnfractions .11 .89
- % @item @code{#}
- % @tab Legal holiday which is valid in major parts of the whole country.
- % Is automatically provided with highlighting sequences respectively marking
- % characters.
- \noindent\ignorespaces##\unskip\multistrut}\cr
-}
-
-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
-% If so, do nothing. If not, give it an appropriate dimension based on
-% current baselineskip.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \multistrut
+ \vtop{%
+ % Use the current \colcount to find the correct column width:
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively
+ % marking characters.
+ \noindent\ignorespaces##\unskip\multistrut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+ \def\multistrut{\strut}% just use the standard line spacing
+ %
+ % Compute \multitablelinespace (if not defined by user) for use in
+ % \multitableparskip calculation. We used define \multistrut based on
+ % this, but (ironically) that caused the spacing to be off.
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
\ifdim\multitablelinespace=0pt
-%% strut to put in table in case some entry doesn't have descenders,
-%% to keep lines equally spaced
-\let\multistrut = \strut
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%% If so, set to same dimension as multitablelinespace.
-\else
-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
-width0pt\relax} \fi
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+% Test to see if parskip is larger than space between lines of
+% table. If not, do nothing.
+% If so, set to same dimension as multitablelinespace.
\ifdim\multitableparskip>\multitablelinespace
\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
\fi%
\ifdim\multitableparskip=0pt
\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
\fi}
\message{conditionals,}
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
- \let\chapter=\relax
- \let\unnumbered=\relax
- \let\top=\relax
- \let\unnumberedsec=\relax
- \let\unnumberedsection=\relax
- \let\unnumberedsubsec=\relax
- \let\unnumberedsubsection=\relax
- \let\unnumberedsubsubsec=\relax
- \let\unnumberedsubsubsection=\relax
- \let\section=\relax
- \let\subsec=\relax
- \let\subsubsec=\relax
- \let\subsection=\relax
- \let\subsubsection=\relax
- \let\appendix=\relax
- \let\appendixsec=\relax
- \let\appendixsection=\relax
- \let\appendixsubsec=\relax
- \let\appendixsubsection=\relax
- \let\appendixsubsubsec=\relax
- \let\appendixsubsubsection=\relax
- \let\contents=\relax
- \let\smallbook=\relax
- \let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-\def\ignoremorecommands{%
- \let\defcodeindex = \relax
- \let\defcv = \relax
- \let\deffn = \relax
- \let\deffnx = \relax
- \let\defindex = \relax
- \let\defivar = \relax
- \let\defmac = \relax
- \let\defmethod = \relax
- \let\defop = \relax
- \let\defopt = \relax
- \let\defspec = \relax
- \let\deftp = \relax
- \let\deftypefn = \relax
- \let\deftypefun = \relax
- \let\deftypeivar = \relax
- \let\deftypevar = \relax
- \let\deftypevr = \relax
- \let\defun = \relax
- \let\defvar = \relax
- \let\defvr = \relax
- \let\ref = \relax
- \let\xref = \relax
- \let\printindex = \relax
- \let\pxref = \relax
- \let\settitle = \relax
- \let\setchapternewpage = \relax
- \let\setchapterstyle = \relax
- \let\everyheading = \relax
- \let\evenheading = \relax
- \let\oddheading = \relax
- \let\everyfooting = \relax
- \let\evenfooting = \relax
- \let\oddfooting = \relax
- \let\headings = \relax
- \let\include = \relax
- \let\lowersections = \relax
- \let\down = \relax
- \let\raisesections = \relax
- \let\up = \relax
- \let\set = \relax
- \let\clear = \relax
- \let\item = \relax
-}
-
-% Ignore @ignore ... @end ignore.
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
%
-\def\ignore{\doignore{ignore}}
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
-% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
%
-\def\ifinfo{\doignore{ifinfo}}
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
\def\ifnottex{\doignore{ifnottex}}
-\def\html{\doignore{html}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-
-% @dircategory CATEGORY -- specify a category of the dir file
-% which this file should belong to. Ignore this in TeX.
-\let\dircategory = \comment
+\def\xml{\doignore{xml}}
-% Ignore text until a line `@end #1'.
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
\def\doignore#1{\begingroup
- % Don't complain about control sequences we have declared \outer.
- \ignoresections
- %
- % Define a command to swallow text until we reach `@end #1'.
- % This @ is a catcode 12 token (that is the normal catcode of @ in
- % this texinfo.tex file). We change the catcode of @ below to match.
- \long\def\doignoretext##1@end #1{\enddoignore}%
+ % Scan in ``verbatim'' mode:
+ \obeylines
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
%
% Make sure that spaces turn into tokens that match what \doignoretext wants.
- \catcode32 = 10
- %
- % Ignore braces, too, so mismatched braces don't cause trouble.
- \catcode`\{ = 9
- \catcode`\} = 9
- %
- % We must not have @c interpreted as a control sequence.
- \catcode`\@ = 12
- %
- % Make the letter c a comment character so that the rest of the line
- % will be ignored. This way, the document can have (for example)
- % @c @end ifinfo
- % and the @end ifinfo will be properly ignored.
- % (We've just changed @ to catcode 12.)
- \catcode`\c = 14
- %
- % And now expand that command.
- \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
- \ifwarnedobs\relax\else
- % We need to warn folks that they may have trouble with TeX 3.0.
- % This uses \immediate\write16 rather than \message to get newlines.
- \immediate\write16{}
- \immediate\write16{WARNING: for users of Unix TeX 3.0!}
- \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
- \immediate\write16{If you are running another version of TeX, relax.}
- \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
- \immediate\write16{ Then upgrade your TeX installation if you can.}
- \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
- \immediate\write16{If you are stuck with version 3.0, run the}
- \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
- \immediate\write16{ to use a workaround.}
- \immediate\write16{}
- \global\warnedobstrue
- \fi
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching `@end #1'.
+ \dodoignore{#1}%
}
-% **In TeX 3.0, setting text in \nullfont hangs tex. For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
- \obstexwarn
- % We must actually expand the ignored text to look for the @end
- % command, so that nested ignore constructs work. Thus, we put the
- % text into a \vbox and then do nothing with the result. To minimize
- % the change of memory overflow, we follow the approach outlined on
- % page 401 of the TeXbook: make the current font be a dummy font.
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
%
- \setbox0 = \vbox\bgroup
- % Don't complain about control sequences we have declared \outer.
- \ignoresections
- %
- % Define `@end #1' to end the box, which will in turn undefine the
- % @end command again.
- \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
%
- % We are going to be parsing Texinfo commands. Most cause no
- % trouble when they are used incorrectly, but some commands do
- % complicated argument parsing or otherwise get confused, so we
- % undefine them.
+ % Define a command to find the next `@end #1'.
+ \long\def\doignoretext##1^^M@end #1{%
+ \doignoretextyyy##1^^M@#1\_STOP_}%
%
- % We can't do anything about stray @-signs, unfortunately;
- % they'll produce `undefined control sequence' errors.
- \ignoremorecommands
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line `@c @ifset', for
+ % example, to count as an @ifset for nesting.)
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
%
- % Set the current font to be \nullfont, a TeX primitive, and define
- % all the font commands to also use \nullfont. We don't use
- % dummy.tfm, as suggested in the TeXbook, because not all sites
- % might have that installed. Therefore, math mode will still
- % produce output, but that should be an extremely small amount of
- % stuff compared to the main input.
- %
- \nullfont
- \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont
- \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont
- \let\tensf = \nullfont
- % Similarly for index fonts (mostly for their use in
- % smallexample)
- \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont
- \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont
- \let\indsf = \nullfont
- %
- % Don't complain when characters are missing from the fonts.
- \tracinglostchars = 0
- %
- % Don't bother to do space factor calculations.
- \frenchspacing
- %
- % Don't report underfull hboxes.
- \hbadness = 10000
- %
- % Do minimal line-breaking.
- \pretolerance = 10000
- %
- % Do not execute instructions in @tex
- \def\tex{\doignore{tex}}%
- % Do not execute macro definitions.
- % `c' is a comment character, so the word `macro' will get cut off.
- \def\macro{\doignore{ma}}%
+ % And now expand that command.
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+ % Ignore anything after the last `@end #1'; this matters in verbatim
+ % environments, where otherwise the newline after an ignored conditional
+ % would result in a blank line in the output.
+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
}
+
% @set VAR sets the variable VAR to an empty value.
% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
%
% Since we want to separate VAR from REST-OF-LINE (which might be
% empty), we can't just use \parsearg; we have to insert a space of our
% own to delimit the rest of the line, and then take it out again if we
-% didn't need it. Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
%
-\def\set{\begingroup\catcode` =10
- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
- \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
+\parseargdef\set{\setyyy#1 \endsetyyy}
\def\setyyy#1 #2\endsetyyy{%
- \def\temp{#2}%
- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
- \fi
- \endgroup
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
}
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
% @clear VAR clears (i.e., unsets) the variable VAR.
%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
{
- \catcode`\_ = \active
+ \catcode`\- = \active \catcode`\_ = \active
%
- % We might end up with active _ or - characters in the argument if
- % we're called from @code, as @code{@value{foo-bar_}}. So \let any
- % such active characters to their normal equivalents.
- \gdef\value{\begingroup
- \catcode`\-=12 \catcode`\_=12
- \indexbreaks \let_\normalunderscore
- \valuexxx}
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
+ % So \let them to their normal equivalents.
+ \let-\normaldash \let_\normalunderscore
+ }
}
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we \let\value to this in \indexdummies). Ones
-% whose names contain - or _ still won't work, but we can't do anything
-% about that. The command has to be fully expandable, since the result
-% winds up in the index file. This means that if the variable's value
-% contains other Texinfo commands, it's almost certain it will fail
-% (although perhaps we could fix that with sufficient work to do a
-% one-level expansion on the result, instead of complete).
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file. This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
%
\def\expandablevalue#1{%
\expandafter\ifx\csname SET#1\endcsname\relax
{[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
\else
\csname SET#1\endcsname
\fi
% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
% with @set.
%
-\def\ifset{\parsearg\ifsetxxx}
-\def\ifsetxxx #1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- \expandafter\ifsetfail
- \else
- \expandafter\ifsetsucceed
- \fi
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
}
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
+\def\ifsetfail{\doignore{ifset}}
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% @ifclear VAR ... @end executes the `...' iff VAR has never been
% defined with @set, or has been undefined with @clear.
%
-\def\ifclear{\parsearg\ifclearxxx}
-\def\ifclearxxx #1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- \expandafter\ifclearsucceed
- \else
- \expandafter\ifclearfail
- \fi
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
-% following, through the first @end iftex (etc.). Make `@end iftex'
-% (etc.) valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-\defineunmatchedend{iftex}
-\defineunmatchedend{ifnothtml}
-\defineunmatchedend{ifnotinfo}
-
-% We can't just want to start a group at @iftex (for example) and end it
-% at @end iftex, since then @set commands inside the conditional have no
-% effect (they'd get reverted at the end of the group). So we must
-% define \Eiftex to redefine itself to be its previous value. (We can't
-% just define it to fail again with an ``unmatched end'' error, since
-% the @ifset might be nested.)
-%
-\def\conditionalsucceed#1{%
- \edef\temp{%
- % Remember the current value of \E#1.
- \let\nece{prevE#1} = \nece{E#1}%
- %
- % At the `@end #1', redefine \E#1 to be its previous value.
- \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
- }%
- \temp
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
+% without the @) is in fact defined. We can only feasibly check at the
+% TeX level, so something like `mathcode' is going to considered
+% defined even though it is not a Texinfo command.
+%
+\makecond{ifcommanddefined}
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
+%
+\def\doifcmddefined#1#2{{%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname #2\endcsname\relax
+ #1% If not defined, \let\next as above.
+ \fi
+ \expandafter
+ }\next
}
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
-% We need to expand lots of \csname's, but we don't want to expand the
-% control sequences after we've constructed them.
-%
-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
+% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
+\makecond{ifcommandnotdefined}
+\def\ifcommandnotdefined{%
+ \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
+
+% Set the `txicommandconditionals' variable, so documents have a way to
+% test if the @ifcommand...defined conditionals are available.
+\set txicommandconditionals
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
% @defininfoenclose.
\let\definfoenclose=\comment
% Index generation facilities
% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
% \newindex {foo} defines an index named foo.
% It automatically defines \fooindex such that
}
% @defindex foo == \newindex{foo}
-
+%
\def\defindex{\parsearg\newindex}
% Define @defcodeindex, like @defindex except put all entries in @code.
-
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
\def\newcodeindex#1{%
\iflinks
\expandafter\newwrite \csname#1indfile\endcsname
\openout \csname#1indfile\endcsname \jobname.#1
\fi
\expandafter\xdef\csname#1index\endcsname{%
- \noexpand\docodeindex{#1}}
+ \noexpand\docodeindex{#1}}%
}
-\def\defcodeindex{\parsearg\newcodeindex}
% @synindex foo bar makes index foo feed into index bar.
% Do this instead of @defindex foo if you don't want it as a separate index.
-% The \closeout helps reduce unnecessary open files; the limit on the
-% Acorn RISC OS is a mere 16 files.
-\def\synindex#1 #2 {%
- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
- \expandafter\closeout\csname#1indfile\endcsname
- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
- \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
- \noexpand\doindex{#2}}%
-}
-
+%
% @syncodeindex foo bar similar, but put all entries made for index foo
% inside @code.
-\def\syncodeindex#1 #2 {%
- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
- \expandafter\closeout\csname#1indfile\endcsname
- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
- \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
- \noexpand\docodeindex{#2}}%
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ % Only do \closeout if we haven't already done it, else we'll end up
+ % closing the target index.
+ \expandafter \ifx\csname donesynindex#2\endcsname \relax
+ % The \closeout helps reduce unnecessary open files; the limit on the
+ % Acorn RISC OS is a mere 16 files.
+ \expandafter\closeout\csname#2indfile\endcsname
+ \expandafter\let\csname donesynindex#2\endcsname = 1
+ \fi
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
}
% Define \doindex, the driver for all \fooindex macros.
\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
\def\indexdummies{%
-\def\ { }%
-% Take care of the plain tex accent commands.
-\def\"{\realbackslash "}%
-\def\`{\realbackslash `}%
-\def\'{\realbackslash '}%
-\def\^{\realbackslash ^}%
-\def\~{\realbackslash ~}%
-\def\={\realbackslash =}%
-\def\b{\realbackslash b}%
-\def\c{\realbackslash c}%
-\def\d{\realbackslash d}%
-\def\u{\realbackslash u}%
-\def\v{\realbackslash v}%
-\def\H{\realbackslash H}%
-% Take care of the plain tex special European modified letters.
-\def\oe{\realbackslash oe}%
-\def\ae{\realbackslash ae}%
-\def\aa{\realbackslash aa}%
-\def\OE{\realbackslash OE}%
-\def\AE{\realbackslash AE}%
-\def\AA{\realbackslash AA}%
-\def\o{\realbackslash o}%
-\def\O{\realbackslash O}%
-\def\l{\realbackslash l}%
-\def\L{\realbackslash L}%
-\def\ss{\realbackslash ss}%
-% Take care of texinfo commands likely to appear in an index entry.
-% (Must be a way to avoid doing expansion at all, and thus not have to
-% laboriously list every single command here.)
-\def\@{@}% will be @@ when we switch to @ as escape char.
-% Need these in case \tex is in effect and \{ is a \delimiter again.
-% But can't use \lbracecmd and \rbracecmd because texindex assumes
-% braces and backslashes are used only as delimiters.
-\let\{ = \mylbrace
-\let\} = \myrbrace
-\def\_{{\realbackslash _}}%
-\def\w{\realbackslash w }%
-\def\bf{\realbackslash bf }%
-%\def\rm{\realbackslash rm }%
-\def\sl{\realbackslash sl }%
-\def\sf{\realbackslash sf}%
-\def\tt{\realbackslash tt}%
-\def\gtr{\realbackslash gtr}%
-\def\less{\realbackslash less}%
-\def\hat{\realbackslash hat}%
-\def\TeX{\realbackslash TeX}%
-\def\dots{\realbackslash dots }%
-\def\result{\realbackslash result}%
-\def\equiv{\realbackslash equiv}%
-\def\expansion{\realbackslash expansion}%
-\def\print{\realbackslash print}%
-\def\error{\realbackslash error}%
-\def\point{\realbackslash point}%
-\def\copyright{\realbackslash copyright}%
-\def\tclose##1{\realbackslash tclose {##1}}%
-\def\code##1{\realbackslash code {##1}}%
-\def\uref##1{\realbackslash uref {##1}}%
-\def\url##1{\realbackslash url {##1}}%
-\def\env##1{\realbackslash env {##1}}%
-\def\command##1{\realbackslash command {##1}}%
-\def\option##1{\realbackslash option {##1}}%
-\def\dotless##1{\realbackslash dotless {##1}}%
-\def\samp##1{\realbackslash samp {##1}}%
-\def\,##1{\realbackslash ,{##1}}%
-\def\t##1{\realbackslash t {##1}}%
-\def\r##1{\realbackslash r {##1}}%
-\def\i##1{\realbackslash i {##1}}%
-\def\b##1{\realbackslash b {##1}}%
-\def\sc##1{\realbackslash sc {##1}}%
-\def\cite##1{\realbackslash cite {##1}}%
-\def\key##1{\realbackslash key {##1}}%
-\def\file##1{\realbackslash file {##1}}%
-\def\var##1{\realbackslash var {##1}}%
-\def\kbd##1{\realbackslash kbd {##1}}%
-\def\dfn##1{\realbackslash dfn {##1}}%
-\def\emph##1{\realbackslash emph {##1}}%
-\def\acronym##1{\realbackslash acronym {##1}}%
-%
-% Handle some cases of @value -- where the variable name does not
-% contain - or _, and the value does not contain any
-% (non-fully-expandable) commands.
-\let\value = \expandablevalue
-%
-\unsepspaces
-% Turn off macro expansion
-\turnoffmacros
-}
-
-% If an index command is used in an @example environment, any spaces
-% therein should become regular spaces in the raw index file, not the
-% expansion of \tie (\\leavevmode \penalty \@M \ ).
-{\obeyspaces
- \gdef\unsepspaces{\obeyspaces\let =\space}}
-
-% \indexnofonts no-ops all font-change commands.
-% This is used when outputting the strings to sort the index by.
-\def\indexdummyfont#1{#1}
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
+ \escapechar = `\\ % use backslash in output files.
+ \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+ \def\ {\realbackslash\space }%
+ %
+ % Need these unexpandable (because we define \tt as a dummy)
+ % definitions when @{ or @} appear in index entry text. Also, more
+ % complicated, when \tex is in effect and \{ is a \delimiter again.
+ % We can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters. Perhaps we
+ % should define @lbrace and @rbrace commands a la @comma.
+ \def\{{{\tt\char123}}%
+ \def\}{{\tt\char125}}%
+ %
+ % I don't entirely understand this, but when an index entry is
+ % generated from a macro call, the \endinput which \scanmacro inserts
+ % causes processing to be prematurely terminated. This is,
+ % apparently, because \indexsorttmp is fully expanded, and \endinput
+ % is an expandable command. The redefinition below makes \endinput
+ % disappear altogether for that purpose -- although logging shows that
+ % processing continues to some further point. On the other hand, it
+ % seems \endinput does not hurt in the printed index arg, since that
+ % is still getting written without apparent harm.
+ %
+ % Sample source (mac-idx3.tex, reported by Graham Percival to
+ % help-texinfo, 22may06):
+ % @macro funindex {WORD}
+ % @findex xyz
+ % @end macro
+ % ...
+ % @funindex commtest
+ %
+ % The above is not enough to reproduce the bug, but it gives the flavor.
+ %
+ % Sample whatsit resulting:
+ % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
+ %
+ % So:
+ \let\endinput = \empty
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% For the aux and toc files, @ is the escape character. So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files). When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+ \def\@{@@}%
+ \def\ {@ }%
+ \let\{ = \lbraceatcmd
+ \let\} = \rbraceatcmd
+ %
+ % Do the redefinitions.
+ \commondummies
+ \otherbackslash
+}
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+ %
+ % \definedummyword defines \#1 as \string\#1\space, thus effectively
+ % preventing its expansion. This is used only for control words,
+ % not control letters, because the \space would be incorrect for
+ % control characters, but is needed to separate the control word
+ % from whatever follows.
+ %
+ % For control letters, we have \definedummyletter, which omits the
+ % space.
+ %
+ % These can be used both for control words that take an argument and
+ % those that do not. If it is followed by {arg} in the input, then
+ % that will dutifully get written to the index (or wherever).
+ %
+ \def\definedummyword ##1{\def##1{\string##1\space}}%
+ \def\definedummyletter##1{\def##1{\string##1}}%
+ \let\definedummyaccent\definedummyletter
+ %
+ \commondummiesnofonts
+ %
+ \definedummyletter\_%
+ \definedummyletter\-%
+ %
+ % Non-English letters.
+ \definedummyword\AA
+ \definedummyword\AE
+ \definedummyword\DH
+ \definedummyword\L
+ \definedummyword\O
+ \definedummyword\OE
+ \definedummyword\TH
+ \definedummyword\aa
+ \definedummyword\ae
+ \definedummyword\dh
+ \definedummyword\exclamdown
+ \definedummyword\l
+ \definedummyword\o
+ \definedummyword\oe
+ \definedummyword\ordf
+ \definedummyword\ordm
+ \definedummyword\questiondown
+ \definedummyword\ss
+ \definedummyword\th
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword\bf
+ \definedummyword\gtr
+ \definedummyword\hat
+ \definedummyword\less
+ \definedummyword\sf
+ \definedummyword\sl
+ \definedummyword\tclose
+ \definedummyword\tt
+ %
+ \definedummyword\LaTeX
+ \definedummyword\TeX
+ %
+ % Assorted special characters.
+ \definedummyword\arrow
+ \definedummyword\bullet
+ \definedummyword\comma
+ \definedummyword\copyright
+ \definedummyword\registeredsymbol
+ \definedummyword\dots
+ \definedummyword\enddots
+ \definedummyword\entrybreak
+ \definedummyword\equiv
+ \definedummyword\error
+ \definedummyword\euro
+ \definedummyword\expansion
+ \definedummyword\geq
+ \definedummyword\guillemetleft
+ \definedummyword\guillemetright
+ \definedummyword\guilsinglleft
+ \definedummyword\guilsinglright
+ \definedummyword\lbracechar
+ \definedummyword\leq
+ \definedummyword\minus
+ \definedummyword\ogonek
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \definedummyword\quotedblbase
+ \definedummyword\quotedblleft
+ \definedummyword\quotedblright
+ \definedummyword\quoteleft
+ \definedummyword\quoteright
+ \definedummyword\quotesinglbase
+ \definedummyword\rbracechar
+ \definedummyword\result
+ \definedummyword\textdegree
+ %
+ % We want to disable all macros so that they are not expanded by \write.
+ \macrolist
+ %
+ \normalturnoffactive
+ %
+ % Handle some cases of @value -- where it does not contain any
+ % (non-fully-expandable) commands.
+ \makevalueexpandable
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+\def\commondummiesnofonts{%
+ % Control letters and accents.
+ \definedummyletter\!%
+ \definedummyaccent\"%
+ \definedummyaccent\'%
+ \definedummyletter\*%
+ \definedummyaccent\,%
+ \definedummyletter\.%
+ \definedummyletter\/%
+ \definedummyletter\:%
+ \definedummyaccent\=%
+ \definedummyletter\?%
+ \definedummyaccent\^%
+ \definedummyaccent\`%
+ \definedummyaccent\~%
+ \definedummyword\u
+ \definedummyword\v
+ \definedummyword\H
+ \definedummyword\dotaccent
+ \definedummyword\ogonek
+ \definedummyword\ringaccent
+ \definedummyword\tieaccent
+ \definedummyword\ubaraccent
+ \definedummyword\udotaccent
+ \definedummyword\dotless
+ %
+ % Texinfo font commands.
+ \definedummyword\b
+ \definedummyword\i
+ \definedummyword\r
+ \definedummyword\sansserif
+ \definedummyword\sc
+ \definedummyword\slanted
+ \definedummyword\t
+ %
+ % Commands that take arguments.
+ \definedummyword\abbr
+ \definedummyword\acronym
+ \definedummyword\anchor
+ \definedummyword\cite
+ \definedummyword\code
+ \definedummyword\command
+ \definedummyword\dfn
+ \definedummyword\dmn
+ \definedummyword\email
+ \definedummyword\emph
+ \definedummyword\env
+ \definedummyword\file
+ \definedummyword\image
+ \definedummyword\indicateurl
+ \definedummyword\inforef
+ \definedummyword\kbd
+ \definedummyword\key
+ \definedummyword\math
+ \definedummyword\option
+ \definedummyword\pxref
+ \definedummyword\ref
+ \definedummyword\samp
+ \definedummyword\strong
+ \definedummyword\tie
+ \definedummyword\uref
+ \definedummyword\url
+ \definedummyword\var
+ \definedummyword\verb
+ \definedummyword\w
+ \definedummyword\xref
+}
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
\def\indexnofonts{%
-% Just ignore accents.
-\let\,=\indexdummyfont
-\let\"=\indexdummyfont
-\let\`=\indexdummyfont
-\let\'=\indexdummyfont
-\let\^=\indexdummyfont
-\let\~=\indexdummyfont
-\let\==\indexdummyfont
-\let\b=\indexdummyfont
-\let\c=\indexdummyfont
-\let\d=\indexdummyfont
-\let\u=\indexdummyfont
-\let\v=\indexdummyfont
-\let\H=\indexdummyfont
-\let\dotless=\indexdummyfont
-% Take care of the plain tex special European modified letters.
-\def\oe{oe}%
-\def\ae{ae}%
-\def\aa{aa}%
-\def\OE{OE}%
-\def\AE{AE}%
-\def\AA{AA}%
-\def\o{o}%
-\def\O{O}%
-\def\l{l}%
-\def\L{L}%
-\def\ss{ss}%
-\let\w=\indexdummyfont
-\let\t=\indexdummyfont
-\let\r=\indexdummyfont
-\let\i=\indexdummyfont
-\let\b=\indexdummyfont
-\let\emph=\indexdummyfont
-\let\strong=\indexdummyfont
-\let\cite=\indexdummyfont
-\let\sc=\indexdummyfont
-%Don't no-op \tt, since it isn't a user-level command
-% and is used in the definitions of the active chars like <, >, |...
-%\let\tt=\indexdummyfont
-\let\tclose=\indexdummyfont
-\let\code=\indexdummyfont
-\let\url=\indexdummyfont
-\let\uref=\indexdummyfont
-\let\env=\indexdummyfont
-\let\command=\indexdummyfont
-\let\option=\indexdummyfont
-\let\file=\indexdummyfont
-\let\samp=\indexdummyfont
-\let\kbd=\indexdummyfont
-\let\key=\indexdummyfont
-\let\var=\indexdummyfont
-\let\TeX=\indexdummytex
-\let\dots=\indexdummydots
-\def\@{@}%
-}
-
-% To define \realbackslash, we must make \ not be an escape.
-% We must first make another character (@) an escape
-% so we do not become unable to do a definition.
-
-{\catcode`\@=0 \catcode`\\=\other
- @gdef@realbackslash{\}}
+ % Accent commands should become @asis.
+ \def\definedummyaccent##1{\let##1\asis}%
+ % We can just ignore other control letters.
+ \def\definedummyletter##1{\let##1\empty}%
+ % All control words become @asis by default; overrides below.
+ \let\definedummyword\definedummyaccent
+ %
+ \commondummiesnofonts
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ \def\ { }%
+ \def\@{@}%
+ \def\_{\normalunderscore}%
+ \def\-{}% @- shouldn't affect sorting
+ %
+ % Unfortunately, texindex is not prepared to handle braces in the
+ % content at all. So for index sorting, we map @{ and @} to strings
+ % starting with |, since that ASCII character is between ASCII { and }.
+ \def\{{|a}%
+ \def\lbracechar{|a}%
+ %
+ \def\}{|b}%
+ \def\rbracechar{|b}%
+ %
+ % Non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\DH{DZZ}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\TH{ZZZ}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\dh{dzz}%
+ \def\exclamdown{!}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\ordf{a}%
+ \def\ordm{o}%
+ \def\o{o}%
+ \def\questiondown{?}%
+ \def\ss{ss}%
+ \def\th{zzz}%
+ %
+ \def\LaTeX{LaTeX}%
+ \def\TeX{TeX}%
+ %
+ % Assorted special characters.
+ % (The following {} will end up in the sort string, but that's ok.)
+ \def\arrow{->}%
+ \def\bullet{bullet}%
+ \def\comma{,}%
+ \def\copyright{copyright}%
+ \def\dots{...}%
+ \def\enddots{...}%
+ \def\equiv{==}%
+ \def\error{error}%
+ \def\euro{euro}%
+ \def\expansion{==>}%
+ \def\geq{>=}%
+ \def\guillemetleft{<<}%
+ \def\guillemetright{>>}%
+ \def\guilsinglleft{<}%
+ \def\guilsinglright{>}%
+ \def\leq{<=}%
+ \def\minus{-}%
+ \def\point{.}%
+ \def\pounds{pounds}%
+ \def\print{-|}%
+ \def\quotedblbase{"}%
+ \def\quotedblleft{"}%
+ \def\quotedblright{"}%
+ \def\quoteleft{`}%
+ \def\quoteright{'}%
+ \def\quotesinglbase{,}%
+ \def\registeredsymbol{R}%
+ \def\result{=>}%
+ \def\textdegree{o}%
+ %
+ \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
+ \else \indexlquoteignore \fi
+ %
+ % We need to get rid of all macros, leaving only the arguments (if present).
+ % Of course this is not nearly correct, but it is the best we can do for now.
+ % makeinfo does not expand macros in the argument to @deffn, which ends up
+ % writing an index entry, and texindex isn't prepared for an index sort entry
+ % that starts with \.
+ %
+ % Since macro invocations are followed by braces, we can just redefine them
+ % to take a single TeX argument. The case of a macro invocation that
+ % goes to end-of-line is not handled.
+ %
+ \macrolist
+}
+
+% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
+% ignore left quotes in the sort term.
+{\catcode`\`=\active
+ \gdef\indexlquoteignore{\let`=\empty}}
\let\indexbackslash=0 %overridden during \printindex.
\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-% For \ifx comparisons.
-\def\emptymacro{\empty}
-
% Most index entries go through here, but \dosubind is the general case.
-%
-\def\doind#1#2{\dosubind{#1}{#2}\empty}
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
% Workhorse for all \fooindexes.
% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% \empty if called from \doind, as we usually are. The main exception
-% is with defuns, which call us directly.
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
%
\def\dosubind#1#2#3{%
+ \iflinks
+ {%
+ % Store the main index entry text (including the third arg).
+ \toks0 = {#2}%
+ % If third arg is present, precede it with a space.
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\empty \else
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \safewhatsit\dosubindwrite
+ }%
+ \fi
+}
+
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
% Put the index entry in the margin if desired.
\ifx\SETmarginindex\relax\else
- \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
\fi
- {%
- \count255=\lastpenalty
- {%
- \indexdummies % Must do this here, since \bf, etc expand at this stage
- \escapechar=`\\
- {%
- \let\folio = 0% We will expand all macros now EXCEPT \folio.
- \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
- % so it will be output as is; and it will print as backslash.
- %
- \def\thirdarg{#3}%
- %
- % If third arg is present, precede it with space in sort key.
- \ifx\thirdarg\emptymacro
- \let\subentry = \empty
- \else
- \def\subentry{ #3}%
- \fi
- %
- % First process the index entry with all font commands turned
- % off to get the string to sort by.
- {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
- %
- % Now the real index entry with the fonts.
- \toks0 = {#2}%
- %
- % If third (subentry) arg is present, add it to the index
- % string. And include a space.
- \ifx\thirdarg\emptymacro \else
- \toks0 = \expandafter{\the\toks0 \space #3}%
- \fi
- %
- % Set up the complete index entry, with both the sort key
- % and the original text, including any font commands. We write
- % three arguments to \entry to the .?? file, texindex reduces to
- % two when writing the .??s sorted result.
- \edef\temp{%
- \write\csname#1indfile\endcsname{%
- \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
- }%
- %
- % If a skip is the last thing on the list now, preserve it
- % by backing up by \lastskip, doing the \write, then inserting
- % the skip again. Otherwise, the whatsit generated by the
- % \write will make \lastskip zero. The result is that sequences
- % like this:
- % @end defun
- % @tindex whatever
- % @defun ...
- % will have extra space inserted, because the \medbreak in the
- % start of the @defun won't see the skip inserted by the @end of
- % the previous defun.
- %
- % But don't do any of this if we're not in vertical mode. We
- % don't want to do a \vskip and prematurely end a paragraph.
- %
- % Avoid page breaks due to these extra skips, too.
- %
- \iflinks
- \ifvmode
- \skip0 = \lastskip
- \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
- \fi
- %
- \temp % do the write
- %
- %
- \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
- \fi
- }%
- }%
- \penalty\count255
+ %
+ % Remember, we are within a group.
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+ % so it will be output as is; and it will print as backslash.
+ %
+ % Process the index entry with all font commands turned off, to
+ % get the string to sort by.
+ {\indexnofonts
+ \edef\temp{\the\toks0}% need full expansion
+ \xdef\indexsorttmp{\temp}%
}%
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+ }%
+ \temp
}
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero. The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{\ifhmode
+ #1%
+ \else
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \whatsitskip = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \whatsitpenalty = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\whatsitskip glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\whatsitskip
+ \fi
+ %
+ #1%
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\whatsitskip
+ \fi
+\fi}
+
% The index entry written in the file actually looks like
% \entry {sortstring}{page}{topic}
% or
% @printindex causes a particular index (the ??s file) to get printed.
% It does not print any chapter heading (usually an @unnumbered).
%
-\def\printindex{\parsearg\doprintindex}
-\def\doprintindex#1{\begingroup
+\parseargdef\printindex{\begingroup
\dobreak \chapheadingskip{10000}%
%
- \indexfonts \rm
+ \smallfonts \rm
\tolerance = 9500
- \indexbreaks
+ \plainfrenchspacing
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
%
% See if the index file exists and is nonempty.
% Change catcode of @ here so that if the index file contains
% Index files are almost Texinfo source, but we use \ as the escape
% character. It would be better to use @, but that's too big a change
% to make right now.
- \def\indexbackslash{\rawbackslashxx}%
+ \def\indexbackslash{\backslashcurfont}%
\catcode`\\ = 0
\escapechar = `\\
\begindoublecolumns
\removelastskip
%
% We like breaks before the index initials, so insert a bonus.
- \penalty -300
+ \nobreak
+ \vskip 0pt plus 3\baselineskip
+ \penalty 0
+ \vskip 0pt plus -3\baselineskip
%
% Typeset the initial. Making this add up to a whole number of
% baselineskips increases the chance of the dots lining up from column
% No shrink because it confuses \balancecolumns.
\vskip 1.67\baselineskip plus .5\baselineskip
\leftline{\secbf #1}%
- \vskip .33\baselineskip plus .1\baselineskip
- %
% Do our best not to break after the initial.
\nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
}}
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin. It is used for index and table of contents
-% entries. The paragraph is indented by \leftskip.
-%
-\def\entry#1#2{\begingroup
- %
- % Start a new paragraph if necessary, so our assignments below can't
- % affect previous text.
- \par
- %
- % Do not fill out the last line with white space.
- \parfillskip = 0in
- %
- % No extra space above this paragraph.
- \parskip = 0in
- %
- % Do not prefer a separate line ending with a hyphen to fewer lines.
- \finalhyphendemerits = 0
- %
- % \hangindent is only relevant when the entry text and page number
- % don't both fit on one line. In that case, bob suggests starting the
- % dots pretty far over on the line. Unfortunately, a large
- % indentation looks wrong when the entry text itself is broken across
- % lines. So we use a small indentation and put up with long leaders.
- %
- % \hangafter is reset to 1 (which is the value we want) at the start
- % of each paragraph, so we need not do anything with that.
- \hangindent = 2em
- %
- % When the entry text needs to be broken, just fill out the first line
- % with blank space.
- \rightskip = 0pt plus1fil
- %
- % A bit of stretch before each entry for the benefit of balancing columns.
- \vskip 0pt plus1pt
- %
- % Start a ``paragraph'' for the index entry so the line breaking
- % parameters we've set above will have an effect.
- \noindent
- %
- % Insert the text of the index entry. TeX will do line-breaking on it.
- #1%
- % The following is kludged to not output a line of dots in the index if
- % there are no page numbers. The next person who breaks this will be
- % cursed by a Unix daemon.
- \def\tempa{{\rm }}%
- \def\tempb{#2}%
- \edef\tempc{\tempa}%
- \edef\tempd{\tempb}%
- \ifx\tempc\tempd\ \else%
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+% A straightforward implementation would start like this:
+% \def\entry#1#2{...
+% But this freezes the catcodes in the argument, and can cause problems to
+% @code, which sets - active. This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+% The right solution is to prevent \entry from swallowing the whole text.
+% --kasal, 21nov03
+\def\entry{%
+ \begingroup
%
- % If we must, put the page number on a line of its own, and fill out
- % this line with blank space. (The \hfil is overwhelmed with the
- % fill leaders glue in \indexdotfill if the page number does fit.)
- \hfil\penalty50
- \null\nobreak\indexdotfill % Have leaders before the page number.
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
%
- % The `\ ' here is removed by the implicit \unskip that TeX does as
- % part of (the primitive) \par. Without it, a spurious underfull
- % \hbox ensues.
- \ #2% The page number ends the paragraph.
- \fi%
- \par
-\endgroup}
+ % Do not fill out the last line with white space.
+ \parfillskip = 0in
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % \hangindent is only relevant when the entry text and page number
+ % don't both fit on one line. In that case, bob suggests starting the
+ % dots pretty far over on the line. Unfortunately, a large
+ % indentation looks wrong when the entry text itself is broken across
+ % lines. So we use a small indentation and put up with long leaders.
+ %
+ % \hangafter is reset to 1 (which is the value we want) at the start
+ % of each paragraph, so we need not do anything with that.
+ \hangindent = 2em
+ %
+ % When the entry text needs to be broken, just fill out the first line
+ % with blank space.
+ \rightskip = 0pt plus1fil
+ %
+ % A bit of stretch before each entry for the benefit of balancing
+ % columns.
+ \vskip 0pt plus1pt
+ %
+ % When reading the text of entry, convert explicit line breaks
+ % from @* into spaces. The user might give these in long section
+ % titles, for instance.
+ \def\*{\unskip\space\ignorespaces}%
+ \def\entrybreak{\hfil\break}%
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\entrybreak{\unskip\space\ignorespaces}%
+\def\doentry{%
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+ % #1 is the page number.
+ %
+ % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \setbox\boxA = \hbox{#1}%
+ \ifdim\wd\boxA = 0pt
+ \ %
+ \else
+ %
+ % If we must, put the page number on a line of its own, and fill out
+ % this line with blank space. (The \hfil is overwhelmed with the
+ % fill leaders glue in \indexdotfill if the page number does fit.)
+ \hfil\penalty50
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
+ % part of (the primitive) \par. Without it, a spurious underfull
+ % \hbox ensues.
+ \ifpdf
+ \pdfgettoks#1.%
+ \ \the\toksA
+ \else
+ \ #1%
+ \fi
+ \fi
+ \par
+ \endgroup
+}
-% Like \dotfill except takes at least 1 em.
+% Like plain.tex's \dotfill, except uses up at least 1 em.
\def\indexdotfill{\cleaders
- \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
\def\primary #1{\line{#1\hfil}}
\newskip\secondaryindent \secondaryindent=0.5cm
-
-\def\secondary #1#2{
-{\parfillskip=0in \parskip=0in
-\hangindent =1in \hangafter=1
-\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ #2
+ \fi
+ \par
}}
% Define two-column mode, which we use to typeset indexes.
%
% Double the \vsize as well. (We don't need a separate register here,
% since nobody clobbers \vsize.)
- \advance\vsize by -\ht\partialpage
\vsize = 2\vsize
}
% previous page.
\dimen@ = \vsize
\divide\dimen@ by 2
+ \advance\dimen@ by -\ht\partialpage
%
% box0 will be the left-hand column, box2 the right.
\setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
\unvbox255
\penalty\outputpenalty
}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
\def\pagesofar{%
- % Re-output the contents of the output page -- any previous material,
- % followed by the two boxes we just split, in box0 and box2.
\unvbox\partialpage
%
\hsize = \doublecolumnhsize
\wd0=\hsize \wd2=\hsize
\hbox to\pagewidth{\box0\hfil\box2}%
}
+%
+% All done with double columns.
\def\enddoublecolumns{%
+ % The following penalty ensures that the page builder is exercised
+ % _before_ we change the output routine. This is necessary in the
+ % following situation:
+ %
+ % The last section of the index consists only of a single entry.
+ % Before this section, \pagetotal is less than \pagegoal, so no
+ % break occurs before the last section starts. However, the last
+ % section, consisting of \initial and the single \entry, does not
+ % fit on the page and has to be broken off. Without the following
+ % penalty the page builder will not be exercised until \eject
+ % below, and by that time we'll already have changed the output
+ % routine to the \balancecolumns version, so the next-to-last
+ % double-column page will be processed with \balancecolumns, which
+ % is wrong: The two columns will go to the main vertical list, with
+ % the broken-off section in the recent contributions. As soon as
+ % the output routine finishes, TeX starts reconsidering the page
+ % break. The two columns and the broken-off section both fit on the
+ % page, because the two columns now take up only half of the page
+ % goal. When TeX sees \eject from below which follows the final
+ % section, it invokes the new output routine that we've set after
+ % \balancecolumns below; \onepageout will try to fit the two columns
+ % and the final section into the vbox of \pageheight (see
+ % \pagebody), causing an overfull box.
+ %
+ % Note that glue won't work here, because glue does not exercise the
+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+ \penalty0
+ %
\output = {%
% Split the last of the double-column material. Leave it on the
% current page, no automatic page break.
% \endgroup where \vsize got restored).
\pagegoal = \vsize
}
+%
+% Called at the end of the double column material.
\def\balancecolumns{%
- % Called at the end of the double column material.
\setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
\dimen@ = \ht0
\advance\dimen@ by \topskip
\message{sectioning,}
% Chapters, sections, etc.
+% Let's start with @part.
+\outer\parseargdef\part{\partzzz{#1}}
+\def\partzzz#1{%
+ \chapoddpage
+ \null
+ \vskip.3\vsize % move it down on the page a bit
+ \begingroup
+ \noindent \titlefonts\rmisbold #1\par % the text
+ \let\lastnode=\empty % no node to associate with
+ \writetocentry{part}{#1}{}% but put it in the toc
+ \headingsoff % no headline or footline on the part page
+ \chapoddpage
+ \endgroup
+}
+
+% \unnumberedno is an oxymoron. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
\newcount\chapno
\newcount\secno \secno=0
\newcount\subsecno \subsecno=0
\newcount\subsubsecno \subsubsecno=0
% This counter is funny since it counts through charcodes of letters A, B, ...
-% The \the is necessary, despite appearances, because \appendixletter is
-% expanded while writing the .toc file. \char\appendixno is not
-% expandable, thus it is written literally, thus all appendixes come out
-% with the same letter (or @) in the toc without it.
\newcount\appendixno \appendixno = `\@
-\def\appendixletter{\char\the\appendixno}
-
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it. @section does likewise.
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter. Page headings and footings can use
+% these. @section does likewise.
\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
% @raisesections: treat @section as chapter, @subsection as section, etc.
\def\raisesections{\global\advance\secbase by -1}
\def\lowersections{\global\advance\secbase by 1}
\let\down=\lowersections % original BFox name
-% Choose a numbered-heading macro
-% #1 is heading level if unmodified by @raisesections or @lowersections
-% #2 is text for heading
-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \chapterzzz{#2}
-\or
- \seczzz{#2}
-\or
- \numberedsubseczzz{#2}
-\or
- \numberedsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \chapterzzz{#2}
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unnlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
\else
- \numberedsubsubseczzz{#2}
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
\fi
-\fi
-}
-
-% like \numhead, but chooses appendix heading levels
-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \appendixzzz{#2}
-\or
- \appendixsectionzzz{#2}
-\or
- \appendixsubseczzz{#2}
-\or
- \appendixsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \appendixzzz{#2}
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unnlevel
+ \chardef\unnlevel = \absseclevel
+ \fi
\else
- \appendixsubsubseczzz{#2}
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ \errmessage{@appendix... within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unnlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unnlevel = 3
+ \fi
\fi
-\fi
-}
-
-% like \numhead, but chooses numberless heading levels
-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \unnumberedzzz{#2}
-\or
- \unnumberedseczzz{#2}
-\or
- \unnumberedsubseczzz{#2}
-\or
- \unnumberedsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \unnumberedzzz{#2}
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
\else
- \unnumberedsubsubseczzz{#2}
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
\fi
-\fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ % \putwordChapter can contain complex things in translations.
+ \toks0=\expandafter{\putwordChapter}%
+ \message{\the\toks0 \space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ % \putwordAppendix can contain complex things in translations.
+ \toks0=\expandafter{\putwordAppendix}%
+ \message{\the\toks0 \space \appendixletter}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
}
-% @chapter, @appendix, @unnumbered.
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
-\chapmacro {#1}{\the\chapno}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-% We don't substitute the actual chapter name into \thischapter
-% because we don't want its macros evaluated now.
-\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
- {\the\chapno}}}%
-\temp
-\donoderef
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \appendixno by 1
-\message{\putwordAppendix\space \appendixletter}%
-\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
- {\putwordAppendix{} \appendixletter}}}%
-\temp
-\appendixnoderef
-\global\let\section = \appendixsec
-\global\let\subsection = \appendixsubsec
-\global\let\subsubsection = \appendixsubsubsec
+% normally unnmhead0 calls unnumberedzzz:
+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
}
% @centerchap is like @unnumbered, but the heading is centered.
-\outer\def\centerchap{\parsearg\centerchapyyy}
-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
+\outer\parseargdef\centerchap{%
+ % Well, we could do the following in a group, but that would break
+ % an assumption that \chapmacro is called at the outermost level.
+ % Thus we are safer this way: --kasal, 24feb04
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
% @top is like @unnumbered.
-\outer\def\top{\parsearg\unnumberedyyy}
-
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-%
-% This used to be simply \message{#1}, but TeX fully expands the
-% argument to \message. Therefore, if #1 contained @-commands, TeX
-% expanded them. For example, in `@unnumbered The @cite{Book}', TeX
-% expanded @cite (which turns out to cause errors because \cite is meant
-% to be executed, not expanded).
-%
-% Anyway, we don't want the fully-expanded definition of @cite to appear
-% as a result of the \message, we just want `@cite' itself. We use
-% \the<toks register> to achieve this: TeX expands \the<toks> only once,
-% simply yielding the contents of <toks register>. (We also do this for
-% the toc entries.)
-\toks0 = {#1}\message{(\the\toks0)}%
-%
-\unnumbchapmacro {#1}%
-\gdef\thischapter{#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
-\temp
-\unnumbnoderef
-\global\let\section = \unnumberedsec
-\global\let\subsection = \unnumberedsubsec
-\global\let\subsubsection = \unnumberedsubsubsec
-}
+\let\top\unnumbered
% Sections.
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
- {\the\chapno}{\the\secno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
- {\appendixletter}{\the\secno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{%
-\plainsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
+%
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+% normally calls appendixsectionzzz:
+\outer\parseargdef\appendixsection{\apphead1{#1}}
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+% normally calls unnumberedseczzz:
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
}
% Subsections.
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
- {\the\chapno}{\the\secno}{\the\subsecno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
- {\appendixletter}{\the\secno}{\the\subsecno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{%
-\plainsubsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
- {\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
+%
+% normally calls numberedsubseczzz:
+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+% normally calls appendixsubseczzz:
+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+% normally calls unnumberedsubseczzz:
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
}
% Subsubsections.
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{%
-\plainsubsubsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
- {\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
-}
-
-% These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
-\def\infotop{\parsearg\unnumberedzzz}
-\def\infounnumbered{\parsearg\unnumberedzzz}
-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-
-\def\infoappendix{\parsearg\appendixzzz}
-\def\infoappendixsec{\parsearg\appendixseczzz}
-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
-
-\def\infochapter{\parsearg\chapterzzz}
-\def\infosection{\parsearg\sectionzzz}
-\def\infosubsection{\parsearg\subsectionzzz}
-\def\infosubsubsection{\parsearg\subsubsectionzzz}
+%
+% normally numberedsubsubseczzz:
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally appendixsubsubseczzz:
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally unnumberedsubsubseczzz:
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
% These macros control what the section commands do, according
% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
% Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
% Define @majorheading, @heading and @subheading
-% NOTE on use of \vbox for chapter headings, section headings, and such:
-% 1) We use \vbox rather than the earlier \line to permit
-% overlong headings to fold.
-% 2) \hyphenpenalty is set to 10000 because hyphenation in a
-% heading is obnoxious; this forbids it.
-% 3) Likewise, headings look best if no \parindent is used, and
-% if justification is not attempted. Hence \raggedright.
-
-
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
-{\advance\chapheadingskip by 10pt \chapbreak }%
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip \nobreak
+ \suppressfirstparagraphindent
+}
% @heading, @subheading, @subsubheading.
-\def\heading{\parsearg\plainsecheading}
-\def\subheading{\parsearg\plainsubsecheading}
-\def\subsubheading{\parsearg\plainsubsubsecheading}
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
% These macros generate a chapter, section, etc. heading only
% (including whitespace, linebreaking, etc. around it),
% given all the information in convenient, parsed form.
-%%% Args are the skip and penalty (usually negative)
+% Args are the skip and penalty (usually negative)
\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
-%%% Define plain chapter starts, and page on/off switching for it
% Parameter controlling skip before chapter headings (if needed)
-
\newskip\chapheadingskip
+% Define plain chapter starts, and page on/off switching for it.
\def\chapbreak{\dobreak \chapheadingskip {-4000}}
\def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong. But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+ \chappager
+ \ifodd\pageno \else
+ \begingroup
+ \headingsoff
+ \null
+ \chappager
+ \endgroup
+ \fi
+}
\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
\global\let\pagealignmacro=\chappager
\global\def\HEADINGSon{\HEADINGSsingle}}
-\def\CHAPPAGodd{
+\def\CHAPPAGodd{%
\global\let\contentsalignmacro = \chapoddpage
\global\let\pchapsepmacro=\chapoddpage
\global\let\pagealignmacro=\chapoddpage
\CHAPPAGon
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain
-\global\let\centerchapmacro=\centerchfplain}
-
-% Plain chapter opening.
-% #1 is the text, #2 the chapter number or empty if unnumbered.
-\def\chfplain#1#2{%
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+ % Insert the first mark before the heading break (see notes for \domark).
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+ \gdef\thissection{}}%
+ %
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{\thischaptername}}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{}}%
+ \else\ifx\temptype\Yappendixkeyword
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\appendixletter}%
+ % \noexpand\putwordAppendix avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \else
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\the\chapno}%
+ % \noexpand\putwordChapter avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \fi\fi\fi
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert the chapter heading break.
\pchapsepmacro
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
{%
- \chapfonts \rm
- \def\chapnum{#2}%
- \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent = \wd0 \centerparametersmaybe
+ \chapfonts \rmisbold
+ %
+ % Have to define \lastsection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\lastsection{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \nobreak % Avoid page breaks at the interline glue.
+ \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
\unhbox0 #1\par}%
}%
\nobreak\bigskip % no page break after a chapter title
\nobreak
}
-% Plain opening for unnumbered.
-\def\unnchfplain#1{\chfplain{#1}{}}
-
% @centerchap -- centered and unnumbered.
\let\centerparametersmaybe = \relax
-\def\centerchfplain#1{{%
- \def\centerparametersmaybe{%
- \advance\rightskip by 3\rightskip
- \leftskip = \rightskip
- \parfillskip = 0pt
- }%
- \chfplain{#1}{}%
-}}
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
-\CHAPFplain % The default
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\nobreak
+ \chapoddpage
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip\nobreak
}
-
\def\chfopen #1#2{\chapoddpage {\chapfonts
\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
\par\penalty 5000 %
}
-
\def\centerchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt
- \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+ \chapoddpage
+ \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
+ \nobreak\bigskip \nobreak
}
-
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen
-\global\let\centerchapmacro=\centerchfopen}
+\def\CHAPFopen{%
+ \global\let\chapmacro=\chfopen
+ \global\let\centerchapmacro=\centerchfopen}
-% Section titles.
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
% Subsection titles.
-\newskip \subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
% Subsubsection titles.
-\let\subsubsecheadingskip = \subsecheadingskip
-\let\subsubsecheadingbreak = \subsecheadingbreak
-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
-% Print any size section title.
+% Print any size, any type, section title.
%
-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
-% number (maybe empty), #3 the text.
-\def\sectionheading#1#2#3{%
- {%
- \expandafter\advance\csname #1headingskip\endcsname by \parskip
- \csname #1headingbreak\endcsname
- }%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
{%
+ \checkenv{}% should not be in an environment.
+ %
% Switch to the right set of fonts.
- \csname #1fonts\endcsname \rm
+ \csname #2fonts\endcsname \rmisbold
%
- % Only insert the separating space if we have a section number.
- \def\secnum{#2}%
- \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
%
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent = \wd0 % zero if no section number
- \unhbox0 #3}%
+ % Insert first mark before the heading break (see notes for \domark).
+ \let\prevsectiondefs=\lastsectiondefs
+ \ifx\temptype\Ynothingkeyword
+ \ifx\sectionlevel\seckeyword
+ \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+ \gdef\thissection{\thissectionname}}%
+ \fi
+ \else\ifx\temptype\Yomitfromtockeyword
+ % Don't redefine \thissection.
+ \else\ifx\temptype\Yappendixkeyword
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \else
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \fi\fi\fi
+ %
+ % Go into vertical mode. Usually we'll already be there, but we
+ % don't want the following whatsit to end up in a preceding paragraph
+ % if the document didn't happen to have a blank line.
+ \par
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ % Only insert the space after the number if we have a section number.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\lastsection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \lastsection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\lastsection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\lastsection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chapmacro.
+ \donoderef{#3}%
+ %
+ % Interline glue will be inserted when the vbox is completed.
+ % That glue will be a valid breakpoint for the page, since it'll be
+ % preceded by a whatsit (usually from the \donoderef, or from the
+ % \writetocentry if there was no node). We don't want to allow that
+ % break, since then the whatsits could end up on page n while the
+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
+ \nobreak
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
}%
- \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.) However, when a paragraph is not started next
+ % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
+ % or the negative glue will cause weirdly wrong output, typically
+ % obscuring the section heading with something else.
+ \vskip-\parskip
+ %
+ % This is so the last item on the main vertical list is a known
+ % \penalty > 10000, so \startdefun, etc., can recognize the situation
+ % and do the needful.
+ \penalty 10001
}
\newwrite\tocfile
% Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc. We supply {\folio} at the end of the
-% argument, which will end up as the last argument to the \...entry macro.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
%
-% We open the .toc file here instead of at @setfilename or any other
-% given time so that @contents can be put in the document anywhere.
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
%
\newif\iftocfileopened
-\def\writetocentry#1{%
- \iftocfileopened\else
- \immediate\openout\tocfile = \jobname.toc
- \global\tocfileopenedtrue
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ {\atdummies
+ \edef\temp{%
+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+ \temp
+ }%
+ \fi
\fi
- \iflinks \write\tocfile{#1{\folio}}\fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care. This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+ \catcode`\"=\active
+ \catcode`\$=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\\=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+ \setupdatafile
+ \activecatcodes
+ \input \tocreadfilename
}
\newskip\contentsrightmargin \contentsrightmargin=1in
\newcount\savepageno
\newcount\lastnegativepageno \lastnegativepageno = -1
-% Finish up the main text and prepare to read what we've written
-% to \tocfile.
+% Prepare to read what we've written to \tocfile.
%
\def\startcontents#1{%
- % If @setchapternewpage on, and @headings double, the contents should
- % start on an odd page, unlike chapters. Thus, we maintain
- % \contentsalignmacro in parallel with \pagealignmacro.
- % From: Torbjorn Granlund <tege@matematik.su.se>
- \contentsalignmacro
- \immediate\closeout\tocfile
- %
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \unnumbchapmacro{#1}\def\thischapter{}%
- \savepageno = \pageno
- \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- % We can't do this, because then an actual ^ in a section
- % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
- %
- % Roman numerals for page numbers.
- \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
}
+% redefined for the two-volume lispref. We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
% Normal (long) toc.
+%
\def\contents{%
- \startcontents{\putwordTOC}%
- \openin 1 \jobname.toc
- \ifeof 1 \else
- \closein 1
- \input \jobname.toc
- \fi
- \vfill \eject
- \contentsalignmacro % in case @setchapternewpage odd is in effect
- \endgroup
- \lastnegativepageno = \pageno
- \pageno = \savepageno
+ \startcontents{\putwordTOC}%
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
}
% And just the chapters.
\def\summarycontents{%
- \startcontents{\putwordShortTOC}%
- %
- \let\chapentry = \shortchapentry
- \let\unnumbchapentry = \shortunnumberedentry
- % We want a true roman here for the page numbers.
- \secfonts
- \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
- \rm
- \hyphenpenalty = 10000
- \advance\baselineskip by 1pt % Open it up a little.
- \def\secentry ##1##2##3##4{}
- \def\unnumbsecentry ##1##2{}
- \def\subsecentry ##1##2##3##4##5{}
- \def\unnumbsubsecentry ##1##2{}
- \def\subsubsecentry ##1##2##3##4##5##6{}
- \def\unnumbsubsubsecentry ##1##2{}
- \openin 1 \jobname.toc
- \ifeof 1 \else
- \closein 1
- \input \jobname.toc
- \fi
- \vfill \eject
- \contentsalignmacro % in case @setchapternewpage odd is in effect
- \endgroup
- \lastnegativepageno = \pageno
- \pageno = \savepageno
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\partentry = \shortpartentry
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
}
\let\shortcontents = \summarycontents
-\ifpdf
- \pdfcatalog{/PageMode /UseOutlines}%
-\fi
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
% These macros generate individual entries in the table of contents.
% The first argument is the chapter or section name.
% The last argument is the page number.
% The arguments in between are the chapter number, section number, ...
-% Chapter-level things, for both the long and short contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-
-% See comments in \dochapentry re vbox and related settings
-\def\shortchapentry#1#2#3{%
- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
+% Parts, in the main contents. Replace the part number, which doesn't
+% exist, with an empty box. Let's hope all the numbers have the same width.
+% Also ignore the page number, which is conventionally not printed.
+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
+\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
+%
+% Parts, in the short toc.
+\def\shortpartentry#1#2#3#4{%
+ \penalty-300
+ \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
+ \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
}
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-\setbox0 = \hbox{\shortcontrm \putwordAppendix }
-\newdimen\shortappendixwidth \shortappendixwidth = \wd0
-
-\def\shortchaplabel#1{%
- % We typeset #1 in a box of constant width, regardless of the text of
- % #1, so the chapter titles will come out aligned.
- \setbox0 = \hbox{#1}%
- \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
- %
- % This space should be plenty, since a single number is .5em, and the
- % widest letter (M) is 1em, at least in the Computer Modern fonts.
- % (This space doesn't include the extra space that gets added after
- % the label; that gets put in by \shortchapentry above.)
- \advance\dimen0 by 1.1em
- \hbox to \dimen0{#1\hfil}%
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
}
-\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
% Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
% Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
% And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
- \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
% This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
% Now for the actual typesetting. In all these, #1 is the text and #2 is the
% page number.
\penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
\begingroup
\chapentryfonts
- \tocentry{#1}{\dopageno{#2}}%
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
\endgroup
\nobreak\vskip .25\baselineskip plus.1\baselineskip
}
\def\dosecentry#1#2{\begingroup
\secentryfonts \leftskip=\tocindent
- \tocentry{#1}{\dopageno{#2}}%
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
\endgroup}
\def\dosubsecentry#1#2{\begingroup
\subsecentryfonts \leftskip=2\tocindent
- \tocentry{#1}{\dopageno{#2}}%
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
\endgroup}
\def\dosubsubsecentry#1#2{\begingroup
\subsubsecentryfonts \leftskip=3\tocindent
- \tocentry{#1}{\dopageno{#2}}%
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
\endgroup}
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here. (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-\def\tocentry#1#2{\begingroup
- \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
- % Do not use \turnoffactive in these arguments. Since the toc is
- % typeset in cmr, so characters such as _ would come out wrong; we
- % have to do the usual translation tricks.
- \entry{#1}{#2}%
-\endgroup}
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
% Space between chapter (or whatever) number and the title.
\def\labelspace{\hskip1em \relax}
\def\chapentryfonts{\secfonts \rm}
\def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
\message{environments,}
% @foo ... @end foo.
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-% Furthermore, these definitions must come after we define our fonts.
-\newbox\dblarrowbox \newbox\longdblarrowbox
-\newbox\pushcharbox \newbox\bullbox
-\newbox\equivbox \newbox\errorbox
-
-%{\tentt
-%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
-%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
-%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
-%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
-% Adapted from the manmac format (p.420 of TeXbook)
-%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
-% depth .1ex\hfil}
-%}
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-\def\point{$\star$}
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% Adapted from the TeXbook's \boxit.
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
- \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
- \advance\hsize by -2\dimen2 % Rules.
- \vbox{
- \hrule height\dimen2
- \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
- \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
- \kern3pt\vrule width\dimen2}% Space to right.
- \hrule height\dimen2}
- \hfil}
-
-% The @error{} command.
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex escapes into raw Tex temporarily.
+% @tex ... @end tex escapes into raw TeX temporarily.
% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
+% But \@ or @@ will get a plain @ character.
-\def\tex{\begingroup
+\envdef\tex{%
+ \setupmarkupstyle{tex}%
\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
- \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
\catcode `\%=14
- \catcode 43=12 % plus
- \catcode`\"=12
- \catcode`\==12
- \catcode`\|=12
- \catcode`\<=12
- \catcode`\>=12
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
\escapechar=`\\
%
+ % ' is active in math mode (mathcode"8000). So reset it, and all our
+ % other math active characters (just in case), to plain's definitions.
+ \mathactive
+ %
\let\b=\ptexb
\let\bullet=\ptexbullet
\let\c=\ptexc
\let\equiv=\ptexequiv
\let\!=\ptexexclam
\let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
\let\{=\ptexlbrace
\let\+=\tabalign
\let\}=\ptexrbrace
+ \let\/=\ptexslash
\let\*=\ptexstar
\let\t=\ptext
+ \expandafter \let\csname top\endcsname=\ptextop % outer
+ \let\frenchspacing=\plainfrenchspacing
%
\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
\def\@{@}%
-\let\Etex=\endgroup}
+}
+% There is no need to define \Etex.
-% Define @lisp ... @endlisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @endlisp (which normally is erroneous).
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
% Amount to narrow the margins by for @lisp.
\newskip\lispnarrowing \lispnarrowing=0.4in
% have any width.
\def\lisppar{\null\endgraf}
-% Make each space character in the input produce a normal interword
-% space in the output. Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is. This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
% This space is always present above and below environments.
\newskip\envskipamount \envskipamount = 0pt
% Make spacing and below environment symmetrical. We use \parskip here
% to help in doing that, since in @example-like environments \parskip
% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip
-%
-\def\aboveenvbreak{{\advance\envskipamount by \parskip
-\endgraf \ifdim\lastskip<\envskipamount
-\removelastskip \penalty-50 \vskip\envskipamount \fi}}
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
\let\afterenvbreak = \aboveenvbreak
-% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
\let\nonarrowing=\relax
% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
%
\newskip\lskip\newskip\rskip
-\long\def\cartouche{%
-\begingroup
- \lskip=\leftskip \rskip=\rightskip
- \leftskip=0pt\rightskip=0pt %we want these *outside*.
- \cartinner=\hsize \advance\cartinner by-\lskip
- \advance\cartinner by-\rskip
- \cartouter=\hsize
- \advance\cartouter by 18.4pt % allow for 3pt kerns on either
-% side, and for 6pt waste from
-% each corner char, and rule thickness
- \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
- % Flag to tell @lisp, etc., not to narrow margin.
- \let\nonarrowing=\comment
- \vbox\bgroup
- \baselineskip=0pt\parskip=0pt\lineskip=0pt
- \carttop
- \hbox\bgroup
- \hskip\lskip
- \vrule\kern3pt
- \vbox\bgroup
- \hsize=\cartinner
- \kern3pt
- \begingroup
- \baselineskip=\normbskip
- \lineskip=\normlskip
- \parskip=\normpskip
- \vskip -\parskip
+\envdef\cartouche{%
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ % side, and for 6pt waste from
+ % each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing = t%
+ %
+ % If this cartouche directly follows a sectioning command, we need the
+ % \parskip glue (backspaced over by default) or the cartouche can
+ % collide with the section heading.
+ \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+ %
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \kern3pt
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+ \comment % For explanation, see the end of def\group.
+}
\def\Ecartouche{%
- \endgroup
- \kern3pt
- \egroup
- \kern3pt\vrule
- \hskip\rskip
- \egroup
- \cartbot
- \egroup
-\endgroup
-}}
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \checkinserts
+}
% This macro is called at the beginning of all the @example variants,
% inside a group.
+\newdimen\nonfillparindent
\def\nonfillstart{%
\aboveenvbreak
- \inENV % This group ends at the end of the body
\hfuzz = 12pt % Don't be fussy
\sepspaces % Make spaces be word-separators rather than space tokens.
- \singlespace
\let\par = \lisppar % don't ignore blank lines
\obeylines % each line of input is a line of output
\parskip = 0pt
+ % Turn off paragraph indentation but redefine \indent to emulate
+ % the normal \indent.
+ \nonfillparindent=\parindent
\parindent = 0pt
+ \let\indent\nonfillindent
+ %
\emergencystretch = 0pt % don't try to avoid overfull boxes
- % @cartouche defines \nonarrowing to inhibit narrowing
- % at next level down.
\ifx\nonarrowing\relax
\advance \leftskip by \lispnarrowing
\exdentamount=\lispnarrowing
- \let\exdent=\nofillexdent
- \let\nonarrowing=\relax
+ \else
+ \let\nonarrowing = \relax
\fi
+ \let\exdent=\nofillexdent
}
-% Define the \E... control sequence only if we are inside the particular
-% environment, so the error checking in \end will work.
-%
-% To end an @example-like environment, we first end the paragraph (via
-% \afterenvbreak's vertical glue), and then the group. That way we keep
-% the zero \parskip that the environments set -- \parskip glue will be
-% inserted at the beginning of the next paragraph in the document, after
-% the environment.
-%
-\def\nonfillfinish{\afterenvbreak\endgroup}
-
-% @lisp: indented, narrowed, typewriter font.
-\def\lisp{\begingroup
- \nonfillstart
- \let\Elisp = \nonfillfinish
- \tt
- \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
- \gobble % eat return
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ % end paragraph for sake of leading, in case document has no blank
+ % line. This is redundant with what happens in \aboveenvbreak, but
+ % we need to do it before changing the fonts, and it's inconvenient
+ % to change the fonts afterward.
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
}
-% @example: Same as @lisp.
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
+% We often define two environments, @foo and @smallfoo.
+% Let's do it in one command. #1 is the env name, #2 the definition.
+\def\makedispenvdef#1#2{%
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
-% @small... is usually equivalent to the non-small (@smallbook
-% redefines). We must call \example (or whatever) last in the
-% definition, since it reads the return following the @example (or
-% whatever) command.
+% Define two environment synonyms (#1 and #2) for an environment.
+\def\maketwodispenvdef#1#2#3{%
+ \makedispenvdef{#1}{#3}%
+ \makedispenvdef{#2}{#3}%
+}
%
-% This actually allows (for example) @end display inside an
-% @smalldisplay. Too bad, but makeinfo will catch the error anyway.
+% @lisp: indented, narrowed, typewriter font;
+% @example: same as @lisp.
%
-\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
-\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
-\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-
-% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
+% @smallexample and @smalllisp: use smaller fonts.
% Originally contributed by Pavel@xerox.
-\def\smalllispx{\begingroup
- \def\Esmalllisp{\nonfillfinish\endgroup}%
- \def\Esmallexample{\nonfillfinish\endgroup}%
- \indexfonts
- \lisp
+%
+\maketwodispenvdef{lisp}{example}{%
+ \nonfillstart
+ \tt\setupmarkupstyle{example}%
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
}
-
-% @display: same as @lisp except keep current font.
+% @display/@smalldisplay: same as @lisp except keep current font.
%
-\def\display{\begingroup
+\makedispenvdef{display}{%
\nonfillstart
- \let\Edisplay = \nonfillfinish
\gobble
}
-% @smalldisplay (when @smallbook): @display plus smaller fonts.
+% @format/@smallformat: same as @display except don't narrow margins.
%
-\def\smalldisplayx{\begingroup
- \def\Esmalldisplay{\nonfillfinish\endgroup}%
- \indexfonts \rm
- \display
+\makedispenvdef{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
}
-% @format: same as @display except don't narrow margins.
-%
-\def\format{\begingroup
- \let\nonarrowing = t
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
\nonfillstart
- \let\Eformat = \nonfillfinish
\gobble
}
+\let\Eflushleft = \afterenvbreak
-% @smallformat (when @smallbook): @format plus smaller fonts.
+% @flushright.
%
-\def\smallformatx{\begingroup
- \def\Esmallformat{\nonfillfinish\endgroup}%
- \indexfonts \rm
- \format
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill\relax
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification. From plain.tex.
+\envdef\raggedright{%
+ \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+ \parindent=0pt \leftskip0pt plus2em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
}
+\let\Eraggedleft\par
-% @flushleft (same as @format).
+\envdef\raggedcenter{%
+ \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
%
-\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
+\makedispenvdef{quotation}{\quotationstart}
+%
+\def\quotationstart{%
+ \indentedblockstart % same as \indentedblock, but increase right margin too.
+ \ifx\nonarrowing\relax
+ \advance\rightskip by \lispnarrowing
+ \fi
+ \parsearg\quotationlabel
+}
-% @flushright.
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
%
-\def\flushright{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eflushright = \nonfillfinish
- \advance\leftskip by 0pt plus 1fill
- \gobble
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\thisisundefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
}
+\def\Esmallquotation{\Equotation}
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+% @indentedblock is like @quotation, but indents only on the left and
+% has no optional argument.
+%
+\makedispenvdef{indentedblock}{\indentedblockstart}
%
-\def\quotation{%
- \begingroup\inENV %This group ends at the end of the @quotation body
+\def\indentedblockstart{%
{\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
- \singlespace
\parindent=0pt
- % We have retained a nonzero parskip for the environment, since we're
- % doing normal filling. So to avoid extra space below the environment...
- \def\Equotation{\parskip = 0pt \nonfillfinish}%
%
% @cartouche defines \nonarrowing to inhibit narrowing at next level down.
\ifx\nonarrowing\relax
\advance\leftskip by \lispnarrowing
- \advance\rightskip by \lispnarrowing
\exdentamount = \lispnarrowing
+ \else
\let\nonarrowing = \relax
\fi
}
+% Keep a nonzero parskip for the environment, since we're doing normal filling.
+%
+\def\Eindentedblock{%
+ \par
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallindentedblock{\Eindentedblock}
-\message{defuns,}
-% @defun etc.
-
-% Allow user to change definition object font (\df) internally
-\def\setdeffont #1 {\csname DEF#1\endcsname}
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deftypemargin \deftypemargin=12pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-
-\newcount\parencount
-% define \functionparens, which makes ( and ) and & do special things.
-% \functionparens affects the group it is contained in.
-\def\activeparens{%
-\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
-\catcode`\[=\active \catcode`\]=\active}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-% Be sure that we always have a definition for `(', etc. For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
-
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-% This is used to turn on special parens
-% but make & act ordinary (given that it's active).
-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
- \global\advance\parencount by 1
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
+ % @set txicodequotebacktick will not have effect on @verb and
+ % @verbatim, and ?` and !` ligatures won't get disabled.
+ %\do\`\do\'%
}
%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
- % also in that case restore the outer-level definition of (.
- \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
- \global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text. This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
-\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-\let\ampnr = \&
-\def\lbrb{{\bf\char`\[}}
-\def\rbrb{{\bf\char`\]}}
-
-% Active &'s sneak into the index arguments, so make sure it's defined.
-{
- \catcode`& = 13
- \global\let& = \ampnr
-}
-
-% First, defname, which formats the header line itself.
-% #1 should be the function name.
-% #2 should be the type of definition, such as "Function".
-
-\def\defname #1#2{%
-% Get the values of \leftskip and \rightskip as they were
-% outside the @def...
-\dimen2=\leftskip
-\advance\dimen2 by -\defbodyindent
-\noindent
-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1
-% Now output arg 2 ("Function" or some such)
-% ending at \deftypemargin from the right margin,
-% but stuck inside a box of width 0 so it does not interfere with linebreaking
-{% Adjust \hsize to exclude the ambient margins,
-% so that \rightline will obey them.
-\advance \hsize by -\dimen2
-\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
-% Make all lines underfull and no complaints:
-\tolerance=10000 \hbadness=10000
-\advance\leftskip by -\defbodyindent
-\exdentamount=\defbodyindent
-{\df #1}\enskip % Generate function name
-}
-
-% Actually process the body of a definition
-% #1 should be the terminating control sequence, such as \Edefun.
-% #2 should be the "another name" control sequence, such as \defunx.
-% #3 should be the control sequence that actually processes the header,
-% such as \defunheader.
-
-\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active % 61 is `='
-\obeylines\activeparens\spacesplit#3}
-
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence for consecutive fns (which we define).
-% #3 is the control sequence to call to resume processing.
-% #4, delimited by the space, is the class name.
-%
-\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
-
-% @deftypemethod has an extra argument that nothing else does. Sigh.
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence for consecutive fns (which we define).
-% #3 is the control sequence to call to resume processing.
-% #4, delimited by the space, is the class name.
-% #5 is the method's return type.
-%
-\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
-
-\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
-
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
-
-\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active %
-\obeylines\spacesplit#3}
-
-% This is used for \def{tp,vr}parsebody. It could probably be used for
-% some of the others, too, with some judicious conditionals.
-%
-\def\parsebodycommon#1#2#3{%
- \begingroup\inENV %
- \medbreak %
- % Define the end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \setupmarkupstyle{verb}%
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
}
-\def\defvrparsebody#1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \spacesplit{#3{#4}}%
-}
+% Setup for the @verbatim environment
+%
+% Real tab expansion.
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+% We typeset each line of the verbatim in an \hbox, so we can handle
+% tabs. The \global is in case the verbatim line starts with an accent,
+% or some other command that starts with a begin-group. Otherwise, the
+% entire \verbbox would disappear at the corresponding end-group, before
+% it is typeset. Meanwhile, we can't have nested verbatim commands
+% (can we?), so the \global won't be overwriting itself.
+\newbox\verbbox
+\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
+ \divide\dimen\verbbox by\tabw
+ \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
+ \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw
+ \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
+ }%
+ }
+\endgroup
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument. Sigh.
-% \let\deftpparsebody=\defvrparsebody
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \tt % easiest (and conventionally used) font for verbatim
+ % The \leavevmode here is for blank lines. Otherwise, we would
+ % never \starttabox and the \egroup would end verbatim mode.
+ \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
+ \tabexpand
+ \setupmarkupstyle{verbatim}%
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count.
+ % Must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
%
-% So, to get around this, we put \empty in with the type name. That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
+% \def\doverbatim#1@end verbatim{#1}
%
-\def\deftpparsebody #1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \spacesplit{\parsetpheaderline{#3{#4}}}\empty
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+ \setupverbatim\doverbatim
}
+\let\Everbatim = \afterenvbreak
+
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any). That's what this does.
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
%
-\def\removeemptybraces\empty#1\relax{#1}
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
+ \input #1
+ \afterenvbreak
+ }%
+}
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
%
-\def\parsetpheaderline#1#2#3{%
- #1{\removeemptybraces#2\relax}{#3}%
-}%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
-\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\spacesplit{#3{#5}}}
-% Split up #2 at the first space token.
-% call #1 with two arguments:
-% the first is all of #2 before the space token,
-% the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
+\message{defuns,}
+% @defun etc.
-{\obeylines
-\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
-\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
-\ifx\relax #3%
-#1{#2}{}\else #1{#2}{#3#4}\fi}}
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \defunpenalty=10003 % Will keep this @deffn together with the
+ % following @def command, see below.
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \printdefunline, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ % As a further refinement, we avoid "club" headers by signalling
+ % with penalty of 10003 after the very first @deffn in the
+ % sequence (see above), and penalty of 10002 after any following
+ % @def command.
+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
-% So much for the things common to all kinds of definitions.
+\def\dodefunx#1{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As above, allow line break if we have multiple x headers in a row.
+ % It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+ %
+ % And now, it's time to reuse the body of the original defun:
+ \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
-% Define @defun.
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ % call \deffnheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil\relax
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty\defunpenalty % signal to \startdefun and \dodefunx
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
-% First, define the processing that is wanted for arguments of \defun
-% Use this to expand the args and terminate the paragraph they make up
+\def\Edefun{\endgraf\medbreak}
-\def\defunargs#1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Set the font temporarily and use \font in case \setfont made \tensl a macro.
-{\tensl\hyphenchar\font=0}%
-#1%
-{\tensl\hyphenchar\font=45}%
-\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\nobreak\vskip -\parskip\nobreak
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remaining is to define \deffnheader.
+%
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
}
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
-\boldbraxnoamp
-\tclose{#1}% avoid \code because of side effects on active chars
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\nobreak\vskip -\parskip\nobreak
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \doingtypefnfalse % distinguish typed functions from all else
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
}
-% Do complete processing of one @defun or @defunx line already parsed.
+\newif\ifdoingtypefn % doing typed function?
+\newif\ifrettypeownline % typeset return type on its own line?
-% @deffn Command forward-char nchars
+% @deftypefnnewline on|off says whether the return type of typed functions
+% are printed on their own line. This affects @deftypefn, @deftypefun,
+% @deftypeop, and @deftypemethod.
+%
+\parseargdef\deftypefnnewline{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @txideftypefnnl value `\temp',
+ must be on|off}%
+ \fi\fi
+}
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
+% Untyped functions:
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
-% @defun == @deffn Function
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDeffunc}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+ \dosubind{fn}{\code{#3}}{#1}%
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
}
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
+% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-% #1 is the data type. #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
-\deftypefunargs {#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{fn}{\code{#4}}{#1}%
+ \doingtypefntrue
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
}
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+% Typed variables:
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
-% \defheaderxcond#1\relax$$$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
-% #1 is the classification. #2 is the data type. #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-% at least some C++ text from working
-\defname {\defheaderxcond#2\relax$$$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{vr}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
}
-% @defmac == @deffn Macro
+% Untyped variables:
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefmac}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
-% @defspec == @deffn Special Form
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+% Types:
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefspec}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
}
-% @defop CATEGORY CLASS OPERATION ARG...
-%
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-%
-\def\defopheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
-\defunargs {#3}\endgroup %
-}
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
-% @deftypemethod CLASS RETURN-TYPE METHOD ARG...
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
%
-\def\deftypemethod{%
- \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
+% We are followed by (but not passed) the arguments, if any.
%
-% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
-\def\deftypemethodheader#1#2#3#4{%
- \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
- \begingroup
- \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
- \deftypefunargs{#4}%
- \endgroup
+\def\defname#1#2#3{%
+ \par
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % Determine if we are typesetting the return type of a typed function
+ % on a line by itself.
+ \rettypeownlinefalse
+ \ifdoingtypefn % doing a typed function specifically?
+ % then check user option for putting return type on its own line:
+ \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
+ \rettypeownlinetrue
+ \fi
+ \fi
+ %
+ % How we'll format the category name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape. We'll always have at
+ % least two.
+ \tempnum = 2
+ %
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ %
+ % If doing a return type on its own line, we'll have another line.
+ \ifrettypeownline
+ \advance\tempnum by 1
+ \def\maybeshapeline{0in \hsize}%
+ \else
+ \def\maybeshapeline{}%
+ \fi
+ %
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ %
+ % The final paragraph shape:
+ \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2
+ %
+ % Put the category name at the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% text of the return type
+ \ifx\temp\empty\else
+ \tclose{\temp}% typeset the return type
+ \ifrettypeownline
+ % put return type on its own line; prohibit line break following:
+ \hfil\vadjust{\nobreak}\break
+ \else
+ \space % type on same line, so just followed by a space
+ \fi
+ \fi % no return type
+ #3% output function name
+ }%
+ {\rm\enskip}% hskip 0.5 em of \tenrm
+ %
+ \boldbrax
+ % arguments will be output next, if any.
}
-% @deftypeivar CLASS TYPE VARNAME
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name. This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable. Prevent hyphenation at `-' chars.
%
-\def\deftypeivar{%
- \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
-%
-% #1 is the class name, #2 the data type, #3 the variable name.
-\def\deftypeivarheader#1#2#3{%
- \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
- \begingroup
- \defname{#3}{\putwordInstanceVariableof\ \code{#1}}%
- \defvarargs{#3}%
- \endgroup
+\def\defunargs#1{%
+ % use sl by default (not ttsl),
+ % tt for the names.
+ \df \sl \hyphenchar\font=0
+ %
+ % On the other hand, if an argument has two dashes (for instance), we
+ % want a way to get ttsl. We used to recommend @var for that, so
+ % leave the code in, but it's strange for @var to lead to typewriter.
+ % Nowadays we recommend @code, since the difference between a ttsl hyphen
+ % and a tt hyphen is pretty tiny. @code also disables ?` !`.
+ \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
+ #1%
+ \sl\hyphenchar\font=45
}
-% @defmethod == @defop Method
-%
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+% We want ()&[] to print specially on the defun line.
%
-% #1 is the class name, #2 the method name, #3 the args.
-\def\defmethodheader#1#2#3{%
- \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
- \begingroup
- \defname{#2}{\putwordMethodon\ \code{#1}}%
- \defunargs{#3}%
- \endgroup
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
}
-% @defcv {Class Option} foo-class foo-flag
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ \global\let& = \&
-\def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
-\defvarargs {#3}\endgroup %
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
}
-% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
-%
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-%
-\def\defivarheader#1#2#3{%
- \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
- \begingroup
- \defname{#2}{\putwordInstanceVariableof\ #1}%
- \defvarargs{#3}%
- \endgroup
-}
-
-% @defvar
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
+\newcount\parencount
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefvar}%
-\defvarargs {#2}\endgroup %
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\ }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefopt}%
-\defvarargs {#2}\endgroup %
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
}
+\def\bfafterword#1 {#1 \bf}
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type. #2 is the name, perhaps followed by text that
-% is actually part of the data type, which should not be put into the index.
-\def\deftypevarheader #1#2{%
-\dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak
-\endgroup}
-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak
-\endgroup}
-
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
-
-\def\deftpargs #1{\bf \defvarargs{#1}}
-
-% @deftp Class window height width ...
-
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
-% These definitions are used if you use @defunx (etc.)
-% anywhere other than immediately after a @defun or @defunx.
-%
-\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
-\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
-\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
-\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
-\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\defopx#1 {\errmessage{@defopx in invalid context}}
-\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
-\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
-\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
-\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
-\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
-\def\defunx#1 {\errmessage{@defunx in invalid context}}
-\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
-\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+ \message{Warning: unbalanced parentheses in @def...}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \message{Warning: unbalanced square brackets in @def...}%
+ \global\brackcount=0
+}
\message{macros,}
% To do this right we need a feature of e-TeX, \scantokens,
% which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\undefined
- \newwrite\macscribble
- \def\scanmacro#1{%
- \begingroup \newlinechar`\^^M
- % Undo catcode changes of \startcontents and \doprintindex
- \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
- % Append \endinput to make sure that TeX does not see the ending newline.
- \toks0={#1\endinput}%
- \immediate\openout\macscribble=\jobname.tmp
- \immediate\write\macscribble{\the\toks0}%
- \immediate\closeout\macscribble
- \let\xeatspaces\eatspaces
- \input \jobname.tmp
- \endgroup
-}
-\else
-\def\scanmacro#1{%
-\begingroup \newlinechar`\^^M
-% Undo catcode changes of \startcontents and \doprintindex
-\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
-\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
+\ifx\eTeXversion\thisisundefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
\fi
+\def\scanmacro#1{\begingroup
+ \newlinechar`\^^M
+ \let\xeatspaces\eatspaces
+ %
+ % Undo catcode changes of \startcontents and \doprintindex
+ % When called from @insertcopying or (short)caption, we need active
+ % backslash to get it printed correctly. Previously, we had
+ % \catcode`\\=\other instead. We'll see whether a problem appears
+ % with macro expansion. --kasal, 19aug04
+ \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+ %
+ % ... and for \example:
+ \spaceisspace
+ %
+ % The \empty here causes a following catcode 5 newline to be eaten as
+ % part of reading whitespace after a control sequence. It does not
+ % eat a catcode 13 newline. There's no good way to handle the two
+ % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
+ % would then have different behavior). See the Macro Details node in
+ % the manual for the workaround we recommend for macros and
+ % line-oriented commands.
+ %
+ \scantokens{#1\empty}%
+\endgroup}
+
+\def\scanexp#1{%
+ \edef\temp{\noexpand\scanmacro{#1}}%
+ \temp
+}
+
\newcount\paramno % Count of parameters
\newtoks\macname % Macro name
\newif\ifrecursive % Is it recursive?
-\def\macrolist{} % List of all defined macros in the form
- % \do\macro1\do\macro2...
+
+% List of all defined macros in the form
+% \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+ \toks0 = \expandafter{\macrolist\definedummyword#1}%
+ \xdef\macrolist{\the\toks0}%
+}
% Utility routines.
-% Thisdoes \let #1 = #2, except with \csnames.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
\def\cslet#1#2{%
-\expandafter\expandafter
-\expandafter\let
-\expandafter\expandafter
-\csname#1\endcsname
-\csname#2\endcsname}
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
% Trim leading and trailing spaces off a string.
% Concepts from aro-bend problem 15 (see CTAN).
}
% Trim a single trailing ^^M off a string.
-{\catcode`\^^M=12\catcode`\Q=3%
+{\catcode`\^^M=\other \catcode`\Q=3%
\gdef\eatcr #1{\eatcra #1Q^^MQ}%
\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
\gdef\eatcrb#1Q#2Q{#1}%
% Macro bodies are absorbed as an argument in a context where
% all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \.
-
+% (as in normal texinfo). It is necessary to change the definition of \
+% to recognize macro arguments; this is the job of \mbodybackslash.
+%
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion. Must do this non-globally, to
+% confine the change to the current group.
+%
% It's necessary to have hard CRs when the macro is executed. This is
-% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
% body, and then making it the \newlinechar in \scanmacro.
+%
+\def\scanctxt{% used as subroutine
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\@=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+ \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+}
+
+\def\scanargctxt{% used for copying and captions, not macros.
+ \scanctxt
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{% used for @macro definitions
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+\def\macroargctxt{% used when scanning invocations
+ \scanctxt
+ \catcode`\\=0
+}
+% why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes"
+% for the single characters \ { }. Thus, we end up with the "commands"
+% that would be written @\ @{ @} in a Texinfo document.
+%
+% We already have @{ and @}. For @\, we define it here, and only for
+% this purpose, to produce a typewriter backslash (so, the @\ that we
+% define for @math can't be used with @macro calls):
+%
+\def\\{\normalbackslash}%
+%
+% We would like to do this for \, too, since that is what makeinfo does.
+% But it is not possible, because Texinfo already has a command @, for a
+% cedilla accent. Documents must use @comma{} instead.
+%
+% \anythingelse will almost certainly be an error of some kind.
-\def\macrobodyctxt{%
- \catcode`\~=12
- \catcode`\^=12
- \catcode`\_=12
- \catcode`\|=12
- \catcode`\<=12
- \catcode`\>=12
- \catcode`\+=12
- \catcode`\{=12
- \catcode`\}=12
- \catcode`\@=12
- \catcode`\^^M=12
- \usembodybackslash}
-
-\def\macroargctxt{%
- \catcode`\~=12
- \catcode`\^=12
- \catcode`\_=12
- \catcode`\|=12
- \catcode`\<=12
- \catcode`\>=12
- \catcode`\+=12
- \catcode`\@=12
- \catcode`\\=12}
% \mbodybackslash is the definition of \ in @macro bodies.
% It maps \foo\ => \csname macarg.foo\endcsname => #N
% where N is the macro parameter number.
% We define \csname macarg.\endcsname to be \realbackslash, so
% \\ in macro replacement text gets you a backslash.
-
+%
{\catcode`@=0 @catcode`@\=@active
@gdef@usembodybackslash{@let\=@mbodybackslash}
@gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
}
\expandafter\def\csname macarg.\endcsname{\realbackslash}
+\def\margbackslash#1{\char`\#1 }
+
\def\macro{\recursivefalse\parsearg\macroxxx}
\def\rmacro{\recursivetrue\parsearg\macroxxx}
\def\macroxxx#1{%
- \getargs{#1}% now \macname is the macname and \argl the arglist
+ \getargs{#1}% now \macname is the macname and \argl the arglist
\ifx\argl\empty % no arguments
- \paramno=0%
+ \paramno=0\relax
\else
\expandafter\parsemargdef \argl;%
+ \if\paramno>256\relax
+ \ifx\eTeXversion\thisisundefined
+ \errhelp = \EMsimple
+ \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
+ \fi
+ \fi
\fi
\if1\csname ismacro.\the\macname\endcsname
\message{Warning: redefining \the\macname}%
\else
\expandafter\ifx\csname \the\macname\endcsname \relax
- \else \errmessage{The name \the\macname\space is reserved}\fi
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
\global\cslet{macsave.\the\macname}{\the\macname}%
\global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
- % Add the macroname to \macrolist
- \toks0 = \expandafter{\macrolist\do}%
- \xdef\macrolist{\the\toks0
- \expandafter\noexpand\csname\the\macname\endcsname}%
+ \addtomacrolist{\the\macname}%
\fi
\begingroup \macrobodyctxt
\ifrecursive \expandafter\parsermacbody
\else \expandafter\parsemacbody
\fi}
-\def\unmacro{\parsearg\unmacroxxx}
-\def\unmacroxxx#1{%
+\parseargdef\unmacro{%
\if1\csname ismacro.#1\endcsname
\global\cslet{#1}{macsave.#1}%
\global\expandafter\let \csname ismacro.#1\endcsname=0%
- % Remove the macro name from \macrolist
+ % Remove the macro name from \macrolist:
\begingroup
- \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
- \def\do##1{%
- \def\tempb{##1}%
- \ifx\tempa\tempb
- % remove this
- \else
- \toks0 = \expandafter{\newmacrolist\do}%
- \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
- \fi}%
- \def\newmacrolist{}%
- % Execute macro list to define \newmacrolist
- \macrolist
- \global\let\macrolist\newmacrolist
+ \expandafter\let\csname#1\endcsname \relax
+ \let\definedummyword\unmacrodo
+ \xdef\macrolist{\macrolist}%
\endgroup
\else
\errmessage{Macro #1 not defined}%
\fi
}
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx #1\relax
+ % remove this
+ \else
+ \noexpand\definedummyword \noexpand#1%
+ \fi
+}
+
% This makes use of the obscure feature that if the last token of a
% <parameter list> is #, then the preceding argument is delimited by
% an opening brace, and that opening brace is not consumed.
\def\getargs#1{\getargsxxx#1{}}
\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacname#1 #2\relax{\macname={#1}}
\def\getmacargs#1{\def\argl{#1}}
+% For macro processing make @ a letter so that we can make Texinfo private macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
+
% Parse the optional {params} list. Set up \paramno and \paramlist
-% so \defmacro knows what to do. Define \macarg.blah for each blah
-% in the params list, to be ##N where N is the position in that list.
+% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH
+% in the params list to some hook where the argument si to be expanded. If
+% there are less than 10 arguments that hook is to be replaced by ##N where N
+% is the position in that list, that is to say the macro arguments are to be
+% defined `a la TeX in the macro body.
+%
% That gets used by \mbodybackslash (above).
-
+%
% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX: let \hash be something
+% The technique used is stolen from LaTeX: let \hash be something
% unexpandable, insert that wherever you need a #, and then redefine
% it to # just before using the token list produced.
%
% The same technique is used to protect \eatspaces till just before
% the macro is used.
-
-\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
- \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+%
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because of
+% the catcode regime underwhich the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, you need that no macro has more than 256 arguments, otherwise an
+% error is produced.
+\def\parsemargdef#1;{%
+ \paramno=0\def\paramlist{}%
+ \let\hash\relax
+ \let\xeatspaces\relax
+ \parsemargdefxxx#1,;,%
+ % In case that there are 10 or more arguments we parse again the arguments
+ % list to set new definitions for the \macarg.BLAH macros corresponding to
+ % each BLAH argument. It was anyhow needed to parse already once this list
+ % in order to count the arguments, and as macros with at most 9 arguments
+ % are by far more frequent than macro with 10 or more arguments, defining
+ % twice the \macarg.BLAH macros does not cost too much processing power.
+ \ifnum\paramno<10\relax\else
+ \paramno0\relax
+ \parsemmanyargdef@@#1,;,% 10 or more arguments
+ \fi
+}
\def\parsemargdefxxx#1,{%
\if#1;\let\next=\relax
\else \let\next=\parsemargdefxxx
- \advance\paramno by 1%
+ \advance\paramno by 1
\expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
{\xeatspaces{\hash\the\paramno}}%
\edef\paramlist{\paramlist\hash\the\paramno,}%
\fi\next}
+\def\parsemmanyargdef@@#1,{%
+ \if#1;\let\next=\relax
+ \else
+ \let\next=\parsemmanyargdef@@
+ \edef\tempb{\eatspaces{#1}}%
+ \expandafter\def\expandafter\tempa
+ \expandafter{\csname macarg.\tempb\endcsname}%
+ % Note that we need some extra \noexpand\noexpand, this is because we
+ % don't want \the to be expanded in the \parsermacbody as it uses an
+ % \xdef .
+ \expandafter\edef\tempa
+ {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
+ \advance\paramno by 1\relax
+ \fi\next}
+
% These two commands read recursive and nonrecursive macro bodies.
% (They're different since rec and nonrec macros end differently.)
+%
+\catcode `\@\texiatcatcode
\long\def\parsemacbody#1@end macro%
{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
\long\def\parsermacbody#1@end rmacro%
{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\catcode `\@=11\relax
+
+\let\endargs@\relax
+\let\nil@\relax
+\def\nilm@{\nil@}%
+\long\def\nillm@{\nil@}%
+
+% This macro is expanded during the Texinfo macro expansion, not during its
+% definition. It gets all the arguments values and assigns them to macros
+% macarg.ARGNAME
+%
+% #1 is the macro name
+% #2 is the list of argument names
+% #3 is the list of argument values
+\def\getargvals@#1#2#3{%
+ \def\macargdeflist@{}%
+ \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
+ \def\paramlist{#2,\nil@}%
+ \def\macroname{#1}%
+ \begingroup
+ \macroargctxt
+ \def\argvaluelist{#3,\nil@}%
+ \def\@tempa{#3}%
+ \ifx\@tempa\empty
+ \setemptyargvalues@
+ \else
+ \getargvals@@
+ \fi
+}
+
+%
+\def\getargvals@@{%
+ \ifx\paramlist\nilm@
+ % Some sanity check needed here that \argvaluelist is also empty.
+ \ifx\argvaluelist\nillm@
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Too many arguments in macro `\macroname'!}%
+ \fi
+ \let\next\macargexpandinbody@
+ \else
+ \ifx\argvaluelist\nillm@
+ % No more arguments values passed to macro. Set remaining named-arg
+ % macros to empty.
+ \let\next\setemptyargvalues@
+ \else
+ % pop current arg name into \@tempb
+ \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\paramlist}%
+ % pop current argument value into \@tempc
+ \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\argvaluelist}%
+ % Here \@tempb is the current arg name and \@tempc is the current arg value.
+ % First place the new argument macro definition into \@tempd
+ \expandafter\macname\expandafter{\@tempc}%
+ \expandafter\let\csname macarg.\@tempb\endcsname\relax
+ \expandafter\def\expandafter\@tempe\expandafter{%
+ \csname macarg.\@tempb\endcsname}%
+ \edef\@tempd{\long\def\@tempe{\the\macname}}%
+ \push@\@tempd\macargdeflist@
+ \let\next\getargvals@@
+ \fi
+ \fi
+ \next
+}
+
+\def\push@#1#2{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter#1#2}%
+}
+
+% Replace arguments by their values in the macro body, and place the result
+% in macro \@tempa
+\def\macvalstoargs@{%
+ % To do this we use the property that token registers that are \the'ed
+ % within an \edef expand only once. So we are going to place all argument
+ % values into respective token registers.
+ %
+ % First we save the token context, and initialize argument numbering.
+ \begingroup
+ \paramno0\relax
+ % Then, for each argument number #N, we place the corresponding argument
+ % value into a new token list register \toks#N
+ \expandafter\putargsintokens@\saveparamlist@,;,%
+ % Then, we expand the body so that argument are replaced by their
+ % values. The trick for values not to be expanded themselves is that they
+ % are within tokens and that tokens expand only once in an \edef .
+ \edef\@tempc{\csname mac.\macroname .body\endcsname}%
+ % Now we restore the token stack pointer to free the token list registers
+ % which we have used, but we make sure that expanded body is saved after
+ % group.
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
+ }
+
+\def\macargexpandinbody@{%
+ %% Define the named-macro outside of this group and then close this group.
+ \expandafter
+ \endgroup
+ \macargdeflist@
+ % First the replace in body the macro arguments by their values, the result
+ % is in \@tempa .
+ \macvalstoargs@
+ % Then we point at the \norecurse or \gobble (for recursive) macro value
+ % with \@tempb .
+ \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
+ % Depending on whether it is recursive or not, we need some tailing
+ % \egroup .
+ \ifx\@tempb\gobble
+ \let\@tempc\relax
+ \else
+ \let\@tempc\egroup
+ \fi
+ % And now we do the real job:
+ \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
+ \@tempd
+}
-% This defines the macro itself. There are six cases: recursive and
-% nonrecursive macros of zero, one, and many arguments.
+\def\putargsintokens@#1,{%
+ \if#1;\let\next\relax
+ \else
+ \let\next\putargsintokens@
+ % First we allocate the new token list register, and give it a temporary
+ % alias \@tempb .
+ \toksdef\@tempb\the\paramno
+ % Then we place the argument value into that token list register.
+ \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
+ \expandafter\@tempb\expandafter{\@tempa}%
+ \advance\paramno by 1\relax
+ \fi
+ \next
+}
+
+% Save the token stack pointer into macro #1
+\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
+% Restore the token stack pointer from number in macro #1
+\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
+% newtoks that can be used non \outer .
+\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
+
+% Tailing missing arguments are set to empty
+\def\setemptyargvalues@{%
+ \ifx\paramlist\nilm@
+ \let\next\macargexpandinbody@
+ \else
+ \expandafter\setemptyargvaluesparser@\paramlist\endargs@
+ \let\next\setemptyargvalues@
+ \fi
+ \next
+}
+
+\def\setemptyargvaluesparser@#1,#2\endargs@{%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter\def\csname macarg.#1\endcsname{}}%
+ \push@\@tempa\macargdeflist@
+ \def\paramlist{#2}%
+}
+
+% #1 is the element target macro
+% #2 is the list macro
+% #3,#4\endargs@ is the list value
+\def\pop@#1#2#3,#4\endargs@{%
+ \def#1{#3}%
+ \def#2{#4}%
+}
+\long\def\longpop@#1#2#3,#4\endargs@{%
+ \long\def#1{#3}%
+ \long\def#2{#4}%
+}
+
+% This defines a Texinfo @macro. There are eight cases: recursive and
+% nonrecursive macros of zero, one, up to nine, and many arguments.
% Much magic with \expandafter here.
% \xdef is used so that macro definitions will survive the file
% they're defined in; @include reads the file inside a group.
+%
\def\defmacro{%
\let\hash=##% convert placeholders to macro parameter chars
\ifrecursive
\expandafter\noexpand\csname\the\macname xxx\endcsname}%
\expandafter\xdef\csname\the\macname xxx\endcsname##1{%
\egroup\noexpand\scanmacro{\temp}}%
- \else % many
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\csname\the\macname xx\endcsname}%
- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
- \expandafter\expandafter
- \expandafter\xdef
- \expandafter\expandafter
- \csname\the\macname xxx\endcsname
- \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+ \else
+ \ifnum\paramno<10\relax % at most 9
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+ \else % 10 or more
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
+ \fi
\fi
\else
\ifcase\paramno
\egroup
\noexpand\norecurse{\the\macname}%
\noexpand\scanmacro{\temp}\egroup}%
- \else % many
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \expandafter\noexpand\csname\the\macname xx\endcsname}%
- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
- \expandafter\expandafter
- \expandafter\xdef
- \expandafter\expandafter
- \csname\the\macname xxx\endcsname
- \paramlist{%
- \egroup
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
+ \else % at most 9
+ \ifnum\paramno<10\relax
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % 10 or more:
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
+ \fi
\fi
\fi}
+\catcode `\@\texiatcatcode\relax
+
\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
% \braceorline decides whether the next nonwhitespace character is a
% {. If so it reads up to the closing }, if not, it reads the whole
% line. Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg)
-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+% as an argument (by \parsebrace or \parsearg).
+%
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
\def\braceorlinexxx{%
\ifx\nchar\bgroup\else
\expandafter\parsearg
- \fi \next}
-
-% We mant to disable all macros during \shipout so that they are not
-% expanded by \write.
-\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
- \edef\next{\macrolist}\expandafter\endgroup\next}
+ \fi \macnamexxx}
% @alias.
-\def\alias#1=#2{\gdef#1{#2}}
+% We need some trickery to remove the optional spaces around the equal
+% sign. Make them active and then expand them all to nothing.
+%
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \addtomacrolist{#1}%
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
\message{cross references,}
-% @xref etc.
\newwrite\auxfile
-
\newif\ifhavexrefs % True if xref values are known.
\newif\ifwarnedxrefs % True if we warned once that they aren't known.
% @inforef is relatively simple.
\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+\def\inforefzzz #1,#2,#3,#4**{%
+ \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
node \samp{\ignorespaces#1{}}}
-% @node's job is to define \lastnode.
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
\let\nwnode=\node
-\let\lastnode=\relax
-
-% The sectioning commands (@chapter, etc.) call these.
-\def\donoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}%
- {Ysectionnumberandtype}%
- \global\let\lastnode=\relax
- \fi
-}
-\def\unnumbnoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
- \global\let\lastnode=\relax
- \fi
-}
-\def\appendixnoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}%
- {Yappendixletterandtype}%
- \global\let\lastnode=\relax
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
\fi
}
-
% @anchor{NAME} -- define xref target at arbitrary point.
%
-{ \catcode`\@ = 11
-% From latex.ltx, to make @anchor truely invisible.
-\newdimen\@savsk
-\newcount\@savsf
-\gdef\@bsphack{\relax
- \ifhmode \@savsk\lastskip \@savsf\spacefactor \fi
-}
-\gdef\@esphack{\relax
- \ifhmode \spacefactor\@savsf
- \ifdim\@savsk>\z@ \ignorespaces \fi
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \lastsection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \atdummies % preserve commands, but don't expand them
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\lastsection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
+ }%
\fi
}
-\gdef\anchor#1{\@bsphack \setref{#1}{Ynothing}\@esphack}
-}
-% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
-% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have
-% to set \indexdummies so commands such as @code in a section title
-% aren't expanded. It would be nicer not to expand the titles in the
-% first place, but there's so many layers that that is hard to do.
-%
-\def\setref#1#2{{%
- \indexdummies
- \ifpdf \pdfmkdest{#1}\fi
- \dosetq{#1-title}{Ytitle}%
- \dosetq{#1-pg}{Ypagenumber}%
- \dosetq{#1-snt}{#2}%
-}}
+% @xrefautosectiontitle on|off says whether @section(ing) names are used
+% automatically in xrefs, if the third arg is not explicitly specified.
+% This was provided as a "secret" @set xref-automatic-section-title
+% variable, now it's official.
+%
+\parseargdef\xrefautomaticsectiontitle{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+% \f
% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
% the node name, #2 the name of the Info cross-reference, #3 the printed
% node name, #4 the name of the Info file, #5 the name of the printed
\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
\def\ref#1{\xrefX[#1,,,,,,,]}
+%
+\newbox\toprefbox
+\newbox\printedrefnamebox
+\newbox\infofilenamebox
+\newbox\printedmanualbox
+%
\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ %
+ % Get args without leading/trailing spaces.
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+ %
+ \def\infofilename{\ignorespaces #4}%
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
+ %
\def\printedmanual{\ignorespaces #5}%
- \def\printednodename{\ignorespaces #3}%
- \setbox1=\hbox{\printedmanual}%
- \setbox0=\hbox{\printednodename}%
- \ifdim \wd0 = 0pt
+ \setbox\printedmanualbox = \hbox{\printedmanual\unskip}%
+ %
+ % If the printed reference name (arg #3) was not explicitly given in
+ % the @xref, figure out what we want to use.
+ \ifdim \wd\printedrefnamebox = 0pt
% No printed node name was explicitly given.
- \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
- % Use the node name inside the square brackets.
- \def\printednodename{\ignorespaces #1}%
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
+ % Not auto section-title: use node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
\else
- % Use the actual chapter/section title appear inside
- % the square brackets. Use the real section title if we have it.
- \ifdim \wd1 > 0pt
- % It is in another manual, so we don't have it.
- \def\printednodename{\ignorespaces #1}%
+ % Auto section-title: use chapter/section title inside
+ % the square brackets if we have it.
+ \ifdim \wd\printedmanualbox > 0pt
+ % It is in another manual, so we don't have it; use node name.
+ \def\printedrefname{\ignorespaces #1}%
\else
\ifhavexrefs
- % We know the real title if we have the xref values.
- \def\printednodename{\refx{#1-title}{}}%
+ % We (should) know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}{}}%
\else
% Otherwise just copy the Info node name.
- \def\printednodename{\ignorespaces #1}%
+ \def\printedrefname{\ignorespaces #1}%
\fi%
\fi
\fi
\fi
%
- % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
- % insert empty discretionaries after hyphens, which means that it will
- % not find a line break at a hyphen in a node names. Since some manuals
- % are best written with fairly long node names, containing hyphens, this
- % is a loss. Therefore, we give the text of the node name again, so it
- % is as if TeX is seeing it for the first time.
+ % Make link in pdf output.
\ifpdf
- \leavevmode
- \getfilename{#4}%
- \ifnum\filenamelength>0
- \pdfannotlink attr{/Border [0 0 0]}%
- goto file{\the\filename.pdf} name{#1@}%
- \else
- \pdfannotlink attr{/Border [0 0 0]}%
- goto name{#1@}%
- \fi
- \BlueGreen
+ {\indexnofonts
+ \turnoffactive
+ \makevalueexpandable
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \edef\pdfxrefdest{#1}%
+ \ifx\pdfxrefdest\empty
+ \def\pdfxrefdest{Top}% no empty targets
+ \else
+ \txiescapepdf\pdfxrefdest % escape PDF special chars
+ \fi
+ %
+ \leavevmode
+ \startlink attr{/Border [0 0 0]}%
+ \ifnum\filenamelength>0
+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
+ \else
+ goto name{\pdfmkpgn{\pdfxrefdest}}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
\fi
%
- \ifdim \wd1 > 0pt
- \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". We distinguish them by the
+ % LABEL-title being set to a magic string.
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd\printedrefnamebox = 0pt
+ \refx{#1-snt}{}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % If the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd\printedmanualbox > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
\else
- % _ (for example) has to be the character _ for the purposes of the
- % control sequence corresponding to the node, but it has to expand
- % into the usual \leavevmode...\vrule stuff for purposes of
- % printing. So we \turnoffactive for the \refx-snt, back on for the
- % printing, back off for the \refx-pg.
- {\normalturnoffactive
- % Only output a following space if the -snt ref is nonempty; for
- % @unnumbered and @anchor, it won't be.
- \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
- \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
- }%
- % [mynode],
- [\printednodename],\space
- % page 3
- \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox to print the node names, TeX does not insert
+ % empty discretionaries after hyphens, which means that it will not
+ % find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens,
+ % this is a loss. Therefore, we give the text of the node name
+ % again, so it is as if TeX is seeing it for the first time.
+ %
+ \ifdim \wd\printedmanualbox > 0pt
+ % Cross-manual reference with a printed manual name.
+ %
+ \crossmanualxref{\cite{\printedmanual\unskip}}%
+ %
+ \else\ifdim \wd\infofilenamebox > 0pt
+ % Cross-manual reference with only an info filename (arg 4), no
+ % printed manual name (arg 5). This is essentially the same as
+ % the case above; we output the filename, since we have nothing else.
+ %
+ \crossmanualxref{\code{\infofilename\unskip}}%
+ %
+ \else
+ % Reference within this manual.
+ %
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % output the `[mynode]' via the macro below so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ % But we always want a comma and a space:
+ ,\space
+ %
+ % output the `page 3'.
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ \fi\fi
\fi
- \ifpdf \Black\pdfendlink \fi
+ \endlink
\endgroup}
-% \dosetq is the interface for calls from other macros
-
-% Use \normalturnoffactive so that punctuation chars such as underscore
-% and backslash work in node names. (\turnoffactive doesn't do \.)
-\def\dosetq#1#2{%
- {\let\folio=0%
- \normalturnoffactive
- \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
- \iflinks
- \next
- \fi
- }%
+% Output a cross-manual xref to #1. Used just above (twice).
+%
+% Only include the text "Section ``foo'' in" if the foo is neither
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
+% "see The Foo Manual", the idea being to refer to the whole manual.
+%
+% But, this being TeX, we can't easily compare our node name against the
+% string "Top" while ignoring the possible spaces before and after in
+% the input. By adding the arbitrary 7sp below, we make it much less
+% likely that a real node name would have the same width as "Top" (e.g.,
+% in a monospaced font). Hopefully it will never happen in practice.
+%
+% For the same basic reason, we retypeset the "Top" at every
+% reference, since the current font is indeterminate.
+%
+\def\crossmanualxref#1{%
+ \setbox\toprefbox = \hbox{Top\kern7sp}%
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+ \ifdim \wd2 > 7sp % nonempty?
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top?
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space
+ \fi
+ \fi
+ #1%
}
-% \internalsetq {foo}{page} expands into
-% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-% When the aux file is read, ' is the escape character
-
-\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq
-
-\def\Ypagenumber{\folio}
-
-\def\Ytitle{\thissection}
-
-\def\Ynothing{}
-
-\def\Ysectionnumberandtype{%
-\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
-\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\def\Yappendixletterandtype{%
-\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
-\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\gdef\xreftie{'tie}
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
+% Things referred to by \setref.
%
-\ifx\inputlineno\thisisundefined
- \let\linenumber = \empty % Non-3.0.
-\else
- \def\linenumber{\the\inputlineno:\space}
-\fi
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
% If its value is nonempty, SUFFIX is output afterward.
-
+%
\def\refx#1#2{%
- \expandafter\ifx\csname X#1\endcsname\relax
+ {%
+ \indexnofonts
+ \otherbackslash
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
% If not defined, say something at least.
\angleleft un\-de\-fined\angleright
\iflinks
\ifhavexrefs
- \message{\linenumber Undefined cross reference `#1'.}%
+ {\toks0 = {#1}% avoid expansion of possibly-complex value
+ \message{\linenumber Undefined cross reference `\the\toks0'.}}%
\else
\ifwarnedxrefs\else
\global\warnedxrefstrue
\fi
\else
% It's defined, so just use it.
- \csname X#1\endcsname
+ \thisrefX
\fi
#2% Output the suffix in any case.
}
-% This is the macro invoked by entries in the aux file.
+% This is the macro invoked by entries in the aux file. Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions). But if this is a float type, we have more work to do.
%
-\def\xrdef#1{\begingroup
- % Reenable \ as an escape while reading the second argument.
- \catcode`\\ = 0
- \afterassignment\endgroup
- \expandafter\gdef\csname X#1\endcsname
+\def\xrdef#1#2{%
+ {% The node name might contain 8-bit characters, which in our current
+ % implementation are changed to commands like @'e. Don't let these
+ % mess up the control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safexrefname{#1}%
+ }%
+ %
+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR\safexrefname\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+ {\safexrefname}}%
+ \fi
}
% Read the last existing aux file, if any. No error if none exists.
-\def\readauxfile{\begingroup
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readdatafile{aux}%
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\setupdatafile{%
\catcode`\^^@=\other
\catcode`\^^A=\other
\catcode`\^^B=\other
\catcode`\^^]=\other
\catcode`\^^^=\other
\catcode`\^^_=\other
- \catcode`\@=\other
- \catcode`\^=\other
- % It was suggested to define this as 7, which would allow ^^e4 etc.
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
% in xref tags, i.e., node names. But since ^^e4 notation isn't
% supported in the main text, it doesn't seem desirable. Furthermore,
% that is not enough: for node names that actually contain a ^
% \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
% and then to call \auxhat in \setq.
%
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
\catcode`\~=\other
\catcode`\[=\other
\catcode`\]=\other
\catcode`\$=\other
\catcode`\#=\other
\catcode`\&=\other
+ \catcode`\%=\other
\catcode`+=\other % avoid \+ for paranoia even though we've turned it off
- % Make the characters 128-255 be printing characters
+ %
+ % This is to support \ in node names and titles, since the \
+ % characters end up in a \csname. It's easier than
+ % leaving it active and making its active definition an actual \
+ % character. What I don't understand is why it works in the *value*
+ % of the xrdef. Seems like it should be a catcode12 \, and that
+ % should not typeset properly. But it works, so I'm moving on for
+ % now. --karl, 15jan04.
+ \catcode`\\=\other
+ %
+ % Make the characters 128-255 be printing characters.
{%
- \count 1=128
+ \count1=128
\def\loop{%
- \catcode\count 1=\other
- \advance\count 1 by 1
- \ifnum \count 1<256 \loop \fi
+ \catcode\count1=\other
+ \advance\count1 by 1
+ \ifnum \count1<256 \loop \fi
}%
}%
- % The aux file uses ' as the escape (for now).
- % Turn off \ as an escape so we do not lose on
- % entries which were dumped with control sequences in their names.
- % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
- % Reference to such entries still does not work the way one would wish,
- % but at least they do not bomb out when the aux file is read in.
+ %
+ % @ is our escape character in .aux files, and we need braces.
\catcode`\{=1
\catcode`\}=2
- \catcode`\%=\other
- \catcode`\'=0
- \catcode`\\=\other
- %
- \openin 1 \jobname.aux
- \ifeof 1 \else
- \closein 1
- \input \jobname.aux
- \global\havexrefstrue
- \global\warnedobstrue
- \fi
- % Open the new aux file. TeX will close it automatically at exit.
- \openout\auxfile=\jobname.aux
+ \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+ \setupdatafile
+ \input\jobname.#1
\endgroup}
-% Footnotes.
+\message{insertions,}
+% including footnotes.
\newcount \footnoteno
% space to prevent strange expansion errors.)
\def\supereject{\par\penalty -20000\footnoteno =0 }
-% @footnotestyle is meaningful for info output only.
+% @footnotestyle is meaningful for Info output only.
\let\footnotestyle=\comment
-\let\ptexfootnote=\footnote
-
{\catcode `\@=11
%
% Auto-number footnotes. Otherwise like plain.
\gdef\footnote{%
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
\global\advance\footnoteno by \@ne
\edef\thisfootno{$^{\the\footnoteno}$}%
%
% In case the footnote comes at the end of a sentence, preserve the
% extra spacing after we do the footnote number.
\let\@sf\empty
- \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
%
% Remove inadvertent blank space before typesetting the footnote number.
\unskip
\thisfootno\@sf
- \footnotezzz
+ \dofootnote
}%
% Don't bother with the trickery in plain.tex to not require the
% footnote text as a parameter. Our footnotes don't need to be so general.
%
-% Oh yes, they do; otherwise, @ifset and anything else that uses
-% \parseargline fail inside footnotes because the tokens are fixed when
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
% the footnote is read. --karl, 16nov96.
%
-\long\gdef\footnotezzz{\insert\footins\bgroup
+\gdef\dofootnote{%
+ \insert\footins\bgroup
% We want to typeset this text as a normal paragraph, even if the
% footnote reference occurs in (for example) a display environment.
% So reset some parameters.
+ \hsize=\pagewidth
\interlinepenalty\interfootnotelinepenalty
\splittopskip\ht\strutbox % top baseline for broken footnotes
\splitmaxdepth\dp\strutbox
\xspaceskip\z@skip
\parindent\defaultparindent
%
- % Hang the footnote text off the number.
- \hang
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
\textindent{\thisfootno}%
%
% Don't crash into the line above the footnote text. Since this
% expands into a box, it must come within the paragraph, lest it
% provide a place where TeX can split the footnote.
\footstrut
+ %
+ % Invoke rest of plain TeX footnote routine.
\futurelet\next\fo@t
}
-\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
- \else\let\next\f@t\fi \next}
-\def\f@@t{\bgroup\aftergroup\@foot\let\next}
-\def\f@t#1{#1\@foot}
-\def\@foot{\strut\egroup}
-
}%end \catcode `\@=11
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly. There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
%
-\def\setleading#1{%
- \normalbaselineskip = #1\relax
- \normallineskip = \lineskipfactor\normalbaselineskip
- \normalbaselines
- \setbox\strutbox =\hbox{%
- \vrule width0pt height\strutheightpercent\baselineskip
- depth \strutdepthpercent \baselineskip
- }%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
}
-% @| inserts a changebar to the left of the current line. It should
-% surround any changed text. This approach does *not* work if the
-% change spans more than two lines of output. To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
%
-\def\|{%
- % \vadjust can only be used in horizontal mode.
- \leavevmode
- %
- % Append this vertical mode material after the current line in the output.
- \vadjust{%
- % We want to insert a rule with the height and depth of the current
- % leading; that is exactly what \strutbox is supposed to record.
- \vskip-\baselineskip
- %
- % \vadjust-items are inserted at the left edge of the type. So
- % the \llap here moves out into the left-hand margin.
- \llap{%
- %
- % For a thicker or thinner bar, change the `1pt'.
- \vrule height\baselineskip width1pt
- %
- % This is the space between the bar and the text.
- \hskip 12pt
- }%
- }%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt}
% @image. We use the macros from epsf.tex to support this.
% If epsf.tex is not installed and @image is used, we complain.
% undone and the next image would fail.
\openin 1 = epsf.tex
\ifeof 1 \else
- \closein 1
- % Do not bother showing banner with post-v2.7 epsf.tex (available in
- % doc/epsf.tex until it shows up on ctan).
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
\def\epsfannounce{\toks0 = }%
\input epsf.tex
\fi
+\closein 1
%
% We will only complain once about lack of epsf.tex.
\newif\ifwarnednoepsf
it from ftp://tug.org/tex/epsf.tex.}
%
\def\image#1{%
- \ifx\epsfbox\undefined
+ \ifx\epsfbox\thisisundefined
\ifwarnednoepsf \else
\errhelp = \noepsfhelp
\errmessage{epsf.tex not found, images will be ignored}%
\global\warnednoepsftrue
\fi
\else
- \imagexxx #1,,,\finish
+ \imagexxx #1,,,,,\finish
\fi
}
%
% Arguments to @image:
% #1 is (mandatory) image filename; we tack on .eps extension.
% #2 is (optional) width, #3 is (optional) height.
-% #4 is just the usual extra ignored arg for parsing this stuff.
-\def\imagexxx#1,#2,#3,#4\finish{%
- \ifx\pdfoutput\undefined
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \else \ifx\centersub\centerV
+ % for @center @image, we need a vbox so we can have our vertical space
+ \imagevmodetrue
+ \vbox\bgroup % vbox has better behavior than vtop herev
+ \fi\fi
+ %
+ \ifimagevmode
+ \nobreak\medskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \fi
+ %
+ % Leave vertical mode so that indentation from an enclosing
+ % environment such as @quotation is respected.
+ % However, if we're at the top level, we don't want the
+ % normal paragraph indentation.
+ % On the other hand, if we are in the case of @center @image, we don't
+ % want to start a paragraph, which will create a hsize-width box and
+ % eradicate the centering.
+ \ifx\centersub\centerV\else \noindent \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
% \epsfbox itself resets \epsf?size at each figure.
\setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
\setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
- \begingroup
- \catcode`\^^M = 5 % in case we're inside an example
- % If the image is by itself, center it.
- \ifvmode
- \nobreak\bigskip
- % Usually we'll have text after the image which will insert
- % \parskip glue, so insert it here too to equalize the space
- % above and below.
- \nobreak\vskip\parskip
- \nobreak
- \centerline{\epsfbox{#1.eps}}%
- \bigbreak
- \else
- % In the middle of a paragraph, no extra space.
- \epsfbox{#1.eps}%
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode
+ \medskip % space after a standalone image
+ \fi
+ \ifx\centersub\centerV \egroup \fi
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \lastsection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\lastsection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
\fi
- \endgroup
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \atdummies
+ %
+ % since we read the caption text in the macro world, where ^^M
+ % is turned into a normal character, we have to scan it back, so
+ % we don't write the literal three characters "^^M" into the aux file.
+ \scanexp{%
+ \xdef\noexpand\gtemp{%
+ \ifx\thisshortcaption\empty
+ \thiscaption
+ \else
+ \thisshortcaption
+ \fi
+ }%
+ }%
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ % place the captured inserts
+ %
+ % BEWARE: when the floats start floating, we have to issue warning
+ % whenever an insert appears inside a float which could possibly
+ % float. --kasal, 26may04
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \lastsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
\else
- \centerline{\pdfimage #1.pdf}%
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
\fi
}
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
\message{localization,}
-% and i18n.
-% @documentlanguage is usually given very early, just after
-% @setfilename. If done too late, it may not override everything
-% properly. Single argument is the language abbreviation.
-% It would be nice if we could set up a hyphenation file here.
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding. Single argument is the language
+% (de) or locale (de_DE) abbreviation.
%
-\def\documentlanguage{\parsearg\dodocumentlanguage}
-\def\dodocumentlanguage#1{%
+{
+ \catcode`\_ = \active
+ \globaldefs=1
+\parseargdef\documentlanguage{\begingroup
+ \let_=\normalunderscore % normal _ character for filenames
\tex % read txi-??.tex file in plain TeX.
- % Read the file if it exists.
+ % Read the file by the name they passed if it exists.
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \documentlanguagetrywithoutunderscore{#1_\finish}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup % end raw TeX
+\endgroup}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
\openin 1 txi-#1.tex
- \ifeof1
+ \ifeof 1
\errhelp = \nolanghelp
\errmessage{Cannot read language file txi-#1.tex}%
- \let\temp = \relax
\else
- \def\temp{\input txi-#1.tex }%
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
\fi
- \temp
- \endgroup
+ \closein 1
}
+}% end of special _ catcode
+%
\newhelp\nolanghelp{The given language definition file cannot be found or
-is empty. Maybe you need to install it? In the current directory
-should work if nowhere else does.}
-
+is empty. Maybe you need to install it? Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages. This means we can support hyphenation in
+% Texinfo, at least to some extent. (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+ % do not set the language if the name is undefined in the current TeX.
+ \expandafter\ifx\csname lang@#1\endcsname \relax
+ \message{no patterns for #1}%
+ \else
+ \global\language = \csname lang@#1\endcsname
+ \fi
+ % but there is no harm in adjusting the hyphenmin values regardless.
+ \global\lefthyphenmin = #2\relax
+ \global\righthyphenmin = #3\relax
+}
-% @documentencoding should change something in TeX eventually, most
-% likely, but for now just recognize it.
-\let\documentencoding = \comment
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \global\catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+\def\setnonasciicharscatcodenonglobal#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
-% Page size parameters.
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
%
+\parseargdef\documentencoding{%
+ % Encoding being declared for the document.
+ \def\declaredencoding{\csname #1.enc\endcsname}%
+ %
+ % Supported encodings: names converted to tokens in order to be able
+ % to compare them with \ifx.
+ \def\ascii{\csname US-ASCII.enc\endcsname}%
+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+ \def\utfeight{\csname UTF-8.enc\endcsname}%
+ %
+ \ifx \declaredencoding \ascii
+ \asciichardefs
+ %
+ \else \ifx \declaredencoding \lattwo
+ \setnonasciicharscatcode\active
+ \lattwochardefs
+ %
+ \else \ifx \declaredencoding \latone
+ \setnonasciicharscatcode\active
+ \latonechardefs
+ %
+ \else \ifx \declaredencoding \latnine
+ \setnonasciicharscatcode\active
+ \latninechardefs
+ %
+ \else \ifx \declaredencoding \utfeight
+ \setnonasciicharscatcode\active
+ \utfeightchardefs
+ %
+ \else
+ \message{Unknown document encoding #1, ignoring.}%
+ %
+ \fi % utfeight
+ \fi % latnine
+ \fi % latone
+ \fi % lattwo
+ \fi % ascii
+}
+
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+ \gdef^^a0{\tie}
+ \gdef^^a1{\exclamdown}
+ \gdef^^a2{\missingcharmsg{CENT SIGN}}
+ \gdef^^a3{{\pounds}}
+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdef^^a5{\missingcharmsg{YEN SIGN}}
+ \gdef^^a6{\missingcharmsg{BROKEN BAR}}
+ \gdef^^a7{\S}
+ \gdef^^a8{\"{}}
+ \gdef^^a9{\copyright}
+ \gdef^^aa{\ordf}
+ \gdef^^ab{\guillemetleft}
+ \gdef^^ac{$\lnot$}
+ \gdef^^ad{\-}
+ \gdef^^ae{\registeredsymbol}
+ \gdef^^af{\={}}
+ %
+ \gdef^^b0{\textdegree}
+ \gdef^^b1{$\pm$}
+ \gdef^^b2{$^2$}
+ \gdef^^b3{$^3$}
+ \gdef^^b4{\'{}}
+ \gdef^^b5{$\mu$}
+ \gdef^^b6{\P}
+ %
+ \gdef^^b7{$^.$}
+ \gdef^^b8{\cedilla\ }
+ \gdef^^b9{$^1$}
+ \gdef^^ba{\ordm}
+ %
+ \gdef^^bb{\guillemetright}
+ \gdef^^bc{$1\over4$}
+ \gdef^^bd{$1\over2$}
+ \gdef^^be{$3\over4$}
+ \gdef^^bf{\questiondown}
+ %
+ \gdef^^c0{\`A}
+ \gdef^^c1{\'A}
+ \gdef^^c2{\^A}
+ \gdef^^c3{\~A}
+ \gdef^^c4{\"A}
+ \gdef^^c5{\ringaccent A}
+ \gdef^^c6{\AE}
+ \gdef^^c7{\cedilla C}
+ \gdef^^c8{\`E}
+ \gdef^^c9{\'E}
+ \gdef^^ca{\^E}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\`I}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\"I}
+ %
+ \gdef^^d0{\DH}
+ \gdef^^d1{\~N}
+ \gdef^^d2{\`O}
+ \gdef^^d3{\'O}
+ \gdef^^d4{\^O}
+ \gdef^^d5{\~O}
+ \gdef^^d6{\"O}
+ \gdef^^d7{$\times$}
+ \gdef^^d8{\O}
+ \gdef^^d9{\`U}
+ \gdef^^da{\'U}
+ \gdef^^db{\^U}
+ \gdef^^dc{\"U}
+ \gdef^^dd{\'Y}
+ \gdef^^de{\TH}
+ \gdef^^df{\ss}
+ %
+ \gdef^^e0{\`a}
+ \gdef^^e1{\'a}
+ \gdef^^e2{\^a}
+ \gdef^^e3{\~a}
+ \gdef^^e4{\"a}
+ \gdef^^e5{\ringaccent a}
+ \gdef^^e6{\ae}
+ \gdef^^e7{\cedilla c}
+ \gdef^^e8{\`e}
+ \gdef^^e9{\'e}
+ \gdef^^ea{\^e}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\`{\dotless i}}
+ \gdef^^ed{\'{\dotless i}}
+ \gdef^^ee{\^{\dotless i}}
+ \gdef^^ef{\"{\dotless i}}
+ %
+ \gdef^^f0{\dh}
+ \gdef^^f1{\~n}
+ \gdef^^f2{\`o}
+ \gdef^^f3{\'o}
+ \gdef^^f4{\^o}
+ \gdef^^f5{\~o}
+ \gdef^^f6{\"o}
+ \gdef^^f7{$\div$}
+ \gdef^^f8{\o}
+ \gdef^^f9{\`u}
+ \gdef^^fa{\'u}
+ \gdef^^fb{\^u}
+ \gdef^^fc{\"u}
+ \gdef^^fd{\'y}
+ \gdef^^fe{\th}
+ \gdef^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+ % Encoding is almost identical to Latin1.
+ \latonechardefs
+ %
+ \gdef^^a4{\euro}
+ \gdef^^a6{\v S}
+ \gdef^^a8{\v s}
+ \gdef^^b4{\v Z}
+ \gdef^^b8{\v z}
+ \gdef^^bc{\OE}
+ \gdef^^bd{\oe}
+ \gdef^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+ \gdef^^a0{\tie}
+ \gdef^^a1{\ogonek{A}}
+ \gdef^^a2{\u{}}
+ \gdef^^a3{\L}
+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdef^^a5{\v L}
+ \gdef^^a6{\'S}
+ \gdef^^a7{\S}
+ \gdef^^a8{\"{}}
+ \gdef^^a9{\v S}
+ \gdef^^aa{\cedilla S}
+ \gdef^^ab{\v T}
+ \gdef^^ac{\'Z}
+ \gdef^^ad{\-}
+ \gdef^^ae{\v Z}
+ \gdef^^af{\dotaccent Z}
+ %
+ \gdef^^b0{\textdegree}
+ \gdef^^b1{\ogonek{a}}
+ \gdef^^b2{\ogonek{ }}
+ \gdef^^b3{\l}
+ \gdef^^b4{\'{}}
+ \gdef^^b5{\v l}
+ \gdef^^b6{\'s}
+ \gdef^^b7{\v{}}
+ \gdef^^b8{\cedilla\ }
+ \gdef^^b9{\v s}
+ \gdef^^ba{\cedilla s}
+ \gdef^^bb{\v t}
+ \gdef^^bc{\'z}
+ \gdef^^bd{\H{}}
+ \gdef^^be{\v z}
+ \gdef^^bf{\dotaccent z}
+ %
+ \gdef^^c0{\'R}
+ \gdef^^c1{\'A}
+ \gdef^^c2{\^A}
+ \gdef^^c3{\u A}
+ \gdef^^c4{\"A}
+ \gdef^^c5{\'L}
+ \gdef^^c6{\'C}
+ \gdef^^c7{\cedilla C}
+ \gdef^^c8{\v C}
+ \gdef^^c9{\'E}
+ \gdef^^ca{\ogonek{E}}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\v E}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\v D}
+ %
+ \gdef^^d0{\DH}
+ \gdef^^d1{\'N}
+ \gdef^^d2{\v N}
+ \gdef^^d3{\'O}
+ \gdef^^d4{\^O}
+ \gdef^^d5{\H O}
+ \gdef^^d6{\"O}
+ \gdef^^d7{$\times$}
+ \gdef^^d8{\v R}
+ \gdef^^d9{\ringaccent U}
+ \gdef^^da{\'U}
+ \gdef^^db{\H U}
+ \gdef^^dc{\"U}
+ \gdef^^dd{\'Y}
+ \gdef^^de{\cedilla T}
+ \gdef^^df{\ss}
+ %
+ \gdef^^e0{\'r}
+ \gdef^^e1{\'a}
+ \gdef^^e2{\^a}
+ \gdef^^e3{\u a}
+ \gdef^^e4{\"a}
+ \gdef^^e5{\'l}
+ \gdef^^e6{\'c}
+ \gdef^^e7{\cedilla c}
+ \gdef^^e8{\v c}
+ \gdef^^e9{\'e}
+ \gdef^^ea{\ogonek{e}}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\v e}
+ \gdef^^ed{\'{\dotless{i}}}
+ \gdef^^ee{\^{\dotless{i}}}
+ \gdef^^ef{\v d}
+ %
+ \gdef^^f0{\dh}
+ \gdef^^f1{\'n}
+ \gdef^^f2{\v n}
+ \gdef^^f3{\'o}
+ \gdef^^f4{\^o}
+ \gdef^^f5{\H o}
+ \gdef^^f6{\"o}
+ \gdef^^f7{$\div$}
+ \gdef^^f8{\v r}
+ \gdef^^f9{\ringaccent u}
+ \gdef^^fa{\'u}
+ \gdef^^fb{\H u}
+ \gdef^^fc{\"u}
+ \gdef^^fd{\'y}
+ \gdef^^fe{\cedilla t}
+ \gdef^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions. It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+ \ifx #1\relax
+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+ \else
+ \expandafter #1%
+ \fi
+}
+
+\begingroup
+ \catcode`\~13
+ \catcode`\"12
+
+ \def\UTFviiiLoop{%
+ \global\catcode\countUTFx\active
+ \uccode`\~\countUTFx
+ \uppercase\expandafter{\UTFviiiTmp}%
+ \advance\countUTFx by 1
+ \ifnum\countUTFx < \countUTFy
+ \expandafter\UTFviiiLoop
+ \fi}
+
+ \countUTFx = "C2
+ \countUTFy = "E0
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+ \UTFviiiLoop
+
+ \countUTFx = "E0
+ \countUTFy = "F0
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+ \UTFviiiLoop
+
+ \countUTFx = "F0
+ \countUTFy = "F4
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+ \UTFviiiLoop
+\endgroup
+
+\begingroup
+ \catcode`\"=12
+ \catcode`\<=12
+ \catcode`\.=12
+ \catcode`\,=12
+ \catcode`\;=12
+ \catcode`\!=12
+ \catcode`\~=13
+
+ \gdef\DeclareUnicodeCharacter#1#2{%
+ \countUTFz = "#1\relax
+ %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
+ \begingroup
+ \parseXMLCharref
+ \def\UTFviiiTwoOctets##1##2{%
+ \csname u8:##1\string ##2\endcsname}%
+ \def\UTFviiiThreeOctets##1##2##3{%
+ \csname u8:##1\string ##2\string ##3\endcsname}%
+ \def\UTFviiiFourOctets##1##2##3##4{%
+ \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \gdef\UTFviiiTmp{#2}%
+ \endgroup}
+
+ \gdef\parseXMLCharref{%
+ \ifnum\countUTFz < "A0\relax
+ \errhelp = \EMsimple
+ \errmessage{Cannot define Unicode char value < 00A0}%
+ \else\ifnum\countUTFz < "800\relax
+ \parseUTFviiiA,%
+ \parseUTFviiiB C\UTFviiiTwoOctets.,%
+ \else\ifnum\countUTFz < "10000\relax
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
+ \else
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiA!%
+ \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
+ \fi\fi\fi
+ }
+
+ \gdef\parseUTFviiiA#1{%
+ \countUTFx = \countUTFz
+ \divide\countUTFz by 64
+ \countUTFy = \countUTFz
+ \multiply\countUTFz by 64
+ \advance\countUTFx by -\countUTFz
+ \advance\countUTFx by 128
+ \uccode `#1\countUTFx
+ \countUTFz = \countUTFy}
+
+ \gdef\parseUTFviiiB#1#2#3#4{%
+ \advance\countUTFz by "#10\relax
+ \uccode `#3\countUTFz
+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+\def\utfeightchardefs{%
+ \DeclareUnicodeCharacter{00A0}{\tie}
+ \DeclareUnicodeCharacter{00A1}{\exclamdown}
+ \DeclareUnicodeCharacter{00A3}{\pounds}
+ \DeclareUnicodeCharacter{00A8}{\"{ }}
+ \DeclareUnicodeCharacter{00A9}{\copyright}
+ \DeclareUnicodeCharacter{00AA}{\ordf}
+ \DeclareUnicodeCharacter{00AB}{\guillemetleft}
+ \DeclareUnicodeCharacter{00AD}{\-}
+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
+ \DeclareUnicodeCharacter{00AF}{\={ }}
+
+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+ \DeclareUnicodeCharacter{00B4}{\'{ }}
+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+ \DeclareUnicodeCharacter{00BA}{\ordm}
+ \DeclareUnicodeCharacter{00BB}{\guillemetright}
+ \DeclareUnicodeCharacter{00BF}{\questiondown}
+
+ \DeclareUnicodeCharacter{00C0}{\`A}
+ \DeclareUnicodeCharacter{00C1}{\'A}
+ \DeclareUnicodeCharacter{00C2}{\^A}
+ \DeclareUnicodeCharacter{00C3}{\~A}
+ \DeclareUnicodeCharacter{00C4}{\"A}
+ \DeclareUnicodeCharacter{00C5}{\AA}
+ \DeclareUnicodeCharacter{00C6}{\AE}
+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
+ \DeclareUnicodeCharacter{00C8}{\`E}
+ \DeclareUnicodeCharacter{00C9}{\'E}
+ \DeclareUnicodeCharacter{00CA}{\^E}
+ \DeclareUnicodeCharacter{00CB}{\"E}
+ \DeclareUnicodeCharacter{00CC}{\`I}
+ \DeclareUnicodeCharacter{00CD}{\'I}
+ \DeclareUnicodeCharacter{00CE}{\^I}
+ \DeclareUnicodeCharacter{00CF}{\"I}
+
+ \DeclareUnicodeCharacter{00D0}{\DH}
+ \DeclareUnicodeCharacter{00D1}{\~N}
+ \DeclareUnicodeCharacter{00D2}{\`O}
+ \DeclareUnicodeCharacter{00D3}{\'O}
+ \DeclareUnicodeCharacter{00D4}{\^O}
+ \DeclareUnicodeCharacter{00D5}{\~O}
+ \DeclareUnicodeCharacter{00D6}{\"O}
+ \DeclareUnicodeCharacter{00D8}{\O}
+ \DeclareUnicodeCharacter{00D9}{\`U}
+ \DeclareUnicodeCharacter{00DA}{\'U}
+ \DeclareUnicodeCharacter{00DB}{\^U}
+ \DeclareUnicodeCharacter{00DC}{\"U}
+ \DeclareUnicodeCharacter{00DD}{\'Y}
+ \DeclareUnicodeCharacter{00DE}{\TH}
+ \DeclareUnicodeCharacter{00DF}{\ss}
+
+ \DeclareUnicodeCharacter{00E0}{\`a}
+ \DeclareUnicodeCharacter{00E1}{\'a}
+ \DeclareUnicodeCharacter{00E2}{\^a}
+ \DeclareUnicodeCharacter{00E3}{\~a}
+ \DeclareUnicodeCharacter{00E4}{\"a}
+ \DeclareUnicodeCharacter{00E5}{\aa}
+ \DeclareUnicodeCharacter{00E6}{\ae}
+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
+ \DeclareUnicodeCharacter{00E8}{\`e}
+ \DeclareUnicodeCharacter{00E9}{\'e}
+ \DeclareUnicodeCharacter{00EA}{\^e}
+ \DeclareUnicodeCharacter{00EB}{\"e}
+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
+
+ \DeclareUnicodeCharacter{00F0}{\dh}
+ \DeclareUnicodeCharacter{00F1}{\~n}
+ \DeclareUnicodeCharacter{00F2}{\`o}
+ \DeclareUnicodeCharacter{00F3}{\'o}
+ \DeclareUnicodeCharacter{00F4}{\^o}
+ \DeclareUnicodeCharacter{00F5}{\~o}
+ \DeclareUnicodeCharacter{00F6}{\"o}
+ \DeclareUnicodeCharacter{00F8}{\o}
+ \DeclareUnicodeCharacter{00F9}{\`u}
+ \DeclareUnicodeCharacter{00FA}{\'u}
+ \DeclareUnicodeCharacter{00FB}{\^u}
+ \DeclareUnicodeCharacter{00FC}{\"u}
+ \DeclareUnicodeCharacter{00FD}{\'y}
+ \DeclareUnicodeCharacter{00FE}{\th}
+ \DeclareUnicodeCharacter{00FF}{\"y}
+
+ \DeclareUnicodeCharacter{0100}{\=A}
+ \DeclareUnicodeCharacter{0101}{\=a}
+ \DeclareUnicodeCharacter{0102}{\u{A}}
+ \DeclareUnicodeCharacter{0103}{\u{a}}
+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}
+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}
+ \DeclareUnicodeCharacter{0106}{\'C}
+ \DeclareUnicodeCharacter{0107}{\'c}
+ \DeclareUnicodeCharacter{0108}{\^C}
+ \DeclareUnicodeCharacter{0109}{\^c}
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}
+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
+ \DeclareUnicodeCharacter{010C}{\v{C}}
+ \DeclareUnicodeCharacter{010D}{\v{c}}
+ \DeclareUnicodeCharacter{010E}{\v{D}}
+
+ \DeclareUnicodeCharacter{0112}{\=E}
+ \DeclareUnicodeCharacter{0113}{\=e}
+ \DeclareUnicodeCharacter{0114}{\u{E}}
+ \DeclareUnicodeCharacter{0115}{\u{e}}
+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+ \DeclareUnicodeCharacter{011A}{\v{E}}
+ \DeclareUnicodeCharacter{011B}{\v{e}}
+ \DeclareUnicodeCharacter{011C}{\^G}
+ \DeclareUnicodeCharacter{011D}{\^g}
+ \DeclareUnicodeCharacter{011E}{\u{G}}
+ \DeclareUnicodeCharacter{011F}{\u{g}}
+
+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+ \DeclareUnicodeCharacter{0124}{\^H}
+ \DeclareUnicodeCharacter{0125}{\^h}
+ \DeclareUnicodeCharacter{0128}{\~I}
+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
+ \DeclareUnicodeCharacter{012A}{\=I}
+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
+ \DeclareUnicodeCharacter{012C}{\u{I}}
+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+
+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
+ \DeclareUnicodeCharacter{0131}{\dotless{i}}
+ \DeclareUnicodeCharacter{0132}{IJ}
+ \DeclareUnicodeCharacter{0133}{ij}
+ \DeclareUnicodeCharacter{0134}{\^J}
+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+ \DeclareUnicodeCharacter{0139}{\'L}
+ \DeclareUnicodeCharacter{013A}{\'l}
+
+ \DeclareUnicodeCharacter{0141}{\L}
+ \DeclareUnicodeCharacter{0142}{\l}
+ \DeclareUnicodeCharacter{0143}{\'N}
+ \DeclareUnicodeCharacter{0144}{\'n}
+ \DeclareUnicodeCharacter{0147}{\v{N}}
+ \DeclareUnicodeCharacter{0148}{\v{n}}
+ \DeclareUnicodeCharacter{014C}{\=O}
+ \DeclareUnicodeCharacter{014D}{\=o}
+ \DeclareUnicodeCharacter{014E}{\u{O}}
+ \DeclareUnicodeCharacter{014F}{\u{o}}
+
+ \DeclareUnicodeCharacter{0150}{\H{O}}
+ \DeclareUnicodeCharacter{0151}{\H{o}}
+ \DeclareUnicodeCharacter{0152}{\OE}
+ \DeclareUnicodeCharacter{0153}{\oe}
+ \DeclareUnicodeCharacter{0154}{\'R}
+ \DeclareUnicodeCharacter{0155}{\'r}
+ \DeclareUnicodeCharacter{0158}{\v{R}}
+ \DeclareUnicodeCharacter{0159}{\v{r}}
+ \DeclareUnicodeCharacter{015A}{\'S}
+ \DeclareUnicodeCharacter{015B}{\'s}
+ \DeclareUnicodeCharacter{015C}{\^S}
+ \DeclareUnicodeCharacter{015D}{\^s}
+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}
+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}
+
+ \DeclareUnicodeCharacter{0160}{\v{S}}
+ \DeclareUnicodeCharacter{0161}{\v{s}}
+ \DeclareUnicodeCharacter{0162}{\cedilla{t}}
+ \DeclareUnicodeCharacter{0163}{\cedilla{T}}
+ \DeclareUnicodeCharacter{0164}{\v{T}}
+
+ \DeclareUnicodeCharacter{0168}{\~U}
+ \DeclareUnicodeCharacter{0169}{\~u}
+ \DeclareUnicodeCharacter{016A}{\=U}
+ \DeclareUnicodeCharacter{016B}{\=u}
+ \DeclareUnicodeCharacter{016C}{\u{U}}
+ \DeclareUnicodeCharacter{016D}{\u{u}}
+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
+
+ \DeclareUnicodeCharacter{0170}{\H{U}}
+ \DeclareUnicodeCharacter{0171}{\H{u}}
+ \DeclareUnicodeCharacter{0174}{\^W}
+ \DeclareUnicodeCharacter{0175}{\^w}
+ \DeclareUnicodeCharacter{0176}{\^Y}
+ \DeclareUnicodeCharacter{0177}{\^y}
+ \DeclareUnicodeCharacter{0178}{\"Y}
+ \DeclareUnicodeCharacter{0179}{\'Z}
+ \DeclareUnicodeCharacter{017A}{\'z}
+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
+ \DeclareUnicodeCharacter{017D}{\v{Z}}
+ \DeclareUnicodeCharacter{017E}{\v{z}}
+
+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}
+ \DeclareUnicodeCharacter{01C5}{D\v{z}}
+ \DeclareUnicodeCharacter{01C6}{d\v{z}}
+ \DeclareUnicodeCharacter{01C7}{LJ}
+ \DeclareUnicodeCharacter{01C8}{Lj}
+ \DeclareUnicodeCharacter{01C9}{lj}
+ \DeclareUnicodeCharacter{01CA}{NJ}
+ \DeclareUnicodeCharacter{01CB}{Nj}
+ \DeclareUnicodeCharacter{01CC}{nj}
+ \DeclareUnicodeCharacter{01CD}{\v{A}}
+ \DeclareUnicodeCharacter{01CE}{\v{a}}
+ \DeclareUnicodeCharacter{01CF}{\v{I}}
+
+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
+ \DeclareUnicodeCharacter{01D1}{\v{O}}
+ \DeclareUnicodeCharacter{01D2}{\v{o}}
+ \DeclareUnicodeCharacter{01D3}{\v{U}}
+ \DeclareUnicodeCharacter{01D4}{\v{u}}
+
+ \DeclareUnicodeCharacter{01E2}{\={\AE}}
+ \DeclareUnicodeCharacter{01E3}{\={\ae}}
+ \DeclareUnicodeCharacter{01E6}{\v{G}}
+ \DeclareUnicodeCharacter{01E7}{\v{g}}
+ \DeclareUnicodeCharacter{01E8}{\v{K}}
+ \DeclareUnicodeCharacter{01E9}{\v{k}}
+
+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
+ \DeclareUnicodeCharacter{01F1}{DZ}
+ \DeclareUnicodeCharacter{01F2}{Dz}
+ \DeclareUnicodeCharacter{01F3}{dz}
+ \DeclareUnicodeCharacter{01F4}{\'G}
+ \DeclareUnicodeCharacter{01F5}{\'g}
+ \DeclareUnicodeCharacter{01F8}{\`N}
+ \DeclareUnicodeCharacter{01F9}{\`n}
+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}
+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}
+ \DeclareUnicodeCharacter{01FE}{\'{\O}}
+ \DeclareUnicodeCharacter{01FF}{\'{\o}}
+
+ \DeclareUnicodeCharacter{021E}{\v{H}}
+ \DeclareUnicodeCharacter{021F}{\v{h}}
+
+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}
+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}
+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
+
+ \DeclareUnicodeCharacter{0232}{\=Y}
+ \DeclareUnicodeCharacter{0233}{\=y}
+ \DeclareUnicodeCharacter{0237}{\dotless{j}}
+
+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
+
+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
+
+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
+
+ \DeclareUnicodeCharacter{1E20}{\=G}
+ \DeclareUnicodeCharacter{1E21}{\=g}
+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
+ \DeclareUnicodeCharacter{1E26}{\"H}
+ \DeclareUnicodeCharacter{1E27}{\"h}
+
+ \DeclareUnicodeCharacter{1E30}{\'K}
+ \DeclareUnicodeCharacter{1E31}{\'k}
+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
+ \DeclareUnicodeCharacter{1E3E}{\'M}
+ \DeclareUnicodeCharacter{1E3F}{\'m}
+
+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
+
+ \DeclareUnicodeCharacter{1E54}{\'P}
+ \DeclareUnicodeCharacter{1E55}{\'p}
+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
+
+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
+
+ \DeclareUnicodeCharacter{1E7C}{\~V}
+ \DeclareUnicodeCharacter{1E7D}{\~v}
+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
+
+ \DeclareUnicodeCharacter{1E80}{\`W}
+ \DeclareUnicodeCharacter{1E81}{\`w}
+ \DeclareUnicodeCharacter{1E82}{\'W}
+ \DeclareUnicodeCharacter{1E83}{\'w}
+ \DeclareUnicodeCharacter{1E84}{\"W}
+ \DeclareUnicodeCharacter{1E85}{\"w}
+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
+ \DeclareUnicodeCharacter{1E8C}{\"X}
+ \DeclareUnicodeCharacter{1E8D}{\"x}
+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
+
+ \DeclareUnicodeCharacter{1E90}{\^Z}
+ \DeclareUnicodeCharacter{1E91}{\^z}
+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
+ \DeclareUnicodeCharacter{1E97}{\"t}
+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
+
+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
+
+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
+ \DeclareUnicodeCharacter{1EBC}{\~E}
+ \DeclareUnicodeCharacter{1EBD}{\~e}
+
+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
+
+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
+
+ \DeclareUnicodeCharacter{1EF2}{\`Y}
+ \DeclareUnicodeCharacter{1EF3}{\`y}
+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
+
+ \DeclareUnicodeCharacter{1EF8}{\~Y}
+ \DeclareUnicodeCharacter{1EF9}{\~y}
+
+ \DeclareUnicodeCharacter{2013}{--}
+ \DeclareUnicodeCharacter{2014}{---}
+ \DeclareUnicodeCharacter{2018}{\quoteleft}
+ \DeclareUnicodeCharacter{2019}{\quoteright}
+ \DeclareUnicodeCharacter{201A}{\quotesinglbase}
+ \DeclareUnicodeCharacter{201C}{\quotedblleft}
+ \DeclareUnicodeCharacter{201D}{\quotedblright}
+ \DeclareUnicodeCharacter{201E}{\quotedblbase}
+ \DeclareUnicodeCharacter{2022}{\bullet}
+ \DeclareUnicodeCharacter{2026}{\dots}
+ \DeclareUnicodeCharacter{2039}{\guilsinglleft}
+ \DeclareUnicodeCharacter{203A}{\guilsinglright}
+ \DeclareUnicodeCharacter{20AC}{\euro}
+
+ \DeclareUnicodeCharacter{2192}{\expansion}
+ \DeclareUnicodeCharacter{21D2}{\result}
+
+ \DeclareUnicodeCharacter{2212}{\minus}
+ \DeclareUnicodeCharacter{2217}{\point}
+ \DeclareUnicodeCharacter{2261}{\equiv}
+}% end of \utfeightchardefs
+
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+ \relax
+}
+
+% Make non-ASCII characters printable again for compatibility with
+% existing Texinfo documents that may use them, even without declaring a
+% document encoding.
+%
+\setnonasciicharscatcode \other
+
+
+\message{formatting,}
+
\newdimen\defaultparindent \defaultparindent = 15pt
\chapheadingskip = 15pt plus 4pt minus 2pt
% Prevent underfull vbox error messages.
\vbadness = 10000
-% Don't be so finicky about underfull hboxes, either.
-\hbadness = 2000
+% Don't be very finicky about underfull hboxes, either.
+\hbadness = 6666
-% Following George Bush, just get rid of widows and orphans.
+% Following George Bush, get rid of widows and orphans.
\widowpenalty=10000
\clubpenalty=10000
\fi
}
-% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can
-% set \parskip and call \setleading for \baselineskip.
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
%
-\def\internalpagesizes#1#2#3#4#5#6{%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
\voffset = #3\relax
\topskip = #6\relax
\splittopskip = \topskip
\normaloffset = #4\relax
\bindingoffset = #5\relax
%
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % if we don't reset these, they will remain at "1 true in" of
+ % whatever layout pdftex was dumped with.
+ \pdfhorigin = 1 true in
+ \pdfvorigin = 1 true in
+ \fi
+ %
+ \setleading{\textleading}
+ %
\parindent = \defaultparindent
\setemergencystretch
}
% @letterpaper (the default).
\def\letterpaper{{\globaldefs = 1
\parskip = 3pt plus 2pt minus 1pt
- \setleading{13.2pt}%
+ \textleading = 13.2pt
%
% If page is nothing but text, make it come out even.
- \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
}}
-% Use @smallbook to reset parameters for 7x9.5 (or so) format.
+% Use @smallbook to reset parameters for 7x9.25 trim size.
\def\smallbook{{\globaldefs = 1
\parskip = 2pt plus 1pt
- \setleading{12pt}%
+ \textleading = 12pt
%
- \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
+ \internalpagesizes{7.5in}{5in}%
+ {-.2in}{0in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
%
\lispnarrowing = 0.3in
\tolerance = 700
\hfuzz = 1pt
\contentsrightmargin = 0pt
- \deftypemargin = 0pt
\defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+ \parskip = 1.5pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.4in}{4.8in}%
+ {-.2in}{-.4in}%
+ {0pt}{14pt}%
+ {9in}{6in}%
%
- \let\smalldisplay = \smalldisplayx
- \let\smallexample = \smalllispx
- \let\smallformat = \smallformatx
- \let\smalllisp = \smalllispx
+ \lispnarrowing = 0.25in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .4cm
}}
% Use @afourpaper to print on European A4 paper.
\def\afourpaper{{\globaldefs = 1
- \setleading{12pt}%
\parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
%
- \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
%
\tolerance = 700
\hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
}}
-% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
-% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
-\def\afourlatex{{\globaldefs = 1
- \setleading{13.6pt}%
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
%
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \hfuzz = 1.2pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
\afourpaper
- \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
%
+ % Must explicitly reset to 0 because we call \afourpaper.
\globaldefs = 0
}}
-% Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{%
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
\afourpaper
- \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
- %
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
\globaldefs = 0
-}
+}}
% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
% Perhaps we should allow setting the margins, \topskip, \parskip,
% and/or leading, also. Or perhaps we should compute them somehow.
%
-\def\pagesizes{\parsearg\pagesizesxxx}
-\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
\def\pagesizesyyy#1,#2,#3\finish{{%
\setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
\globaldefs = 1
%
\parskip = 3pt plus 2pt minus 1pt
- \setleading{13.2pt}%
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1\relax
+ \advance\dimen0 by \voffset
%
- \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
}}
% Set default to letter.
\message{and turning on texinfo input format.}
+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\catcode`\$=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-\def\normaldollar{$}
-
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
+\catcode`\"=\other \def\normaldoublequote{"}
+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
+\catcode`\+=\other \def\normalplus{+}
+\catcode`\<=\other \def\normalless{<}
+\catcode`\>=\other \def\normalgreater{>}
+\catcode`\^=\other \def\normalcaret{^}
+\catcode`\_=\other \def\normalunderscore{_}
+\catcode`\|=\other \def\normalverticalbar{|}
+\catcode`\~=\other \def\normaltilde{~}
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
% where something hairier probably needs to be done.
%
% #1 is what to print if we are indeed using \tt; #2 is what to print
\catcode`\_=\active
\def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
\catcode`\|=\active
\def|{{\tt\char124}}
\catcode`\+=\active
\def+{{\tt \char 43}}
\catcode`\$=\active
-\def${\ifusingit{{\sl\$}}\normaldollar}
-%\catcode 27=\active
-%\def^^[{$\diamondsuit$}
-
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`+=\active
-\catcode`\_=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
% If a .fmt file is being used, characters that might appear in a file
% name cannot be active until we have parsed the command line.
% \otherifyactive is called near the end of this file.
\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+ \normalturnoffactive
+ \otherbackslash
+}
+
\catcode`\@=0
-% \rawbackslashxx output one backslash character in current font
-\global\chardef\rawbackslashxx=`\\
-%{\catcode`\\=\other
-%@gdef@rawbackslashxx{\}}
-
-% \rawbackslash redefines \ as input to do \rawbackslashxx.
-{\catcode`\\=\active
-@gdef@rawbackslash{@let\=@rawbackslashxx }}
-
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
-
-% \catcode 17=0 % Define control-q
-\catcode`\\=\active
-
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{@let"=@normaldoublequote
-@let\=@realbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus
-@let$=@normaldollar}
-
-@def@normalturnoffactive{@let"=@normaldoublequote
-@let\=@normalbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus
-@let$=@normaldollar}
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active % @ for escape char from now on.
+
+% The story here is that in math mode, the \char of \backslashcurfont
+% ends up printing the roman \ from the math symbol font (because \char
+% in math mode uses the \mathcode, and plain.tex sets
+% \mathcode`\\="026E). It seems better for @backslashchar{} to always
+% print a typewriter backslash, hence we use an explicit \mathchar,
+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
+% ignored family value; char position "5C). We can't use " for the
+% usual hex value because it has already been made active.
+@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
+@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents.
+
+% On startup, @fixbackslash assigns:
+% @let \ = @normalbackslash
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other. We switch back and forth between these.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'. Also revert - to its normal character, in
+% case the active - from code has slipped in.
+%
+{@catcode`- = @active
+ @gdef@normalturnoffactive{%
+ @let-=@normaldash
+ @let"=@normaldoublequote
+ @let$=@normaldollar %$ font-lock fix
+ @let+=@normalplus
+ @let<=@normalless
+ @let>=@normalgreater
+ @let\=@normalbackslash
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let~=@normaltilde
+ @markupsetuplqdefault
+ @markupsetuprqdefault
+ @unsepspaces
+ }
+}
% Make _ and + \other characters, temporarily.
% This is canceled by @fixbackslash.
@global@let\ = @eatinput
% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
+% the first `\' in the file would cause an error. This macro tries to fix
% that, assuming it is called before the first `\' could plausibly occur.
-% Also back turn on active characters that might appear in the input
+% Also turn back on active characters that might appear in the input
% file name, in case not using a pre-dumped format.
%
@gdef@fixbackslash{%
% Say @foo, not \foo, in error messages.
@escapechar = `@@
-% These look ok in all fonts, so just make them not special.
-@catcode`@& = @other
-@catcode`@# = @other
-@catcode`@% = @other
-
-@c Set initial fonts.
-@textfonts
-@rm
-
+% These (along with & and #) are made active for url-breaking, so need
+% active definitions as the normal characters.
+@def@normaldot{.}
+@def@normalquest{?}
+@def@normalslash{/}
+
+% These look ok in all fonts, so just make them not special.
+% @hashchar{} gets its own user-level command, because of #line.
+@catcode`@& = @other @def@normalamp{&}
+@catcode`@# = @other @def@normalhash{#}
+@catcode`@% = @other @def@normalpercent{%}
+
+@let @hashchar = @normalhash
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+@markupsetuplqdefault
+@markupsetuprqdefault
@c Local variables:
@c eval: (add-hook 'write-file-hooks 'time-stamp)
@c page-delimiter: "^\\\\message"
@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d.%H"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
@c time-stamp-end: "}"
@c End:
+
+@c vim:sw=2:
+
+@ignore
+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore